コード例 #1
0
        public static ClaimsPrincipal CreatePrincipal(IUserRetrieveService userRetriever, string username,
                                                      string authType)
        {
            if (userRetriever is null)
            {
                throw new ArgumentNullException(nameof(userRetriever));
            }

            if (username is null)
            {
                throw new ArgumentNullException(nameof(username));
            }

            var user = userRetriever.ByUsername(username);

            if (user == null)
            {
                throw new ArgumentOutOfRangeException(nameof(username));
            }

            if (authType == null)
            {
                throw new ArgumentNullException(nameof(authType));
            }

            var identity = new GenericIdentity(username, authType);

            identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, user.Id));

            return(new ClaimsPrincipal(identity));
        }
コード例 #2
0
 public NotesBehavior(IRequestContext context, ISqlConnections sqlConnections,
                      IUserRetrieveService userRetriever)
 {
     Context        = context ?? throw new ArgumentNullException(nameof(context));
     SqlConnections = sqlConnections ?? throw new ArgumentNullException(nameof(sqlConnections));
     UserRetriever  = userRetriever ?? throw new ArgumentNullException(nameof(userRetriever));
 }
コード例 #3
0
 public UserDataScript(ITwoLevelCache cache, IPermissionService permissions,
                       ITypeSource typeSource, IUserAccessor userAccessor, IUserRetrieveService userRetrieveService)
 {
     Cache         = cache ?? throw new ArgumentNullException(nameof(cache));
     Permissions   = permissions ?? throw new ArgumentNullException(nameof(permissions));
     TypeSource    = typeSource ?? throw new ArgumentNullException(nameof(typeSource));
     UserAccessor  = userAccessor ?? throw new ArgumentNullException(nameof(userAccessor));
     UserRetriever = userRetrieveService ?? throw new ArgumentNullException(nameof(userRetrieveService));
 }
コード例 #4
0
 public ImpersonationContext(string username)
 {
     this.username = username;
     oldAuthorizationService = Dependency.TryResolve<IAuthorizationService>();
     oldUserRetrieveService = Dependency.TryResolve<IUserRetrieveService>();
     var registrar = Dependency.Resolve<IDependencyRegistrar>();
     authorizationServiceReg = registrar.RegisterInstance<IAuthorizationService>(this);
     userRetrieveServiceReg = registrar.RegisterInstance<IUserRetrieveService>(this);
 }
コード例 #5
0
        /// <summary>
        /// Gets user definition for given user identity
        /// </summary>
        /// <param name="identity"></param>
        /// <param name="userRetrieveService">User retrieve service</param>
        /// <returns></returns>
        public static IUserDefinition GetUserDefinition(this ClaimsPrincipal identity,
                                                        IUserRetrieveService userRetrieveService)
        {
            if (!IsLoggedIn(identity))
            {
                return(null);
            }

            return(userRetrieveService.ByUsername(identity.Identity.Name));
        }
コード例 #6
0
        public ImpersonationContext(string username)
        {
            this.username           = username;
            oldAuthorizationService = Dependency.TryResolve <IAuthorizationService>();
            oldUserRetrieveService  = Dependency.TryResolve <IUserRetrieveService>();
            var registrar = Dependency.Resolve <IDependencyRegistrar>();

            authorizationServiceReg = registrar.RegisterInstance <IAuthorizationService>(this);
            userRetrieveServiceReg  = registrar.RegisterInstance <IUserRetrieveService>(this);
        }
コード例 #7
0
        /// <summary>
        /// Gets user definition for given user identity
        /// </summary>
        /// <param name="identity"></param>
        /// <param name="userRetrieveService">User retrieve service</param>
        /// <returns></returns>
        public static TUserDefinition GetUserDefinition <TUserDefinition>(this ClaimsPrincipal identity,
                                                                          IUserRetrieveService userRetrieveService)
            where TUserDefinition : class, IUserDefinition
        {
            if (!IsLoggedIn(identity))
            {
                return(null);
            }

            return((TUserDefinition)userRetrieveService.ByUsername(identity.Identity.Name));
        }
