Skip to content

Commit

Permalink
feat(server): add flag to disable new sign ups (#6752)
Browse files Browse the repository at this point in the history
  • Loading branch information
forehalo committed Apr 30, 2024
1 parent 91ee5e0 commit cebb841
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 1 deletion.
3 changes: 3 additions & 0 deletions packages/backend/server/src/config/affine.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ AFFiNE.port = 3010;
// AFFiNE.metrics.enabled = true;
//
// /* Authentication Settings */
// /* Whether allow anyone signup */
// AFFiNE.auth.allowSignup = true;
//
// /* User Signup password limitation */
// AFFiNE.auth.password = {
// minLength: 8,
Expand Down
8 changes: 7 additions & 1 deletion packages/backend/server/src/core/auth/controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
import type { Request, Response } from 'express';

import {
Config,
PaymentRequiredException,
Throttle,
URLHelper,
Expand Down Expand Up @@ -43,7 +44,8 @@ export class AuthController {
private readonly url: URLHelper,
private readonly auth: AuthService,
private readonly user: UserService,
private readonly token: TokenService
private readonly token: TokenService,
private readonly config: Config
) {}

@Public()
Expand Down Expand Up @@ -74,6 +76,10 @@ export class AuthController {
} else {
// send email magic link
const user = await this.user.findUserByEmail(credential.email);
if (!user && !this.config.auth.allowSignup) {
throw new BadRequestException('You are not allows to sign up.');
}

const result = await this.sendSignInEmail(
{ email: credential.email, signUp: !user },
redirectUri
Expand Down
4 changes: 4 additions & 0 deletions packages/backend/server/src/core/auth/resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@ export class AuthResolver {
@Args('email') email: string,
@Args('password') password: string
) {
if (!this.config.auth.allowSignup) {
throw new ForbiddenException('You are not allowed to sign up.');
}

validators.assertValidCredential({ email, password });
const user = await this.auth.signUp(name, email, password);
await this.auth.setCookie(ctx.req, ctx.res, user);
Expand Down
2 changes: 2 additions & 0 deletions packages/backend/server/src/fundamentals/config/def.ts
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,8 @@ export interface AFFiNEConfig {
* authentication config
*/
auth: {
allowSignup: boolean;

/**
* The minimum and maximum length of the password when registering new users
*
Expand Down
1 change: 1 addition & 0 deletions packages/backend/server/src/fundamentals/config/default.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ export const getDefaultAFFiNEConfig: () => AFFiNEConfig = () => {
playground: true,
},
auth: {
allowSignup: true,
password: {
minLength: node.prod ? 8 : 1,
maxLength: 32,
Expand Down

0 comments on commit cebb841

Please sign in to comment.