internal UserAuthManager(IPrincipalUser principal)
 {
     _me     = principal;
     _db     = principal.ServiceProvider.GetRequiredService <IUsersDbContext>();
     _http   = principal.ServiceProvider.GetRequiredService <IHttpContextAccessor>().HttpContext;
     _wechat = principal.ServiceProvider.GetService <WeChatService>();
 }
示例#2
0
        public static UserQuickViewModel QuickView(this IPrincipalUser principal)
        {
            if (principal.Id == 0)
            {
                return(new UserQuickViewModel());
            }

            return((UserQuickViewModel)principal.Cache().GetOrAdd(nameof(UserQuickViewModel), key => {
                using var scope = principal.ServiceProvider.CreateScope();
                var db = scope.ServiceProvider.GetRequiredService <IUsersDbContext>();

                var quickView = db.Users
                                .AsNoTracking()
                                .Where(x => x.Id == principal.Id)
                                .Select(x => new UserQuickViewModel {
                    PhotoUrl = x.PhotoUrl ?? (x.WeChat == null ? null : x.WeChat.HeadImageUrl),
                    PhoneNumber = x.Phone == null ? null : x.Phone.Number,
                    EmailAddress = x.Email == null ? null : x.Email.EmailAddress,
                    RegisteredTime = x.RegisteredTime,
                    AwaitChangePassword = Todo.NoNeed
                })
                                .SingleOrDefault();

                if (quickView == null)
                {
                    principal.Auth().SignOut();
                }
                return quickView ?? new UserQuickViewModel();
            }));
        }
        public static UserInfoViewModel User(this IPrincipalUser principal)
        {
            if (principal.Id == 0 || !(principal.SessionData() is SessionDataContainer sessionData))
            {
                return(new UserInfoViewModel());
            }

            return((UserInfoViewModel)sessionData.GetOrAdd(nameof(UserInfoViewModel), key => {
                using var scope = principal.ServiceProvider.CreateScope();
                var db = scope.ServiceProvider.GetRequiredService <IUsersDbContext>();

                var userInfo = db.Users
                               .AsNoTracking()
                               .Where(x => x.Id == principal.Id)
                               .Select(x => new UserInfoViewModel {
                    PhotoUrl = x.PhotoUrl ?? (x.WeChat == null ? null : x.WeChat.HeadImageUrl),
                    PhoneNumber = x.Phone == null ? null : x.Phone.Number,
                    EmailAddress = x.Email == null ? null : x.Email.EmailAddress,
                    RegisteredTime = x.RegisteredTime,
                    AwaitChangePassword = ActionAwait.NoNeed,
                    IsTwoFactorValidated = false
                })
                               .SingleOrDefault();

                if (userInfo == null)
                {
                    principal.Auth().SignOut();
                }
                return userInfo ?? new UserInfoViewModel();
            }));
        }
示例#4
0
 internal UserOrdersManager(IPrincipalUser principal)
 {
     _me     = principal;
     _db     = principal.ServiceProvider.GetRequiredService <IShoppingDbContext>();
     _http   = principal.ServiceProvider.GetRequiredService <IHttpContextAccessor>().HttpContext;
     _wechat = principal.ServiceProvider.GetService <WeChatService>();
     _alipay = principal.ServiceProvider.GetService <AlipayService>();
 }
示例#5
0
 public static void AbandonCache(this IPrincipalUser principal)
 {
     if (_pool != null)
     {
         _pool.Drop(principal.Id.ToString());
         _pool.Drop(principal.AnonymousId.ToString());
     }
 }
示例#6
0
 public void TagPrincipalIdentity(string fileName, IPrincipalUser principal)
 {
     Tag(fileName, new Dictionary <string, string> {
         ["UserId"]          = principal.Id.ToString(),
         ["UserAnonymousId"] = principal.AnonymousId.ToString(),
         ["UserName"]        = principal.DisplayName
     });
 }
示例#7
0
 public static CacheDictionaryBag Cache(this IPrincipalUser principal)
 {
     _timeoutSeconds ??= principal.ServiceProvider.GetService <IKeyValueManager>()?.PrincipalCacheDataBagWillExpireAfterSeconds() ?? 3600;
     _pool ??= new CacheDataPool <CacheDictionaryBag>(principal.ServiceProvider.GetRequiredService <IMemoryCache>())
     {
         Timeout = TimeSpan.FromSeconds(_timeoutSeconds.Value)
     };
     _pool.Drop(principal.CacheKeyDroppable());
     return(_pool.PickOrCreate(principal.CacheKey(), _ => new CacheDictionaryBag(principal)));
 }
