|
@@ -1,50 +0,0 @@
|
|
|
-import { Injectable } from '@nestjs/common';
|
|
|
-import { InjectModel } from '@nestjs/mongoose';
|
|
|
-import { randomBytes } from 'crypto';
|
|
|
-import { Model } from 'mongoose';
|
|
|
-import { UserDocument, User } from './models/user.model';
|
|
|
-
|
|
|
-const ApiKeyLength = 64;
|
|
|
-
|
|
|
-@Injectable()
|
|
|
-export class UserService {
|
|
|
- constructor(
|
|
|
- @InjectModel('user')
|
|
|
- private readonly userModel: Model<UserDocument>,
|
|
|
- ) {}
|
|
|
-
|
|
|
- private static createApiKey(): string {
|
|
|
- return randomBytes(ApiKeyLength).toString('hex');
|
|
|
- }
|
|
|
-
|
|
|
- async register(vatsimId: number, fullName: string): Promise<User> {
|
|
|
- return this.user(vatsimId).then((user) => {
|
|
|
- if (user) return user;
|
|
|
-
|
|
|
- return this.userModel
|
|
|
- .create({
|
|
|
- vatsimId,
|
|
|
- apiCode: UserService.createApiKey(),
|
|
|
- systemAdminAccess: false,
|
|
|
- airportAdminAccess: [],
|
|
|
- fullName,
|
|
|
- })
|
|
|
- .then(() => this.user(vatsimId));
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- async user(vatsimId: number): Promise<User | undefined> {
|
|
|
- return this.userModel.findOne({ vatsimId });
|
|
|
- }
|
|
|
-
|
|
|
- async refreshApiKey(vatsimId: number): Promise<User | undefined> {
|
|
|
- return this.userModel
|
|
|
- .findOneAndUpdate({ vatsimId }, { apiCode: UserService.createApiKey() })
|
|
|
- .then(() =>
|
|
|
- this.user(vatsimId).then((user) => {
|
|
|
- if (!user) return undefined;
|
|
|
- return user;
|
|
|
- }),
|
|
|
- );
|
|
|
- }
|
|
|
-}
|