예제 #1
0
        public override void Process(ApiServer server)
        {
            if (server.AssertServerSetup(this) || server.AssertAccountNotNull() || server.AssertUserOnline() || server.AssertEmailSet())
            {
                return;
            }
            if (!EmailEssentials.IsValid(server.Account.AccountInfo.Email))
            {
                ApiError.Throw(ApiErrorCode.InvalidEmailAddress, server, "Email address is invalid.");
                return;
            }
            server.Account.AuthenticationCode = SecurityManager.GenerateSecurityCode();
            server.Account.AuthenticationId   = ApiRequestId.ConfirmPasswordChange;
            server.Account.AuthenticationTime = DatabaseEssentials.GetTimeStamp();
            server.Account.Password           = SecurityManager.ScryptHash(Password);
            string       name         = string.IsNullOrEmpty(server.Account.AccountInfo.Name) ? "user" : server.Account.AccountInfo.Name;
            EmailManager emailManager = EmailManager.Create(Subject.ChangePassword, server.Account.AccountInfo.Email, name, server.Account.AuthenticationCode);
            bool         success      = emailManager.Send();

            if (!success)
            {
                ApiError.Throw(ApiErrorCode.InternalServerError, server, "Failed to send confirmation email.");
                return;
            }
            GenericSuccessResponse apiResponse           = new GenericSuccessResponse(ResponseId.PasswordChange, true);
            SerializedApiResponse  serializedApiResponse = SerializedApiResponse.Create(apiResponse);
            string json = serializedApiResponse.Serialize();

            server.Send(json);
            server.UnitTesting.MethodSuccess = true;
        }
예제 #2
0
        public override void Process(ApiServer server)
        {
            if (server.AssertServerSetup(this) || server.AssertAccountNull())
            {
                return;
            }
            if (!EmailEssentials.IsValid(Email))
            {
                ApiError.Throw(ApiErrorCode.InvalidEmailAddress, server, "Email address is invalid.");
                return;
            }
            bool success;

            using (DatabaseManager databaseManager = new DatabaseManager(server))
            {
                if (!databaseManager.CheckEmailAvailable(Email, out success))
                {
                    if (!success)
                    {
                        return;
                    }
                    ApiError.Throw(ApiErrorCode.InvalidEmailAddress, server, "Email address already in use.");
                    return;
                }
            }
            string passwordHash = SecurityManager.ScryptHash(Password);

            server.Account = new Account(new AccountInfo(null, null, null, null, null, null, null, null, null, null, null, null, null, 50, null, Email, true, true), false, string.Empty)
            {
                Password           = passwordHash,
                AuthenticationCode = SecurityManager.GenerateSecurityCode(),
                AuthenticationId   = ApiRequestId.ConfirmAccount,
                AuthenticationTime = DatabaseEssentials.GetTimeStamp()
            };
            EmailManager emailManager = EmailManager.Create(Subject.CreateAccount, Email, "new user", server.Account.AuthenticationCode);

            success = emailManager.Send();
            if (!success)
            {
                ApiError.Throw(ApiErrorCode.InternalServerError, server, "Failed to send confirmation email.");
                return;
            }
            GenericSuccessResponse apiResponse           = new GenericSuccessResponse(ResponseId.CreateAccount, true);
            SerializedApiResponse  serializedApiResponse = SerializedApiResponse.Create(apiResponse);
            string json = serializedApiResponse.Serialize();

            server.Send(json);
            server.UnitTesting.MethodSuccess = true;
        }