Skip to content

Commit

Permalink
fix: add logic for blocking login when email is in freeze
Browse files Browse the repository at this point in the history
  • Loading branch information
GareArc committed Dec 26, 2024
1 parent 0db1e1b commit 2467880
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 19 deletions.
5 changes: 1 addition & 4 deletions api/controllers/console/auth/forgot_password.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import base64
import secrets

from api.services.errors.account import AccountRegisterError
from flask import request
from flask_restful import Resource, reqparse

from constants.languages import languages
from controllers.console import api
from controllers.console.auth.error import EmailCodeError, InvalidEmailError, InvalidTokenError, PasswordMismatchError
from controllers.console.error import AccountNotFound, AccountOnRegisterError, EmailSendIpLimitError
from controllers.console.error import AccountNotFound, EmailSendIpLimitError
from controllers.console.wraps import setup_required
from events.tenant_event import tenant_was_created
from extensions.ext_database import db
Expand Down Expand Up @@ -125,8 +124,6 @@ def post(self):
)
except WorkSpaceNotAllowedCreateError:
pass
except AccountRegisterError as e:
return AccountOnRegisterError(message=str(e))

return {"result": "success"}

Expand Down
4 changes: 0 additions & 4 deletions api/controllers/console/auth/login.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from typing import cast

import flask_login
from api.services.errors.account import AccountRegisterError
from flask import request
from flask_restful import Resource, reqparse

Expand All @@ -18,7 +17,6 @@
from controllers.console.error import (
AccountBannedError,
AccountNotFound,
AccountOnRegisterError,
EmailSendIpLimitError,
NotAllowedCreateWorkspace,
)
Expand Down Expand Up @@ -198,8 +196,6 @@ def post(self):
)
except WorkSpaceNotAllowedCreateError:
return NotAllowedCreateWorkspace()
except AccountRegisterError as e:
return AccountOnRegisterError(message=str(e))
token_pair = AccountService.login(account, ip_address=extract_remote_ip(request))
AccountService.reset_login_error_rate_limit(args["email"])
return {"result": "success", "data": token_pair.model_dump()}
Expand Down
7 changes: 4 additions & 3 deletions api/controllers/console/auth/oauth.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from typing import Optional

import requests
from api.controllers.console.error import AccountOnRegisterError
from flask import current_app, redirect, request
from flask_restful import Resource
from werkzeug.exceptions import Unauthorized
Expand All @@ -16,7 +17,7 @@
from models import Account
from models.account import AccountStatus
from services.account_service import AccountService, RegisterService, TenantService
from services.errors.account import AccountNotFoundError, AccountRegisterError
from services.errors.account import AccountNotFoundError
from services.errors.workspace import WorkSpaceNotAllowedCreateError, WorkSpaceNotFoundError
from services.feature_service import FeatureService

Expand Down Expand Up @@ -98,8 +99,8 @@ def get(self, provider: str):
f"{dify_config.CONSOLE_WEB_URL}/signin"
"?message=Workspace not found, please contact system admin to invite you to join in a workspace."
)
except AccountRegisterError as e:
return redirect(f"{dify_config.CONSOLE_WEB_URL}/signin?message={e.message}")
except AccountOnRegisterError as e:
return redirect(f"{dify_config.CONSOLE_WEB_URL}/signin?message={e.description}")

# Check account status
if account.status == AccountStatus.BANNED.value:
Expand Down
5 changes: 1 addition & 4 deletions api/controllers/console/error.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,4 @@ class UnauthorizedAndForceLogout(BaseHTTPException):
class AccountOnRegisterError(BaseHTTPException):
error_code = "account_register_error"
code = 400

def __init__(self, message: str = ""):
description = f"Account register error: {message}."
super().__init__(description=description)
description = "Account register error."
4 changes: 2 additions & 2 deletions api/controllers/console/workspace/account.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ def post(self):
return {"result": "success"}


class AccountDeleleUpdateFeedbackApi(Resource):
class AccountDeleteUpdateFeedbackApi(Resource):
@setup_required
def post(self):
account = current_user
Expand All @@ -304,6 +304,6 @@ def post(self):
api.add_resource(AccountIntegrateApi, "/account/integrates")
api.add_resource(AccountDeleteVerifyApi, "/account/delete/verify")
api.add_resource(AccountDeleteApi, "/account/delete")
api.add_resource(AccountDeleleUpdateFeedbackApi, "/account/delete/feedback")
api.add_resource(AccountDeleteUpdateFeedbackApi, "/account/delete/feedback")
# api.add_resource(AccountEmailApi, '/account/email')
# api.add_resource(AccountEmailVerifyApi, '/account/email-verify')
10 changes: 8 additions & 2 deletions api/services/account_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from hashlib import sha256
from typing import Any, Optional

from api.controllers.console.error import AccountOnRegisterError
from pydantic import BaseModel
from sqlalchemy import func
from werkzeug.exceptions import Unauthorized
Expand Down Expand Up @@ -209,8 +210,8 @@ def create_account(
raise AccountNotFound()

if dify_config.BILLING_ENABLED and BillingService.is_email_in_freeze(email):
raise AccountRegisterError(
"Unable to re-register the account because the deletion occurred less than 30 days ago"
raise AccountOnRegisterError(
description="Unable to re-register the account because the deletion occurred less than 30 days ago"
)

account = Account()
Expand Down Expand Up @@ -464,6 +465,11 @@ def get_user_through_email(cls, email: str):
if account.status == AccountStatus.BANNED.value:
raise Unauthorized("Account is banned.")

if dify_config.BILLING_ENABLED and BillingService.is_email_in_freeze(email):
raise AccountOnRegisterError(
description="Unable to re-register the account because the deletion occurred less than 30 days ago"
)

return account

@staticmethod
Expand Down

0 comments on commit 2467880

Please sign in to comment.