Skip to content

Commit 553d246

Browse files
authored
feat: add sensitive (#724)
1 parent 94a0c7a commit 553d246

File tree

14 files changed

+194
-2
lines changed

14 files changed

+194
-2
lines changed

src/dao/index.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { UserAppleModel } from "../model/user/Apple";
1616
import { UserAgoraModel } from "../model/user/Agora";
1717
import { UserGoogleModel } from "../model/user/Google";
1818
import { UserPhoneModel } from "../model/user/Phone";
19+
import { UserSensitiveModel } from "../model/user/Sensitive";
1920

2021
export const UserDAO = DAOImplement(UserModel) as ReturnType<DAO<UserModel>>;
2122

@@ -31,6 +32,10 @@ export const UserGoogleDAO = DAOImplement(UserGoogleModel) as ReturnType<DAO<Use
3132

3233
export const UserPhoneDAO = DAOImplement(UserPhoneModel) as ReturnType<DAO<UserPhoneModel>>;
3334

35+
export const UserSensitiveDAO = DAOImplement(UserSensitiveModel) as ReturnType<
36+
DAO<UserSensitiveModel>
37+
>;
38+
3439
export const RoomDAO = DAOImplement(RoomModel) as ReturnType<DAO<RoomModel>>;
3540

3641
export const RoomUserDAO = DAOImplement(RoomUserModel) as ReturnType<DAO<RoomUserModel>>;

src/model/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { CloudStorageConfigsModel } from "./cloudStorage/CloudStorageConfigs";
1717
import { OAuthInfosModel } from "./oauth/oauth-infos";
1818
import { OAuthSecretsModel } from "./oauth/oauth-secrets";
1919
import { OAuthUsersModel } from "./oauth/oauth-users";
20+
import { UserSensitiveModel } from "./user/Sensitive";
2021

2122
export type Model =
2223
| UserModel
@@ -26,6 +27,7 @@ export type Model =
2627
| UserAgoraModel
2728
| UserGoogleModel
2829
| UserPhoneModel
30+
| UserSensitiveModel
2931
| RoomModel
3032
| RoomUserModel
3133
| RoomPeriodicConfigModel

src/model/user/Constants.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export enum SensitiveType {
2+
Phone = "phone",
3+
Avatar = "avatar",
4+
}

src/model/user/Sensitive.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import { Column, Entity, Index } from "typeorm";
2+
import { Content } from "../Content";
3+
4+
@Entity({
5+
name: "user_sensitive",
6+
})
7+
export class UserSensitiveModel extends Content {
8+
@Index("user_sensitive_user_uuid_index")
9+
@Column({
10+
length: 40,
11+
})
12+
user_uuid: string;
13+
14+
@Index("user_sensitive_type_index")
15+
@Column({
16+
length: 128,
17+
comment: "sensitive type like 'phone'",
18+
})
19+
type: string;
20+
21+
@Column({
22+
length: 2083,
23+
comment: "sensitive value like '123****4'",
24+
})
25+
content: string;
26+
27+
@Index("user_sensitive_is_delete_index")
28+
@Column({
29+
default: false,
30+
})
31+
is_delete: boolean;
32+
}

src/thirdPartyService/TypeORMService.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import { UserAppleModel } from "../model/user/Apple";
1717
import { UserAgoraModel } from "../model/user/Agora";
1818
import { UserGoogleModel } from "../model/user/Google";
1919
import { UserPhoneModel } from "../model/user/Phone";
20+
import { UserSensitiveModel } from "../model/user/Sensitive";
2021
import { OAuthInfosModel } from "../model/oauth/oauth-infos";
2122
import { OAuthSecretsModel } from "../model/oauth/oauth-secrets";
2223
import { OAuthUsersModel } from "../model/oauth/oauth-users";
@@ -36,6 +37,7 @@ export const dataSource = new DataSource({
3637
UserAgoraModel,
3738
UserGoogleModel,
3839
UserPhoneModel,
40+
UserSensitiveModel,
3941
RoomModel,
4042
RoomUserModel,
4143
RoomPeriodicConfigModel,

src/v1/controller/login/platforms/LoginPhone.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { ServiceCloudStorageConfigs } from "../../../service/cloudStorage/CloudS
77
import { ServiceCloudStorageUserFiles } from "../../../service/cloudStorage/CloudStorageUserFiles";
88
import { ServiceUserPhone } from "../../../service/user/UserPhone";
99
import { dataSource } from "../../../../thirdPartyService/TypeORMService";
10+
import { ServiceUserSensitive } from "../../../service/user/UserSensitive";
1011

1112
@Login()
1213
export class LoginPhone extends AbstractLogin {
@@ -18,6 +19,7 @@ export class LoginPhone extends AbstractLogin {
1819
this.svc = {
1920
user: new ServiceUser(this.userUUID),
2021
userPhone: new ServiceUserPhone(this.userUUID),
22+
userSensitive: new ServiceUserSensitive(this.userUUID),
2123
cloudStorageFiles: new ServiceCloudStorageFiles(),
2224
cloudStorageConfigs: new ServiceCloudStorageConfigs(this.userUUID),
2325
cloudStorageUserFiles: new ServiceCloudStorageUserFiles(this.userUUID),
@@ -33,8 +35,14 @@ export class LoginPhone extends AbstractLogin {
3335
const createUser = this.svc.user.create(info, t);
3436

3537
const createUserPhone = this.svc.userPhone.create(info, t);
38+
const createUserSensitive = this.svc.userSensitive.phone(info, t);
3639

37-
return await Promise.all([createUser, createUserPhone, this.setGuidePPTX(this.svc, t)]);
40+
return await Promise.all([
41+
createUser,
42+
createUserPhone,
43+
createUserSensitive,
44+
this.setGuidePPTX(this.svc, t),
45+
]);
3846
});
3947
}
4048

@@ -50,6 +58,7 @@ export class LoginPhone extends AbstractLogin {
5058
interface RegisterService {
5159
user: ServiceUser;
5260
userPhone: ServiceUserPhone;
61+
userSensitive: ServiceUserSensitive;
5362
cloudStorageFiles: ServiceCloudStorageFiles;
5463
cloudStorageUserFiles: ServiceCloudStorageUserFiles;
5564
cloudStorageConfigs: ServiceCloudStorageConfigs;

src/v1/controller/user/binding/platform/phone/Binding.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { ErrorCode } from "../../../../../../ErrorCode";
1010
import { Status } from "../../../../../../constants/Project";
1111
import { ServiceUserPhone } from "../../../../../service/user/UserPhone";
1212
import { UserDAO } from "../../../../../../dao";
13+
import { ServiceUserSensitive } from "../../../../../service/user/UserSensitive";
1314

1415
@Controller<RequestType, ResponseType>({
1516
method: "post",
@@ -38,6 +39,7 @@ export class BindingPhone extends AbstractController<RequestType, ResponseType>
3839

3940
private svc = {
4041
userPhone: new ServiceUserPhone(this.userUUID),
42+
userSensitive: new ServiceUserSensitive(this.userUUID),
4143
};
4244

4345
private static ExhaustiveAttackCount = 10;
@@ -75,6 +77,9 @@ export class BindingPhone extends AbstractController<RequestType, ResponseType>
7577
phone,
7678
userName: userInfo.user_name,
7779
});
80+
await this.svc.userSensitive.phone({
81+
phone,
82+
});
7883

7984
await BindingPhone.clearVerificationCode(safePhone);
8085

src/v1/controller/user/uploadAvatar/Finish.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { getOSSDomain, getOSSFileURLPath } from "../../cloudStorage/alibabaCloud
1212
import { deleteObject, isExistObject } from "../../cloudStorage/alibabaCloud/Utils";
1313
import { getFilePath } from "./Utils";
1414
import { dataSource } from "../../../../thirdPartyService/TypeORMService";
15+
import { ServiceUserSensitive } from "../../../service/user/UserSensitive";
1516

1617
@Controller<RequestType, ResponseType>({
1718
method: "post",
@@ -34,6 +35,7 @@ export class UploadAvatarFinish extends AbstractController<RequestType, Response
3435

3536
public readonly svc: {
3637
user: ServiceUser;
38+
userSensitive: ServiceUserSensitive;
3739
};
3840

3941
private static readonly censorshipLogger = createLoggerContentCensorship({});
@@ -43,6 +45,7 @@ export class UploadAvatarFinish extends AbstractController<RequestType, Response
4345

4446
this.svc = {
4547
user: new ServiceUser(this.userUUID),
48+
userSensitive: new ServiceUserSensitive(this.userUUID),
4649
};
4750
}
4851

@@ -86,6 +89,7 @@ export class UploadAvatarFinish extends AbstractController<RequestType, Response
8689
// Delete previous avatar and set new avatar.
8790
await dataSource.transaction(async t => {
8891
await this.svc.user.updateAvatar(alibabaCloudFileURL, t);
92+
await this.svc.userSensitive.avatar({ avatarURL: alibabaCloudFileURL }, t);
8993

9094
const avatarURL = (await this.svc.user.nameAndAvatar())?.avatarURL;
9195
if (avatarURL) {
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { EntityManager, InsertResult } from "typeorm";
2+
import { UserSensitiveDAO } from "../../../dao";
3+
import { SensitiveType } from "../../../model/user/Constants";
4+
5+
export class ServiceUserSensitive {
6+
constructor(private readonly userUUID: string) {}
7+
8+
public async phone(
9+
data: {
10+
phone: string;
11+
},
12+
t?: EntityManager,
13+
): Promise<InsertResult> {
14+
return await UserSensitiveDAO(t).insert({
15+
user_uuid: this.userUUID,
16+
type: SensitiveType.Phone,
17+
content: this.desensitivePhone(data.phone),
18+
});
19+
}
20+
21+
private desensitivePhone(phone: string): string {
22+
return phone.slice(0, 3) + "*******" + phone.slice(-1);
23+
}
24+
25+
public async avatar(
26+
data: {
27+
avatarURL: string;
28+
},
29+
t?: EntityManager,
30+
): Promise<InsertResult> {
31+
return await UserSensitiveDAO(t).insert({
32+
user_uuid: this.userUUID,
33+
type: SensitiveType.Avatar,
34+
content: data.avatarURL,
35+
});
36+
}
37+
}

src/v2/controllers/user/routes.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Server } from "../../../utils/registryRoutersV2";
22
import { userRename, userRenameSchema } from "./rename";
33
import { userUploadAvatarStart, userUploadAvatarStartSchema } from "./upload-avatar/start";
44
import { userUploadAvatarFinish, userUploadAvatarFinishSchema } from "./upload-avatar/finish";
5+
import { userSensitive, userSensitiveSchema } from "./sensitive";
56

67
export const userRouters = (server: Server): void => {
78
server.post("user/rename", userRename, {
@@ -15,4 +16,8 @@ export const userRouters = (server: Server): void => {
1516
server.post("user/upload-avatar/finish", userUploadAvatarFinish, {
1617
schema: userUploadAvatarFinishSchema,
1718
});
19+
20+
server.post("user/sensitive", userSensitive, {
21+
schema: userSensitiveSchema,
22+
});
1823
};

0 commit comments

Comments
 (0)