예제 #1
0
        public static ServerResponse ResetPassword(string emailOrMobile)
        {
            ServerResponse response = new ServerResponse();

            try
            {
                IRandomTextGenerator generator = IocInstance.Container.Resolve <IRandomTextGenerator>();
                var newPassword        = generator.Generate(RandomChars, RandomLength);
                ResetPasswordInfo info = new ResetPasswordInfo()
                {
                    ClientId      = CurrentClient.ClientId,
                    SessionId     = HttpContext.Current.Session.SessionID,
                    DeviceId      = HttpContext.Current.Request.UserHostAddress,
                    DeviceInfo    = HttpContext.Current.Request.UserAgent,
                    EmailOrMobile = emailOrMobile,
                    NewPassword   = newPassword
                };

                var cp = IocInstance.Container.Resolve <ISSOClientProvider>();
                var r  = cp.ResetPassword(info);
                response.Status  = r.Status;
                response.Message = r.Message;
            }
            catch (Exception ex)
            {
                response.Status  = ResponseStatus.Exception;
                response.Message = ex.Message;
            }

            return(response);
        }
예제 #2
0
        public LoginMessage AuthenticateAccount(string site, string device, string deviceId, string sessionId, string account, string password)
        {
            LoginMessage msg  = new LoginMessage();
            var          user = repoUser.Query(o => o.Account == account && o.Status == DataStatus.Normal).FirstOrDefault();

            if (user == null)
            {
                msg.Status = LoginStatus.AccountNotExists;
                return(msg);
            }
            password = pwdEncrypt.Encrypt(password);
            if (user.Password != password)
            {
                msg.Status = LoginStatus.PasswordNotCorrect;
                return(msg);
            }

            var siteInfo = host.GetSites().GetSiteByName(site);

            if (siteInfo == null)
            {
                msg.Status  = LoginStatus.Exception;
                msg.Message = string.Format("Site {0} is not found.", site);
                return(msg);
            }
            string token   = generator.Generate(RandomChars, AccessTokenLength);
            var    session = repoSession.Query(o => o.SessionId == sessionId).FirstOrDefault();

            if (session == null)
            {
                session = new ServerSession()
                {
                    SessionId             = sessionId,
                    SiteName              = site,
                    UserId                = user.UserId,
                    Device                = device,
                    DeviceId              = deviceId,
                    AccessToken           = token,
                    AccessTokenExpiryTime = DateTime.Now.AddMinutes(SessionTimeOutMinutes),
                    LastAccessTime        = DateTime.Now
                };

                repoSession.Insert(session);
            }
            else
            {
                session.AccessToken           = token;
                session.UserId                = user.UserId;
                session.AccessTokenExpiryTime = DateTime.Now.AddMinutes(SessionTimeOutMinutes);
                session.LastAccessTime        = DateTime.Now;

                repoSession.Update(session);
            }

            msg.Status           = LoginStatus.Success;
            msg.EncryptedSession = GetEncryptedLocalSession(siteInfo, user, session);
            return(msg);
        }
예제 #3
0
        public ActionResult Get()
        {
            int width  = 100;
            int height = 30;

            if (!string.IsNullOrEmpty(Request.QueryString["w"]))
            {
                int.TryParse(Request.QueryString["w"], out width);
            }
            if (!string.IsNullOrEmpty(Request.QueryString["h"]))
            {
                int.TryParse(Request.QueryString["h"], out height);
            }
            string       randomText = radomTextGenerator.Generate(AllowedChars, Length);
            Bitmap       img        = captchaGenerator.Generate(this.Session.SessionID, randomText, width, height);
            MemoryStream stream     = new MemoryStream();

            img.Save(stream, ImageFormat.Jpeg);
            return(new FileContentResult(stream.ToArray(), "image/jpeg"));
        }
예제 #4
0
        public IServerResponse <Session> SignOn(SignOnInfo signOnInfo)
        {
            var client    = GetClient(signOnInfo.ClientId);
            var encryptor = GetClientEncryptor(client);
            var hpwd      = pwdEncryptor.Encrypt(signOnInfo.Password);

            var obj = repoUser.Query(o => (o.Account == signOnInfo.AccountOrEmailOrMobile || o.Email == signOnInfo.AccountOrEmailOrMobile || o.Mobile == signOnInfo.AccountOrEmailOrMobile) &&
                                     o.Password == hpwd).FirstOrDefault();

            ServerResponse <Session> response = new ServerResponse <Session>();

            if (obj == null)
            {
                response.Status  = ResponseStatus.Failed;
                response.Message = DAF.SSO.Resources.Locale(o => o.AccountNotFound);
            }
            else
            {
                switch (obj.Status)
                {
                case DataStatus.Deleted:
                    response.Status  = ResponseStatus.Failed;
                    response.Message = DAF.SSO.Resources.Locale(o => o.AccountNotFound);
                    break;

                case DataStatus.Locked:
                    response.Status  = ResponseStatus.Failed;
                    response.Message = DAF.SSO.Resources.Locale(o => o.AccountLocked);
                    break;

                case DataStatus.ReadOnly:
                    response.Status  = ResponseStatus.Failed;
                    response.Message = DAF.SSO.Resources.Locale(o => o.AccountIsReadOnly);
                    break;

                case DataStatus.Normal:
                default:
                    response.Status = ResponseStatus.Success;
                    break;
                }
            }
            if (response.Status == ResponseStatus.Success)
            {
                try
                {
                    trans.BeginTransaction();
                    var serverSession = repoServerSession.Query(o => o.SessionId == signOnInfo.SessionId && o.CientId == client.ClientId && o.DeviceId == signOnInfo.DeviceId).FirstOrDefault();
                    if (serverSession == null)
                    {
                        serverSession = new ServerSession()
                        {
                            CientId               = client.ClientId,
                            SessionId             = signOnInfo.SessionId,
                            FromCientId           = null,
                            DeviceId              = signOnInfo.DeviceId,
                            DeviceInfo            = signOnInfo.DeviceInfo,
                            UserId                = obj.UserId,
                            AccessToken           = randomGenerator.Generate(config.TokenAllowedChars, config.TokenLength),
                            LastAccessTime        = DateTime.Now,
                            AccessTokenExpiryTime = DateTime.Now.AddMinutes(config.SessionExpiredTimeOutMunites)
                        };
                        repoServerSession.Insert(serverSession);
                    }
                    else
                    {
                        if (serverSession.AccessTokenExpiryTime < DateTime.Now)
                        {
                            serverSession.AccessToken = randomGenerator.Generate(config.TokenAllowedChars, config.TokenLength);
                        }
                        serverSession.LastAccessTime        = DateTime.Now;
                        serverSession.AccessTokenExpiryTime = DateTime.Now.AddMinutes(config.SessionExpiredTimeOutMunites);

                        repoServerSession.Update(serverSession);
                    }
                    trans.Commit();

                    response.Data = GetClientSession(client, obj, serverSession);
                }
                catch (Exception ex)
                {
                    trans.Rollback();
                    response.Status  = ResponseStatus.Failed;
                    response.Message = ex.Message;
                }
            }
            return(response);
        }
예제 #5
0
 public string NewId()
 {
     return(generator.Generate("1234567890", 8));
 }