示例#8
0
 public TwoFactorManager(ITwoFactorDbContext twoFactorDb, IPrincipalUser principal, ISmsSender?smsSender, IMailSender?mailSender)
 {
     if (smsSender == null && mailSender == null)
     {
         throw new ArgumentNullException(null, $"At least to configure one of {smsSender} or {mailSender}");
     }
     _twoFactorDb = twoFactorDb;
     _me          = principal;
     _smsSender   = smsSender;
     _mailSender  = mailSender;
 }
示例#9
0
 internal static void ReadValuesFromPrincipal(this LogBase log, IPrincipalUser principal)
 {
     log.AnonymousId = principal.AnonymousId;
     log.UserId      = principal.Id;
     log.UserName    = principal.DisplayName;
 }
示例#10
0
 public static IDiagnosticsLogger Logger(this IPrincipalUser principal) => principal.ServiceProvider.GetRequiredService <IDiagnosticsLogger>();
 public static UserMessagesManager Messages(this IPrincipalUser principal) => new UserMessagesManager(principal);
 public static UserGroupsManager Groups(this IPrincipalUser principal) => new UserGroupsManager(principal);
示例#13
0
 internal AntiViolenceBlocker(IPrincipalUser principal)
 {
     _me = principal;
 }
示例#14
0
 public static UserProfileFunctions Profile(this IPrincipalUser principal) => new UserProfileFunctions(principal);
示例#15
0
 public static UserGroupsFunctions Groups(this IPrincipalUser principal) => new UserGroupsFunctions(principal);
示例#16
0
 public static UserAuthFunctions Auth(this IPrincipalUser principal) => new UserAuthFunctions(principal);
示例#17
0
 public TwoFactorManager(ITwoFactorDbContext twoFactorDb, IPrincipalUser principal, ISmsSender smsSender)
     : this(twoFactorDb, principal, smsSender, null)
 {
 }
示例#18
0
 internal CacheDictionaryBag(IPrincipalUser principal)
 {
     _principal = principal;
 }
示例#19
0
 internal static string CacheKey(this IPrincipalUser principal)
 {
     return(principal.IsAnonymous
                         ? principal.AnonymousId.ToString()
                         : principal.Id.ToString());
 }
示例#20
0
 internal UserAuthFunctions(IPrincipalUser principal)
 {
     _me = principal;
     _db = principal.ServiceProvider.GetRequiredService <IUsersDbContext>();
 }
示例#21
0
 internal static string CacheKeyDroppable(this IPrincipalUser principal)
 {
     return(principal.IsAuthenticated
                         ? principal.AnonymousId.ToString()
                         : principal.Id.ToString());
 }
示例#22
0
 public IndexPageModel(IPrincipalUser principal, IDiagnosticsDbContext db)
 {
     _me = principal;
     _db = db;
 }
示例#23
0
 public static UserMessagesFunctions Messages(this IPrincipalUser principal) => new UserMessagesFunctions(principal);
示例#24
0
 public TwoFactorManager(ITwoFactorDbContext twoFactorDb, IPrincipalUser principal, IMailSender mailSender)
     : this(twoFactorDb, principal, null, mailSender)
 {
 }
示例#25
0
 public static ITwoFactorManager TwoFactor(this IPrincipalUser principal) => principal.ServiceProvider.GetRequiredService <ITwoFactorManager>();
 public static UserAuthManager Auth(this IPrincipalUser principal) => new UserAuthManager(principal);
 internal UserProfileManager(IPrincipalUser principal)
 {
     _me = principal;
     _db = principal.ServiceProvider.GetRequiredService <IUsersDbContext>();
 }
 public static UserProfileManager Profile(this IPrincipalUser principal) => new UserProfileManager(principal);
示例#29
0
 internal UserCartManager(IPrincipalUser principal)
 {
     _me = principal;
     _db = principal.ServiceProvider.GetRequiredService <IShoppingDbContext>();
 }
示例#30
0
 public AntiViolenceDefender(IPrincipalUser principal)
 {
     _me = principal;
 }