protonfile-auth 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ import { BaseEntity } from 'typeorm';
2
+ export declare class TempToken extends BaseEntity {
3
+ token: string;
4
+ expires: number;
5
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.TempToken = void 0;
10
+ const typeorm_1 = require("typeorm");
11
+ let TempToken = class TempToken extends typeorm_1.BaseEntity {
12
+ };
13
+ __decorate([
14
+ (0, typeorm_1.PrimaryColumn)('text')
15
+ ], TempToken.prototype, "token", void 0);
16
+ __decorate([
17
+ (0, typeorm_1.Column)('bigint')
18
+ ], TempToken.prototype, "expires", void 0);
19
+ TempToken = __decorate([
20
+ (0, typeorm_1.Entity)()
21
+ ], TempToken);
22
+ exports.TempToken = TempToken;
@@ -18,6 +18,7 @@ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
18
18
  const mail_1 = require("../services/mail");
19
19
  const bcryptjs_1 = __importDefault(require("bcryptjs"));
20
20
  const Session_1 = require("../Entities/Session");
21
+ const TempToken_1 = require("../services/TempToken");
21
22
  const get = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
22
23
  const user = yield User_1.User.findOne({ email: req.params.email });
23
24
  if (!user) {
@@ -35,6 +36,10 @@ const post = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
35
36
  if (typeof token === 'string') {
36
37
  throw 'token malformed';
37
38
  }
39
+ const temptoken = new TempToken_1.TempTokenService(req.body.token, token.exp || 0);
40
+ if (!(yield temptoken.isValid())) {
41
+ throw 'token expired';
42
+ }
38
43
  const user = yield User_1.User.findOne({ user_id: token.user_id });
39
44
  if (!user) {
40
45
  return res.sendStatus(404);
@@ -43,6 +48,7 @@ const post = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
43
48
  if (req.body.revoke_all) {
44
49
  yield Session_1.Session.delete({ user_id: user.user_id });
45
50
  }
51
+ yield temptoken.invalidate();
46
52
  res.sendStatus(200);
47
53
  }
48
54
  catch (err) {
package/lib/index.d.ts CHANGED
@@ -4,12 +4,18 @@ import express from 'express';
4
4
  import { ConnectionOptions } from 'typeorm';
5
5
  import { User } from './Entities/User';
6
6
  import { Session } from './Entities/Session';
7
+ import { TempToken } from './Entities/TempToken';
8
+ import { TempTokenService } from './services/TempToken';
7
9
  declare const _default: {
8
10
  router: (typeormConfig: ConnectionOptions) => import("express-serve-static-core").Router;
9
11
  authMiddleware: (req: express.Request<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>, res: express.Response<any, Record<string, any>>, next: express.NextFunction) => Promise<void | express.Response<any, Record<string, any>>>;
10
12
  entities: {
11
13
  User: typeof User;
12
14
  Session: typeof Session;
15
+ TempToken: typeof TempToken;
16
+ };
17
+ services: {
18
+ TempTokenService: typeof TempTokenService;
13
19
  };
14
20
  };
15
21
  export default _default;
package/lib/index.js CHANGED
@@ -17,9 +17,11 @@ const cookie_parser_1 = __importDefault(require("cookie-parser"));
17
17
  const typeorm_1 = require("typeorm");
18
18
  const User_1 = require("./Entities/User");
19
19
  const Session_1 = require("./Entities/Session");
20
+ const TempToken_1 = require("./Entities/TempToken");
21
+ const TempToken_2 = require("./services/TempToken");
20
22
  exports.default = {
21
23
  router: (typeormConfig) => {
22
- (0, typeorm_1.createConnection)(Object.assign(Object.assign({}, typeormConfig), { entities: [User_1.User, Session_1.Session] }));
24
+ (0, typeorm_1.createConnection)(Object.assign(Object.assign({}, typeormConfig), { entities: [User_1.User, Session_1.Session, TempToken_1.TempToken] }));
23
25
  const router = express_1.default.Router();
24
26
  router.use(body_parser_1.default.urlencoded({ extended: false }));
25
27
  router.post('/register', register_1.default);
@@ -33,5 +35,6 @@ exports.default = {
33
35
  return router;
34
36
  },
35
37
  authMiddleware: verifyToken_1.default,
36
- entities: { User: User_1.User, Session: Session_1.Session },
38
+ entities: { User: User_1.User, Session: Session_1.Session, TempToken: TempToken_1.TempToken },
39
+ services: { TempTokenService: TempToken_2.TempTokenService },
37
40
  };
@@ -0,0 +1,9 @@
1
+ import { TempToken } from '../Entities/TempToken';
2
+ export declare class TempTokenService {
3
+ token: string;
4
+ expires: number;
5
+ private tempToken;
6
+ constructor(token: string, expires: number);
7
+ invalidate(): Promise<TempToken>;
8
+ isValid(): Promise<boolean>;
9
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.TempTokenService = void 0;
13
+ const TempToken_1 = require("../Entities/TempToken");
14
+ const typeorm_1 = require("typeorm");
15
+ class TempTokenService {
16
+ constructor(token, expires) {
17
+ this.token = token;
18
+ this.expires = expires;
19
+ this.tempToken = new TempToken_1.TempToken();
20
+ this.tempToken.token = this.token;
21
+ this.tempToken.expires = this.expires;
22
+ setInterval(() => {
23
+ const timestamp = +new Date();
24
+ TempToken_1.TempToken.delete({ expires: (0, typeorm_1.LessThan)(timestamp) });
25
+ }, 600 * 1000);
26
+ }
27
+ invalidate() {
28
+ return this.tempToken.save();
29
+ }
30
+ isValid() {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ const found = yield TempToken_1.TempToken.findOne({ token: this.token });
33
+ if (found) {
34
+ return false;
35
+ }
36
+ return true;
37
+ });
38
+ }
39
+ }
40
+ exports.TempTokenService = TempTokenService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "protonfile-auth",
3
- "version": "1.2.0",
3
+ "version": "1.3.0",
4
4
  "description": "protonfile-auth",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",