+using System.Collections.Generic;
+using ServiceStack.Auth;
+ public class LegacyAuthProvider : CredentialsAuthProvider
+ readonly List<LegacyUser> _legacyUsers = new List<LegacyUser>()
+ new LegacyUser() { UserName = "user1@host.com", Password = "p@55word", Id = Guid.NewGuid(), DatabaseId = Guid.NewGuid() },
+ new LegacyUser() { UserName = "user2@host.com", Password = "p@55word", Id = Guid.NewGuid(), DatabaseId = Guid.NewGuid() },
+ new LegacyUser() { UserName = "user3@host.com", Password = "p@55word", Id = Guid.NewGuid(), DatabaseId = Guid.NewGuid() },
+ new LegacyUser() { UserName = "user4@host.com", Password = "p@55word", Id = Guid.NewGuid(), DatabaseId = Guid.NewGuid() },
+ public override bool TryAuthenticate(IServiceBase authService, string userName, string password)
+ var defaultResult = base.TryAuthenticate(authService, userName, password);
+ if (defaultResult) return true;
+ var authRepository = (IUserAuthRepository)HostContext.AppHost.GetAuthRepository(authService.Request);
+ var administratorFound = _legacyUsers.Where(u => u.UserName == userName && u.Password == password).ToList();
+ if (administratorFound.Count == 0) return false;
+ var administrator = administratorFound.First();
+ IUserAuth userAuth = new UserAuth
+ UserName = administrator.UserName,
+ Email = administrator.UserName
+ userAuth = authRepository.CreateUserAuth(userAuth, administrator.Password);
+ AssignRoleAndPermissionsForAdmistrator(authRepository, userAuth, administrator);
+ static void AssignRoleAndPermissionsForAdmistrator(IAuthRepository authRepository, IUserAuth userAuth,
+ AddRoleIfNotExists(authRepository, userAuth, "Admin");
+ AddPermissionIfNotExists(authRepository, userAuth, "DBID|" + legacyUser.DatabaseId);
+ AddPermissionIfNotExists(authRepository, userAuth, "legacy-administrator-id|" + legacyUser.Id);
+ static void AddRoleIfNotExists(IAuthRepository rep, IUserAuth user, string role)
+ if (!rep.GetRoles(user).Contains(role))
+ rep.AssignRoles(user, roles: new[] { role });
+ static void AddPermissionIfNotExists(IAuthRepository rep, IUserAuth user, string perm)
+ if (!rep.GetPermissions(user).Contains(perm))
+ rep.AssignRoles(user, permissions: new[] { perm });
+ public class LegacyUser
+ public Guid Id { get; set; }
+ public string UserName { get; set; }
+ public string Password { get; set; }
+ public Guid DatabaseId { get; set; }