コード例 #8
0
        public Result <ServiceResponse> Login(LoginRequest request,
                                              [FromServices] IUserPasswordValidator passwordValidator,
                                              [FromServices] IUserRetrieveService userRetriever,
                                              [FromServices] IEmailSender emailSender = null)
        {
            return(this.ExecuteMethod(() =>
            {
                if (request is null)
                {
                    throw new ArgumentNullException(nameof(request));
                }

                if (string.IsNullOrEmpty(request.Username))
                {
                    throw new ArgumentNullException("username");
                }

                if (passwordValidator is null)
                {
                    throw new ArgumentNullException(nameof(passwordValidator));
                }

                if (userRetriever is null)
                {
                    throw new ArgumentNullException(nameof(userRetriever));
                }

                var username = request.Username;
                var result = passwordValidator.Validate(ref username, request.Password);
                if (result == PasswordValidationResult.Valid)
                {
                    var principal = UserRetrieveService.CreatePrincipal(userRetriever, username, authType: "Password");
                    HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal)
                    .GetAwaiter().GetResult();
                    return new ServiceResponse();
                }

                throw new ValidationError("AuthenticationError", Texts.Validation.AuthenticationError.ToString(Localizer));
            }));
        }
コード例 #9
0
        public virtual void Dispose()
        {
            var authorizationService = Dependency.TryResolve <IAuthorizationService>();
            var userRetrieveService  = Dependency.TryResolve <IAuthorizationService>();

            if (authorizationService != null && authorizationService != this)
            {
                throw new InvalidOperationException("Container changed! Possible multi-thread error, or disposing order mistake!");
            }

            if (userRetrieveService != null && userRetrieveService != this)
            {
                throw new InvalidOperationException("Container changed! Possible multi-thread error, or disposing order mistake!");
            }

            var registrar = Dependency.Resolve <IDependencyRegistrar>();

            if (oldAuthorizationService == null)
            {
                registrar.Remove(authorizationServiceReg);
            }
            else
            {
                registrar.RegisterInstance <IAuthorizationService>(oldAuthorizationService);
            }

            if (oldUserRetrieveService == null)
            {
                registrar.Remove(userRetrieveServiceReg);
            }
            else
            {
                registrar.RegisterInstance <IUserRetrieveService>(oldUserRetrieveService);
            }

            oldAuthorizationService = null;
            oldUserRetrieveService  = null;
            userRetrieveServiceReg  = null;
            authorizationServiceReg = null;
        }
コード例 #10
0
 public UserPasswordValidator(ITwoLevelCache cache, ISqlConnections sqlConnections, IUserRetrieveService userRetriever,
                              ILogger <UserPasswordValidator> log = null, IDirectoryService directoryService = null)
 {
     Cache            = cache ?? throw new ArgumentNullException(nameof(cache));
     SqlConnections   = sqlConnections ?? throw new ArgumentNullException(nameof(sqlConnections));
     UserRetriever    = userRetriever ?? throw new ArgumentNullException(nameof(userRetriever));
     DirectoryService = directoryService;
     Log = log;
 }
コード例 #11
0
        public virtual void Dispose()
        {
            var authorizationService = Dependency.TryResolve<IAuthorizationService>();
            var userRetrieveService = Dependency.TryResolve<IAuthorizationService>();

            if (authorizationService != null && authorizationService != this)
                throw new InvalidOperationException("Container changed! Possible multi-thread error, or disposing order mistake!");

            if (userRetrieveService != null && userRetrieveService != this)
                throw new InvalidOperationException("Container changed! Possible multi-thread error, or disposing order mistake!");

            var registrar = Dependency.Resolve<IDependencyRegistrar>();

            if (oldAuthorizationService == null)
            {
                registrar.Remove(authorizationServiceReg);
            }
            else
            {
                registrar.RegisterInstance<IAuthorizationService>(oldAuthorizationService);
            }

            if (oldUserRetrieveService == null)
            {
                registrar.Remove(userRetrieveServiceReg);
            }
            else
            {
                registrar.RegisterInstance<IUserRetrieveService>(oldUserRetrieveService);
            }

            oldAuthorizationService = null;
            oldUserRetrieveService = null;
            userRetrieveServiceReg = null;
            authorizationServiceReg = null;
        }