protonfile-auth 1.6.2 → 1.6.4

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.
package/README.md CHANGED
@@ -1 +1,18 @@
1
- protonfile-auth
1
+ # protonfile-auth
2
+
3
+ Authentication and authorization solution initially built for Protonfile but usable for any modern app. It was created as an Auth0 replacement for Protonfile.
4
+
5
+ ## How does it work?
6
+
7
+ protonfile-auth works with the traditional JWT access and refresh token model, refresh tokens are long-lived (currently hard-coded to 7 days) and access tokens are short-lived and new ones can be obtained with the refresh token.
8
+
9
+ An Express middleware is exposed, which can be used to verify the users' access token before allowing them to access a resource.
10
+
11
+ Refresh token versions are stored in the database, which enables token rotation. It also allows for an instant session revocation by the user, which in turn blocks any access token issuing for that session.
12
+
13
+ ## Disadvantages
14
+
15
+ protonfile-auth is in no means a perfect authentication solution, there are some known issues. This module was built to have a complete control over the authentication process but it surely can't compete with solutions like OAuth. **If you are building a professional application you should use more tested solutions than this**.
16
+
17
+ - JWT is not advised as a session token because it's self contained with no central autority that can invalidate it. This is solved in protonfile-auth by saving those tokens in a database and removing them once a session is expired.
18
+ - **Session/access token clutter**: there were some bad decisions during the developement which introduced the session tokens. Sessions are a nice way of knowing on which devices a user is authenticated, but it can be solved without having 2 tokens.
@@ -2,6 +2,7 @@ import { BaseEntity } from 'typeorm';
2
2
  import { User } from './User';
