user read
This commit is contained in:
parent
5538a042df
commit
b2024bf4aa
@ -4,7 +4,7 @@ import {
|
|||||||
UserInfoWithPassword,
|
UserInfoWithPassword,
|
||||||
UserWithPasswordCtor,
|
UserWithPasswordCtor,
|
||||||
} from '@core';
|
} from '@core';
|
||||||
import { createHash, Hash } from 'crypto';
|
import { createHash } from 'crypto';
|
||||||
import { Entity } from './entity';
|
import { Entity } from './entity';
|
||||||
|
|
||||||
export class User extends Entity implements UserInfo {
|
export class User extends Entity implements UserInfo {
|
||||||
@ -25,11 +25,21 @@ export class User extends Entity implements UserInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export class UserWithPassword extends User implements UserInfoWithPassword {
|
export class UserWithPassword extends User implements UserInfoWithPassword {
|
||||||
password: Hash;
|
password: string;
|
||||||
|
|
||||||
constructor(raw: UserWithPasswordCtor) {
|
constructor(raw: UserWithPasswordCtor) {
|
||||||
super(raw);
|
super(raw);
|
||||||
|
|
||||||
this.password = createHash('sha256').update(`${this.uuid}+${raw.password}`);
|
this.password = createHash('sha256')
|
||||||
|
.update(`${this.uuid}+${raw.password}`)
|
||||||
|
.digest('hex');
|
||||||
|
}
|
||||||
|
|
||||||
|
Info(): UserInfoWithPassword {
|
||||||
|
return {
|
||||||
|
uuid: this.uuid,
|
||||||
|
name: this.name,
|
||||||
|
password: this.password,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { RequestHandler, Router } from 'express';
|
import { RequestHandler, Router } from 'express';
|
||||||
import { Services } from '../../app';
|
import { Services } from '../../app';
|
||||||
import { Create } from '../../functions/user';
|
import { Create, Read } from '../../functions/user';
|
||||||
import { getId } from './middleware';
|
import { getId } from './middleware';
|
||||||
|
|
||||||
export function LoginHandler(services: Services): RequestHandler {
|
export function LoginHandler(services: Services): RequestHandler {
|
||||||
@ -19,10 +19,21 @@ export function CreateHandler(services: Services): RequestHandler {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function ReadHandler(services: Services): RequestHandler {
|
||||||
|
const readUser = Read(services);
|
||||||
|
|
||||||
|
return async (req, res) => {
|
||||||
|
const user = await readUser(getId(req), req.params.uuid);
|
||||||
|
|
||||||
|
res.send(user);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function getRoutes(services: Services) {
|
export function getRoutes(services: Services) {
|
||||||
const router = Router();
|
const router = Router();
|
||||||
|
|
||||||
router.post('/login', LoginHandler(services));
|
router.post('/login', LoginHandler(services));
|
||||||
|
router.get('/read/:uuid', ReadHandler(services));
|
||||||
router.post('/create', CreateHandler(services));
|
router.post('/create', CreateHandler(services));
|
||||||
|
|
||||||
return router;
|
return router;
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Collection, Db } from 'mongodb';
|
import { Collection, Db } from 'mongodb';
|
||||||
import { User } from '../../entities/user';
|
import { User, UserWithPassword } from '../../entities/user';
|
||||||
|
|
||||||
class UserModel {
|
class UserModel {
|
||||||
private collection: Collection<User>;
|
private collection: Collection<User>;
|
||||||
@ -8,7 +8,7 @@ class UserModel {
|
|||||||
this.collection = db.collection<User>('users');
|
this.collection = db.collection<User>('users');
|
||||||
}
|
}
|
||||||
|
|
||||||
public async create(tracker: string, user: User) {
|
public async create(tracker: string, user: UserWithPassword) {
|
||||||
await this.collection.insertOne(user);
|
await this.collection.insertOne(user);
|
||||||
return this.read(tracker, user.uuid);
|
return this.read(tracker, user.uuid);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { CreateUserBody, UserInfo } from '@core';
|
import { CreateUserBody, UserInfo } from '@core';
|
||||||
import { Services } from '../app';
|
import { Services } from '../app';
|
||||||
import { User } from '../entities/user';
|
import { User, UserWithPassword } from '../entities/user';
|
||||||
|
|
||||||
export function Create(
|
export function Create(
|
||||||
services: Services,
|
services: Services,
|
||||||
@ -8,7 +8,18 @@ export function Create(
|
|||||||
const { userModel } = services;
|
const { userModel } = services;
|
||||||
|
|
||||||
return async (tracker, raw) => {
|
return async (tracker, raw) => {
|
||||||
const user = await userModel.create(tracker, new User(raw));
|
const user = await userModel.create(tracker, new UserWithPassword(raw));
|
||||||
|
return user.Info();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function Read(
|
||||||
|
services: Services,
|
||||||
|
): (tracker: string, uuid: string) => Promise<UserInfo> {
|
||||||
|
const { userModel } = services;
|
||||||
|
|
||||||
|
return async (tracker, uuid) => {
|
||||||
|
const user = await userModel.read(tracker, uuid);
|
||||||
return user.Info();
|
return user.Info();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { EntityInfo } from './entity';
|
import { EntityInfo } from './entity';
|
||||||
import { Hash } from 'crypto';
|
|
||||||
|
|
||||||
export type UserInfo = {
|
export type UserInfo = {
|
||||||
uuid: string;
|
uuid: string;
|
||||||
@ -7,7 +6,7 @@ export type UserInfo = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export type UserInfoWithPassword = {
|
export type UserInfoWithPassword = {
|
||||||
password: Hash;
|
password: string;
|
||||||
} & UserInfo;
|
} & UserInfo;
|
||||||
|
|
||||||
export type User = UserInfo & EntityInfo;
|
export type User = UserInfo & EntityInfo;
|
||||||
@ -23,6 +22,4 @@ export type LoginUserBody = CreateUserBody;
|
|||||||
|
|
||||||
export type UserCtor = Partial<User>;
|
export type UserCtor = Partial<User>;
|
||||||
|
|
||||||
export type UserWithPasswordCtor = {
|
export type UserWithPasswordCtor = Partial<UserWithPassword>;
|
||||||
password: string;
|
|
||||||
} & Partial<Omit<UserWithPassword, 'password'>>;
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user