Browse Source

Move token generation into token entity

master
David Ludwig 4 years ago
parent
commit
0a071007cd
4 changed files with 41 additions and 15 deletions
  1. +1
    -14
      src/server/Application.ts
  2. +22
    -1
      src/server/database/entities/RegisterToken.ts
  3. +18
    -0
      src/server/services/MovieSearch.ts
  4. +0
    -0
      src/server/services/TvDb.ts

+ 1
- 14
src/server/Application.ts View File

@ -1,5 +1,3 @@
import { randomBytes } from "crypto";
import { promisify } from "util";
import DiscordBot from "./services/DiscordBot";
import Service from "./services/Service";
import TorrentClientIpc from "./services/TorrentClientIpc";
@ -7,17 +5,6 @@ import WebServer from "./services/WebServer";
import { User, RegisterToken } from "./database/entities";
import Database from "./services/Database";
/**
* @TODO Not sure where to put this yet... here's fine for now
*/
async function createRegisterToken() {
let randomBytesPromise = promisify(randomBytes);
let token = new RegisterToken();
token.token = (await randomBytesPromise(48)).toString("hex");
await token.save();
return token;
}
let instance: Application;
/**
@ -94,7 +81,7 @@ export default class Application
console.log("Found 0 users");
let token = await RegisterToken.findOne();
if (token === undefined) {
token = await createRegisterToken();
token = await RegisterToken.generate();
}
console.log("First time register with: ", token.token);
}


+ 22
- 1
src/server/database/entities/RegisterToken.ts View File

@ -1,4 +1,5 @@
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity, ManyToOne } from "typeorm";
import { randomBytes } from "crypto";
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity } from "typeorm";
@Entity()
export class RegisterToken extends BaseEntity
@ -9,10 +10,30 @@ export class RegisterToken extends BaseEntity
@Column()
token!: string
/**
* Check if the provided token is valid
*/
public static async isValid(token: string) {
if (typeof token !== "string") {
return false;
}
return Boolean(token) && await RegisterToken.count({token}) > 0;
}
/**
* Create a new registration token and insert it into the database
*/
public static generate() {
return new Promise<RegisterToken>((resolve, reject) => {
randomBytes(48, async (err, result) => {
if (err) {
reject(err);
} else {
let token = new RegisterToken();
token.token = result.toString("hex");
resolve(await token.save());
}
});
});
}
}

+ 18
- 0
src/server/services/MovieSearch.ts View File

@ -0,0 +1,18 @@
import Application from "@server/Application";
import TVDB from "tvdb-v4";
import Service from "./Service";
export default class MovieSearch extends Service
{
public constructor(app: Application) {
super("Movie Search", app);
}
public async boot() {
}
public async shutdown() {
}
}

+ 0
- 0
src/server/services/TvDb.ts View File


Loading…
Cancel
Save