3
3
  export declare class OTP extends BaseEntity {
4
4
  code: string;
5
+ setCode(): void;
5
6
  scope: string;
6
7
  expiration: number;
7
8
  user_id: string;
@@ -9,22 +9,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.OTP = void 0;
10
10
  const typeorm_1 = require("typeorm");
11
11
  const User_1 = require("./User");
12
+ const nanoid_1 = require("nanoid");
13
+ const randomOtp = (0, nanoid_1.customAlphabet)('1234567890', 6);
12
14
  let OTP = class OTP extends typeorm_1.BaseEntity {
15
+ setCode() {
16
+ this.code = randomOtp();
17
+ }
13
18
  };
14
19
  __decorate([
15
20
  (0, typeorm_1.PrimaryColumn)({
16
21
  name: 'code',
17
- type: 'text',
18
- default: () => 'getNumericId(100000, 999999)',
22
+ type: 'varchar',
23
+ length: 6,
19
24
  })
20
25
  ], OTP.prototype, "code", void 0);
26
+ __decorate([
27
+ (0, typeorm_1.BeforeInsert)()
28
+ ], OTP.prototype, "setCode", null);
21
29
  __decorate([
22
30
  (0, typeorm_1.Column)('text')
23
31
  ], OTP.prototype, "scope", void 0);
24
32
  __decorate([
25
33
  (0, typeorm_1.Column)({
26
34
  type: 'bigint',
27
- default: () => 'extract(epoch from now())::int + 600',
35
+ default: () => Date.now().toFixed(0),
28
36
  })
29
37
  ], OTP.prototype, "expiration", void 0);
30
38
  __decorate([
@@ -38,10 +46,3 @@ OTP = __decorate([
38
46
  (0, typeorm_1.Entity)()
39
47
  ], OTP);
40
48
  exports.OTP = OTP;
41
- /*
42
- CREATE OR REPLACE FUNCTION getNumericId(integer, integer) RETURNS integer
43
- AS 'SELECT floor(random() * ($2-$1+1) + $1)::int'
44
- LANGUAGE SQL
45
- IMMUTABLE
46
- RETURNS NULL ON NULL INPUT;
47
- */
@@ -2,8 +2,9 @@ import { BaseEntity } from 'typeorm';
2
2
  import { User } from './User';
3
3
  export declare class Session extends BaseEntity {
4
4
  session_id: string;
5
- token: string;
6
5
  user_id: string;
7
6
  user: User;
8
7
  user_agent: string;
8
+ version: number;
9
+ last_used: string;
9
10
  }
@@ -14,9 +14,6 @@ let Session = class Session extends typeorm_1.BaseEntity {
14
14
  __decorate([
15
15
  (0, typeorm_1.PrimaryGeneratedColumn)('uuid')
16
16
  ], Session.prototype, "session_id", void 0);
17
- __decorate([
18
- (0, typeorm_1.Column)('text')
19
- ], Session.prototype, "token", void 0);
20
17
  __decorate([
21
18
  (0, typeorm_1.Column)({ name: 'user_id', type: 'text' })
22
19
  ], Session.prototype, "user_id", void 0);
@@ -27,6 +24,12 @@ __decorate([
27
24
  __decorate([
28
25
  (0, typeorm_1.Column)('text')
29
26
  ], Session.prototype, "user_agent", void 0);
27
+ __decorate([
28
+ (0, typeorm_1.Column)('int')
29
+ ], Session.prototype, "version", void 0);
30
+ __decorate([
31
+ (0, typeorm_1.Column)('bigint')
32
+ ], Session.prototype, "last_used", void 0);
30
33
  Session = __decorate([
31
34
  (0, typeorm_1.Entity)()
32
35
  ], Session);
@@ -9,18 +9,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- const auth_1 = require("../services/auth");
13
12
  const session_1 = require("../services/session");
14
13
  exports.default = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
15
- yield (0, auth_1.clearRefreshTokenCookie)(res);
16
14
  yield (0, session_1.clearSessionCookie)(res);
17
15
  const sessionCache = req.sessionCache;
18
16
  try {
19
- const session_id = JSON.parse(req.cookies.session_id).session_id;
20
- sessionCache.set(session_id, 60 * 15);
21
- yield (0, session_1.deleteSession)(session_id);
17
+ const session = (0, session_1.verifySessionToken)(req.cookies.pid);
18
+ sessionCache.set(session.session_id, 60 * 15);
19
+ yield (0, session_1.deleteSession)(session.session_id);
22
20
  }
23
21
  catch (err) {
22
+ console.log(err);
24
23
  return res.sendStatus(500);
25
24
  }
26
25
  res.sendStatus(200);
@@ -8,45 +8,36 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
11
  Object.defineProperty(exports, "__esModule", { value: true });
15
- const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
16
12
  const User_1 = require("../Entities/User");
17
13
  const auth_1 = require("../services/auth");
18
14
  const session_1 = require("../services/session");
19
15
  exports.default = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
20
- const token = req.cookies.jid;
21
- const session = req.cookies.session_id;
22
- if (!token || !session) {
16
+ const session = req.cookies.pid;
17
+ if (!session) {
23
18
  return res.sendStatus(400);
24
19
  }
25
- let payload = null;
26
20
  let decodedSession;
27
21
  try {
28
- payload = jsonwebtoken_1.default.verify(token, process.env.REFRESH_TOKEN_KEY);
29
- decodedSession = (0, session_1.verifySessionToken)(JSON.parse(session).token);
30
- const parsedSession = JSON.parse(session);
31
- yield (0, session_1.compareSessionTokenVersion)(parsedSession.session_id, parsedSession.token);
32
- const newSession = yield (0, session_1.bumpSessionToken)(parsedSession.session_id);
33
- (0, session_1.setSessionCookie)(res, JSON.stringify(newSession));
22
+ decodedSession = (0, session_1.verifySessionToken)(session);
23
+ yield (0, session_1.compareSessionTokenVersion)(decodedSession);
24
+ const newSession = yield (0, session_1.bumpSessionToken)(decodedSession);
25
+ (0, session_1.setSessionCookie)(res, newSession);
34
26
  }
35
27
  catch (err) {
36
28
  console.log(err);
37
29
  yield (0, session_1.clearSessionCookie)(res);
38
30
  return res.sendStatus(403);
39
31
  }
40
- const user = yield User_1.User.findOne({ user_id: payload.user_id });
32
+ const user = yield User_1.User.findOne({ user_id: decodedSession.user_id });
41
33
  if (!user) {
42
34
  return res.sendStatus(404);
43
35
  }
44
- (0, auth_1.setRefreshTokenCookie)(res, (0, auth_1.createRefreshToken)({ user_id: user.user_id }));
45
36
  return res.send({
46
37
  ok: true,
47
38
  accessToken: (0, auth_1.createAccessToken)({
48
39
  user_id: user.user_id,
49
- session_id: JSON.parse(session).session_id,
40
+ session_id: decodedSession.session_id,
50
41
  }),
51
42
  });
52
43
  });
@@ -37,11 +37,11 @@ exports.default = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
37
37
  if (!user) {
38
38
  return;
39
39
  }
40
- const queryRes = yield OTP_1.OTP.insert({
41
- scope: 'registration',
42
- user_id: user.user_id,
43
- });
44
- const otp = queryRes.identifiers[0];
40
+ const otpEnt = new OTP_1.OTP();
41
+ otpEnt.scope = 'registration';
42
+ otpEnt.user_id = user.user_id;
43
+ const queryRes = yield OTP_1.OTP.save(otpEnt);
44
+ const otp = queryRes;
45
45
  if (!otp || !otp.code) {
46
46
  return res.sendStatus(500);
47
47
  }
package/lib/index.js CHANGED
@@ -47,7 +47,7 @@ exports.default = {
47
47
  router.post('/refresh_token', (0, cookie_parser_1.default)(), refresh_token_1.default);
48
48
  router.post('/logout', appendSessionCache_1.default.bind(null, sessionCache), (0, cookie_parser_1.default)(), logout_1.default);
49
49
  router.get('/qr', (0, cookie_parser_1.default)(), qr_1.get);
50
- router.post('/qr', verifyToken_1.default, qr_1.post);
50
+ router.post('/qr', verifyToken_1.default.bind(null, sessionCache), qr_1.post);
51
51
  router.get('/change_password/:email', change_password_1.get);
52
52
  router.post('/change_password', change_password_1.post);
53
53
  return router;
@@ -0,0 +1,4 @@
1
+ import { NextFunction, Request, Response } from 'express';
2
+ import UMS from '../services/UMS';
3
+ declare const appendUms: (ums: UMS, req: Request, _res: Response, next: NextFunction) => void;
4
+ export default appendUms;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const appendUms = (ums, req, _res, next) => {
4
+ req.ums = ums;
5
+ next();
6
+ };
7
+ exports.default = appendUms;
@@ -11,17 +11,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  const Session_1 = require("../Entities/Session");
14
- const jsonwebtoken_1 = require("jsonwebtoken");
15
14
  class SessionCleaner {
16
15
  constructor() { }
17
16
  register(interval) {
18
17
  this.handle = setInterval(() => __awaiter(this, void 0, void 0, function* () {
19
18
  const sessions = yield Session_1.Session.find();
20
19
  for (const session of sessions) {
21
- const decodedToken = (0, jsonwebtoken_1.decode)(session.token);
22
- if (typeof decodedToken === 'string' || !decodedToken)
23
- return;
24
- const { exp } = decodedToken;
20
+ const exp = parseInt(session.last_used);
25
21
  const expiration = exp ? exp * 1000 : 0;
26
22
  const now = Date.now();
27
23
  const isExpired = now > expiration;
@@ -0,0 +1,12 @@
1
+ import TypedEmitter from 'typed-emitter';
2
+ declare type EmitterEvents = {
3
+ register: (payload: any) => void;
4
+ change_password: (payload: any) => void;
5
+ };
6
+ declare type Events = 'register' | 'change_password';
7
+ declare const UMS_base: new () => TypedEmitter<EmitterEvents>;
8
+ declare class UMS extends UMS_base {
9
+ constructor();
10
+ send(type: Events, payload: any): void;
11
+ }
12
+ export default UMS;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ // User Messaging Service
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const node_cache_1 = require("node-cache");
5
+ const mail_1 = require("./mail");
6
+ class UMS extends node_cache_1.EventEmitter {
7
+ constructor() {
8
+ super();
9
+ }
10
+ send(type, payload) {
11
+ let mail;
12
+ switch (type) {
13
+ case 'register':
14
+ const { user, otp } = payload;
15
+ mail = new mail_1.WelcomeMail(user, otp.code);
16
+ break;
17
+ case 'change_password':
18
+ mail = new mail_1.ChangePasswordMail(payload.user, (process.env.PROTONFILE_AUTH_APP_URL || '') +
19
+ '/change_password/' +
20
+ payload.token);
21
+ break;
22
+ default:
23
+ break;
24
+ }
25
+ if (!mail)
26
+ return;
27
+ mail.send();
28
+ this.emit(type, payload);
29
+ }
30
+ }
31
+ exports.default = UMS;
@@ -1,9 +1,6 @@
1
1
  import { Response, Request } from 'express';
2
2
  import { User } from '../Entities/User';
3
3
  export declare const createAccessToken: (payload: any) => string;
4
- export declare const createRefreshToken: (payload: any) => string;
5
- export declare const setRefreshTokenCookie: (res: Response, value: string) => Promise<void>;
6
- export declare const clearRefreshTokenCookie: (res: Response) => Promise<Response<any, Record<string, any>>>;
7
4
  export declare const generateQrAuth: () => Promise<{
8
5
  request_id: string;
9
6
  token: string;
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.performLogin = exports.generateQrAuth = exports.clearRefreshTokenCookie = exports.setRefreshTokenCookie = exports.createRefreshToken = exports.createAccessToken = void 0;
12
+ exports.performLogin = exports.generateQrAuth = exports.createAccessToken = void 0;
13
13
  const jsonwebtoken_1 = require("jsonwebtoken");
14
14
  const uuid_1 = require("uuid");
15
15
  const Session_1 = require("../Entities/Session");
@@ -20,27 +20,6 @@ const createAccessToken = (payload) => {
20
20
  });
21
21
  };
22
22
  exports.createAccessToken = createAccessToken;
23
- const createRefreshToken = (payload) => {
24
- return (0, jsonwebtoken_1.sign)({ user_id: payload.user_id }, process.env.REFRESH_TOKEN_KEY, {
25
- expiresIn: '7d',
26
- });
27
- };
28
- exports.createRefreshToken = createRefreshToken;
29
- const setRefreshTokenCookie = (res, value) => __awaiter(void 0, void 0, void 0, function* () {
30
- const currentTime = Math.floor(new Date().getTime() / 1000);
31
- const weekExpiration = currentTime + 86400 * 7; // adds 7 days to timestamp
32
- res.cookie('jid', value, {
33
- sameSite: 'none',
34
- expires: new Date(weekExpiration * 1000),
35
- httpOnly: true,
36
- secure: process.env.NODE_ENV === 'production' ? true : false,
37
- });
38
- });
39
- exports.setRefreshTokenCookie = setRefreshTokenCookie;
40
- const clearRefreshTokenCookie = (res) => __awaiter(void 0, void 0, void 0, function* () {
41
- return res.clearCookie('jid');
42
- });
43
- exports.clearRefreshTokenCookie = clearRefreshTokenCookie;
44
23
  const generateQrAuth = () => __awaiter(void 0, void 0, void 0, function* () {
45
24
  const id = (0, uuid_1.v4)();
46
25
  return {
@@ -53,52 +32,28 @@ const generateQrAuth = () => __awaiter(void 0, void 0, void 0, function* () {
53
32
  exports.generateQrAuth = generateQrAuth;
54
33
  const performLogin = (req, res, user) => {
55
34
  return new Promise((resolve, reject) => __awaiter(void 0, void 0, void 0, function* () {
56
- let session_id;
57
- (0, exports.setRefreshTokenCookie)(res, (0, exports.createRefreshToken)({
35
+ if (req.cookies.pid)
36
+ return res.redirect(307, 'refresh_token');
37
+ const insert = yield Session_1.Session.insert({
58
38
  user_id: user.user_id,
59
- }));
60
- if (req.cookies.session_id) {
61
- const session = JSON.parse(req.cookies.session_id);
62
- try {
63
- (0, session_1.verifySessionToken)(session.token);
64
- const newSession = yield (0, session_1.bumpSessionToken)(session.session_id);
65
- session_id = newSession.session_id;
66
- (0, session_1.setSessionCookie)(res, JSON.stringify(newSession));
67
- }
68
- catch (err) {
69
- yield (0, session_1.clearSessionCookie)(res);
70
- yield (0, exports.clearRefreshTokenCookie)(res);
71
- const insert = yield Session_1.Session.insert({
72
- token: (0, session_1.createSessionToken)({ user_id: user.user_id }),
73
- user_id: user.user_id,
74
- user_agent: req.headers['user-agent'] || 'Unknown',
75
- });
76
- const session = yield Session_1.Session.findOne({
77
- session_id: insert.generatedMaps[0].session_id,
78
- });
79
- if (!session) {
80
- return;
81
- }
82
- session_id = session.session_id;
83
- (0, session_1.setSessionCookie)(res, JSON.stringify(session));
84
- }
85
- }
86
- else {
87
- const insert = yield Session_1.Session.insert({
88
- token: (0, session_1.createSessionToken)({ user_id: user.user_id }),
89
- user_id: user.user_id,
90
- user_agent: req.headers['user-agent'] || 'Unknown',
91
- });
92
- const session = yield Session_1.Session.findOne({
93
- session_id: insert.generatedMaps[0].session_id,
94
- });
95
- if (!session) {
96
- return;
97
- }
98
- session_id = session.session_id;
99
- (0, session_1.setSessionCookie)(res, JSON.stringify(session));
39
+ user_agent: req.headers['user-agent'] || 'Unknown',
40
+ version: 0,
41
+ last_used: (Date.now() / 1000).toFixed(0).toString(),
42
+ });
43
+ const session = yield Session_1.Session.findOne({
44
+ session_id: insert.generatedMaps[0].session_id,
45
+ });
46
+ if (!session) {
47
+ return;
100
48
  }
101
- const token = (0, exports.createAccessToken)({ user_id: user.user_id, session_id });
49
+ (0, session_1.setSessionCookie)(res, (0, session_1.createSessionToken)({
50
+ user_id: user.user_id,
51
+ session_id: session.session_id,
52
+ }));
53
+ const token = (0, exports.createAccessToken)({
54
+ user_id: user.user_id,
55
+ session_id: session.session_id,
56
+ });
102
57
  resolve(token);
103
58
  }));
104
59
  };
@@ -1,9 +1,10 @@
1
1
  import { Response } from 'express';
2
+ import { JwtPayload } from 'jsonwebtoken';
2
3
  import { Session } from '../Entities/Session';
3
4
  export declare const createSessionToken: (payload: any, version?: number | undefined) => string;
4
- export declare const verifySessionToken: (token: string) => string | import("jsonwebtoken").JwtPayload;
5
- export declare const bumpSessionToken: (session_id: string) => Promise<Session>;
6
- export declare const compareSessionTokenVersion: (session_id: string, token: string) => Promise<import("jsonwebtoken").JwtPayload>;
5
+ export declare const verifySessionToken: (token: string) => string | JwtPayload;
6
+ export declare const bumpSessionToken: (jwtSession: JwtPayload) => Promise<string>;
7
+ export declare const compareSessionTokenVersion: (jwtSession: JwtPayload) => Promise<void>;
7
8
  export declare const setSessionCookie: (res: Response, value: string) => Promise<void>;
8
9
  export declare const clearSessionCookie: (res: Response) => Promise<Response<any, Record<string, any>>>;
9
10
  export declare const deleteSession: (session_id: string) => Promise<Session>;
@@ -13,7 +13,11 @@ exports.deleteSession = exports.clearSessionCookie = exports.setSessionCookie =
13
13
  const jsonwebtoken_1 = require("jsonwebtoken");
14
14
  const Session_1 = require("../Entities/Session");
15
15
  const createSessionToken = (payload, version) => {
16
- return (0, jsonwebtoken_1.sign)({ user_id: payload.user_id, version: version || 0 }, process.env.SESSION_TOKEN_KEY, {
16
+ return (0, jsonwebtoken_1.sign)({
17
+ user_id: payload.user_id,
18
+ version: version || 0,
19
+ session_id: payload.session_id,
20
+ }, process.env.SESSION_TOKEN_KEY, {
17
21
  expiresIn: '7d',
18
22
  });
19
23
  };
@@ -22,21 +26,20 @@ const verifySessionToken = (token) => {
22
26
  return (0, jsonwebtoken_1.verify)(token, process.env.SESSION_TOKEN_KEY);
23
27
  };
24
28
  exports.verifySessionToken = verifySessionToken;
25
- const bumpSessionToken = (session_id) => {
29
+ const bumpSessionToken = (jwtSession) => {
26
30
  return new Promise((resolve, reject) => __awaiter(void 0, void 0, void 0, function* () {
27
- const session = yield Session_1.Session.findOne({ session_id });
28
- if (!session) {
31
+ const session = yield Session_1.Session.findOne({
32
+ session_id: jwtSession.session_id,
33
+ });
34
+ if (!session)
29
35
  return reject('Token not found');
30
- }
31
36
  try {
32
- const token = (0, jsonwebtoken_1.verify)(session.token, process.env.SESSION_TOKEN_KEY);
33
- if (typeof token === 'string') {
34
- return reject('Error while verifying token');
35
- }
36
- const newToken = (0, exports.createSessionToken)({ user_id: session.user_id }, token.version + 1);
37
- Session_1.Session.update({ session_id }, { token: newToken });
38
- session.token = newToken;
39
- resolve(session);
37
+ const newToken = (0, exports.createSessionToken)({ user_id: session.user_id, session_id: session.session_id }, session.version + 1);
38
+ Session_1.Session.update({ session_id: session.session_id }, {
39
+ version: session.version + 1,
40
+ last_used: (Date.now() / 1000).toFixed(0).toString(),
41
+ });
42
+ resolve(newToken);
40
43
  }
41
44
  catch (err) {
42
45
  reject(err);
@@ -44,31 +47,18 @@ const bumpSessionToken = (session_id) => {
44
47
  }));
45
48
  };
46
49
  exports.bumpSessionToken = bumpSessionToken;
47
- const compareSessionTokenVersion = (session_id, token) => __awaiter(void 0, void 0, void 0, function* () {
48
- const session = yield Session_1.Session.findOne({ session_id });
49
- if (!session) {
50
+ const compareSessionTokenVersion = (jwtSession) => __awaiter(void 0, void 0, void 0, function* () {
51
+ const session = yield Session_1.Session.findOne({ session_id: jwtSession.session_id });
52
+ if (!session)
50
53
  throw 'Session not found';
51
- }
52
- try {
53
- const decodedSessionToken = (0, jsonwebtoken_1.verify)(token, process.env.SESSION_TOKEN_KEY);
54
- const decodedToken = (0, jsonwebtoken_1.verify)(token, process.env.SESSION_TOKEN_KEY);
55
- if (typeof decodedToken === 'string' ||
56
- typeof decodedSessionToken === 'string')
57
- throw 'Invalid token';
58
- if (decodedToken.version < decodedSessionToken.version) {
59
- throw 'Token expired';
60
- }
61
- return decodedToken;
62
- }
63
- catch (err) {
64
- throw 'Invalid token';
65
- }
54
+ if (session.version > jwtSession.version)
55
+ throw 'Token expired';
66
56
  });
67
57
  exports.compareSessionTokenVersion = compareSessionTokenVersion;
68
58
  const setSessionCookie = (res, value) => __awaiter(void 0, void 0, void 0, function* () {
69
59
  const currentTime = Math.floor(new Date().getTime() / 1000);
70
60
  const weekExpiration = currentTime + 86400 * 7; // adds 7 days to timestamp
71
- res.cookie('session_id', value, {
61
+ res.cookie('pid', value, {
72
62
  sameSite: 'none',
73
63
  expires: new Date(weekExpiration * 1000),
74
64
  httpOnly: true,
@@ -77,7 +67,7 @@ const setSessionCookie = (res, value) => __awaiter(void 0, void 0, void 0, funct
77
67
  });
78
68
  exports.setSessionCookie = setSessionCookie;
79
69
  const clearSessionCookie = (res) => __awaiter(void 0, void 0, void 0, function* () {
80
- return res.clearCookie('session_id');
70
+ return res.clearCookie('pid');
81
71
  });
82
72
  exports.clearSessionCookie = clearSessionCookie;
83
73
  const deleteSession = (session_id) => __awaiter(void 0, void 0, void 0, function* () {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "protonfile-auth",
3
- "version": "1.6.2",
3
+ "version": "1.6.4",
4
4
  "description": "protonfile-auth",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -14,11 +14,13 @@
14
14
  "license": "ISC",
15
15
  "devDependencies": {
16
16
  "@types/bcryptjs": "^2.4.2",
17
+ "@types/better-sqlite3": "^7.5.0",
17
18
  "@types/express": "^4.17.13",
18
19
  "@types/jsonwebtoken": "^8.5.5",
19
20
  "@types/nodemailer": "^6.4.4",
20
21
  "@types/pg": "^8.6.1",
21
22
  "@types/uuid": "^8.3.1",
23
+ "better-sqlite3": "^7.6.2",
22
24
  "typescript": "^4.4.4"
23
25
  },
24
26
  "files": [
@@ -34,6 +36,7 @@
34
36
  "express": "^4.17.1",
35
37
  "handlebars": "^4.7.7",
36
38
  "jsonwebtoken": "^8.5.1",
39
+ "nanoid": "^3.3.4",
37
40
  "node-cache": "^5.1.2",
38
41
  "nodemailer": "^6.7.0",
39
42
  "pg": "^8.7.1",