Skip to content

Commit 7f74421

Browse files
committed
Security update
1 parent f975907 commit 7f74421

3 files changed

Lines changed: 41 additions & 21 deletions

File tree

api/src/controllers/member.controller.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class MemberController {
6565
if (await this.memberService.canAdmin(session.id)) {
6666
memberInfo = await this.memberService.getMemberInfoAdmin(parseInt(request.params.id));
6767
} else if (await this.memberService.canStaff(session.id)) {
68-
memberInfo = await this.memberService.getMemberInfoAdmin(parseInt(request.params.id));
68+
memberInfo = await this.memberService.getMemberInfoStaff(parseInt(request.params.id));
6969
} else if (parseInt(request.params.id) === session.id) {
7070
memberInfo = await this.memberService.getMemberInfo(parseInt(request.params.id));
7171
} else {

api/src/repositories/member/member.repository.ts

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import {Service} from 'typedi';
1+
import { Service } from 'typedi';
22
import { Db } from '../../db/db.class';
33
import { Member, Wallet } from 'models';
4-
import {knex} from '../../db';
4+
import { knex } from '../../db';
55

66
/** Repository for interacting with member table data in the database. */
77
@Service()
88
export class MemberRepository {
9-
constructor(private db: Db) {}
10-
9+
constructor(private db: Db) { }
10+
1111
/**
1212
* Creates a new member with the given parameters.
1313
* @param memberParams parameters to be used for the new member
@@ -42,7 +42,7 @@ export class MemberRepository {
4242
public async findById(memberId: number): Promise<Member> {
4343
return this.find({ id: memberId });
4444
}
45-
45+
4646
public async findIdByUsername(username: string): Promise<any> {
4747
return this.db.knex
4848
.select('id')
@@ -60,7 +60,7 @@ export class MemberRepository {
6060
return this.db.knex
6161
.count('id as count')
6262
.from('member')
63-
.where('last_activity','>=', time);
63+
.where('last_activity', '>=', time);
6464
}
6565

6666
public async getNewestMembers(): Promise<any> {
@@ -74,7 +74,7 @@ export class MemberRepository {
7474
return this.db.knex
7575
.count('id as count')
7676
.from('member')
77-
.where('created_at','>=', time);
77+
.where('created_at', '>=', time);
7878
}
7979

8080
public async check3d(username: string): Promise<any> {
@@ -86,9 +86,9 @@ export class MemberRepository {
8686

8787
public async findOnlineUsers(current: Date): Promise<any> {
8888
return this.db.knex
89-
.select('id','username')
89+
.select('id', 'username')
9090
.from('member')
91-
.where('last_activity','>=', current)
91+
.where('last_activity', '>=', current)
9292
.orderBy('username', 'ASC');
9393
}
9494

@@ -103,7 +103,7 @@ export class MemberRepository {
103103
return this.db.knex
104104
.select('place_id')
105105
.from('member')
106-
.where('last_activity','>=', current);
106+
.where('last_activity', '>=', current);
107107
}
108108

109109
/**
@@ -118,15 +118,15 @@ export class MemberRepository {
118118
.limit(1)
119119
.first();
120120
}
121-
121+
122122
public async getPrimaryRoleName(memberId: number): Promise<string> {
123123
return this.db.knex
124124
.select('role.name', 'member.primary_role_id')
125125
.from('member')
126126
.where('member.id', memberId)
127127
.join('role', 'member.primary_role_id', 'role.id');
128128
}
129-
129+
130130
/**
131131
* This is to assist with the pagination of the user search
132132
* @param search
@@ -146,29 +146,27 @@ export class MemberRepository {
146146
.where('place_id', placeId)
147147
.where('last_activity', '>=', active);
148148
}
149-
149+
150150
public async searchUsers(search: string, limit: number, offset: number): Promise<any> {
151151
return knex
152152
.select(
153153
'id',
154154
'username',
155-
'email',
156155
'last_daily_login_credit',
157156
)
158157
.from('member')
159158
.where(this.like('username', search))
160-
.orWhere(this.like('email', search))
161159
.orderBy('id', 'desc')
162160
.limit(limit)
163161
.offset(offset);
164162
}
165163

166164
public async joinedPlace(memberId: number, props: Partial<Member>): Promise<void> {
167-
await this.db.member.where({id: memberId}).update(props);
165+
await this.db.member.where({ id: memberId }).update(props);
168166
}
169167

170168
public async updateLatestActivity(memberId: number, props: Partial<Member>): Promise<void> {
171-
await this.db.member.where({id: memberId}).update(props);
169+
await this.db.member.where({ id: memberId }).update(props);
172170
}
173171

174172
/**
@@ -186,7 +184,7 @@ export class MemberRepository {
186184
await this.db.member.where({ id: memberId }).update(props);
187185
return returning ? this.findById(memberId) : undefined;
188186
}
189-
187+
190188
/**
191189
* This is used to bind the user inputted value to prevent
192190
* SQL injection attempts while using a Knex Raw
@@ -195,9 +193,9 @@ export class MemberRepository {
195193
* @private
196194
*/
197195
private like(field: string, value: string) {
198-
return function() {
196+
return function () {
199197
this.whereRaw('?? LIKE ?', [field, `%${value}%`]);
200198
};
201199
}
202-
200+
203201
}

api/src/services/member/member.service.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,28 @@ export class MemberService {
263263
};
264264
}
265265

266+
/**
267+
* Builds a member info staff view.
268+
* @param memberId id of member to retrieve info for
269+
* @returns promise resolving in a member info view object, or rejecting on error
270+
*/
271+
public async getMemberInfoStaff(memberId: number): Promise<MemberAdminView> {
272+
const member = await this.find({ id: memberId });
273+
const wallet = await this.walletRepository.findById(member.wallet_id);
274+
return {
275+
immigrationDate: member.created_at,
276+
username: member.username,
277+
walletBalance: wallet.balance,
278+
xp: member.xp,
279+
firstName: member.firstname,
280+
lastName: member.lastname,
281+
chatdefault: member.chatdefault,
282+
last_daily_login_credit: member.last_daily_login_credit,
283+
last_weekly_role_credit: member.last_weekly_role_credit,
284+
lastAccess: member.last_activity,
285+
};
286+
}
287+
266288
/**
267289
* Returns a JSON web token for the member with the given memberId.
268290
* @param memberId id of member to generate a token for

0 commit comments

Comments
 (0)