Unverified Commit 51f23c5d authored by Garfield Dai's avatar Garfield Dai Committed by GitHub

feat: support re-invite email. (#2107)

parent 1f48e3d4
# -*- coding:utf-8 -*- # -*- coding:utf-8 -*-
from flask import current_app
from flask_login import current_user
from flask_restful import Resource, abort, fields, marshal_with, reqparse
import services import services
from controllers.console import api from controllers.console import api
from controllers.console.setup import setup_required from controllers.console.setup import setup_required
from controllers.console.wraps import account_initialization_required, cloud_edition_billing_resource_check from controllers.console.wraps import account_initialization_required, cloud_edition_billing_resource_check
from extensions.ext_database import db from extensions.ext_database import db
from flask import current_app
from flask_login import current_user
from flask_restful import Resource, abort, fields, marshal, marshal_with, reqparse
from libs.helper import TimestampField from libs.helper import TimestampField
from libs.login import login_required from libs.login import login_required
from models.account import Account, TenantAccountJoin from models.account import Account
from services.account_service import RegisterService, TenantService from services.account_service import RegisterService, TenantService
account_fields = { account_fields = {
...@@ -64,18 +65,12 @@ class MemberInviteEmailApi(Resource): ...@@ -64,18 +65,12 @@ class MemberInviteEmailApi(Resource):
for invitee_email in invitee_emails: for invitee_email in invitee_emails:
try: try:
token = RegisterService.invite_new_member(inviter.current_tenant, invitee_email, role=invitee_role, token = RegisterService.invite_new_member(inviter.current_tenant, invitee_email, role=invitee_role,
inviter=inviter) inviter=inviter)
account = db.session.query(Account, TenantAccountJoin.role).join(
TenantAccountJoin, Account.id == TenantAccountJoin.account_id
).filter(Account.email == invitee_email).first()
account, role = account
invitation_results.append({ invitation_results.append({
'status': 'success', 'status': 'success',
'email': invitee_email, 'email': invitee_email,
'url': f'{console_web_url}/activate?email={invitee_email}&token={token}' 'url': f'{console_web_url}/activate?email={invitee_email}&token={token}'
}) })
account = marshal(account, account_fields)
account['role'] = role
except Exception as e: except Exception as e:
invitation_results.append({ invitation_results.append({
'status': 'failed', 'status': 'failed',
......
...@@ -464,16 +464,21 @@ class RegisterService: ...@@ -464,16 +464,21 @@ class RegisterService:
account = AccountService.create_account(email, name) account = AccountService.create_account(email, name)
account.status = AccountStatus.PENDING.value account.status = AccountStatus.PENDING.value
db.session.commit() db.session.commit()
TenantService.create_tenant_member(tenant, account, role)
else: else:
TenantService.check_member_permission(tenant, inviter, account, 'add') TenantService.check_member_permission(tenant, inviter, account, 'add')
ta = TenantAccountJoin.query.filter_by( ta = TenantAccountJoin.query.filter_by(
tenant_id=tenant.id, tenant_id=tenant.id,
account_id=account.id account_id=account.id
).first() ).first()
if ta:
raise AccountAlreadyInTenantError("Account already in tenant.")
TenantService.create_tenant_member(tenant, account, role) if not ta:
TenantService.create_tenant_member(tenant, account, role)
# Support resend invitation email when the account is pending status
if account.status != AccountStatus.PENDING.value:
raise AccountAlreadyInTenantError("Account already in tenant.")
token = cls.generate_invite_token(tenant, account) token = cls.generate_invite_token(tenant, account)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment