@riao/authn-password 1.0.1 → 1.1.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.
package/README.md CHANGED
@@ -67,10 +67,13 @@ const userId = await authService.createPrincipal({
67
67
  password: 'securePassword123',
68
68
  });
69
69
 
70
+ // Change a password
71
+ await authService.changePassword(userId, 'newPassword123');
72
+
70
73
  // Authenticate a user
71
74
  const user = await authService.authenticate({
72
75
  login: 'john.doe',
73
- password: 'securePassword123',
76
+ password: 'newPassword123',
74
77
  });
75
78
 
76
79
  if (user) {
@@ -14,7 +14,10 @@ export declare abstract class PasswordAuthentication<TPrincipal extends Principa
14
14
  createPrincipal(principal: Omit<TPrincipal, 'id' | 'create_timestamp'> & {
15
15
  password: string;
16
16
  }): Promise<DatabaseRecordId>;
17
+ changePassword(principalId: DatabaseRecordId, newPassword: string): Promise<void>;
17
18
  authenticate(credentials: Partial<TPrincipal & {
18
19
  password: string;
19
20
  }>): Promise<TPrincipal | null>;
21
+ protected revokePasswords(principalId: DatabaseRecordId): Promise<void>;
22
+ protected insertPassword(principalId: DatabaseRecordId, hash: string): Promise<void>;
20
23
  }
@@ -18,14 +18,16 @@ class PasswordAuthentication extends authentication_1.Authentication {
18
18
  const hash = await this.hash.make(principal.password);
19
19
  delete principal.password;
20
20
  const principalId = await super.createPrincipal(principal);
21
- await this.passwordsRepo.insertOne({
22
- record: {
23
- principal_id: principalId,
24
- password_hash: hash,
25
- },
26
- });
21
+ await this.insertPassword(principalId, hash);
27
22
  return principalId;
28
23
  }
24
+ async changePassword(principalId, newPassword) {
25
+ // eslint-disable-next-line no-console
26
+ console.log('Changing password for principal ID:', principalId, newPassword);
27
+ const hash = await this.hash.make(newPassword);
28
+ await this.revokePasswords(principalId);
29
+ await this.insertPassword(principalId, hash);
30
+ }
29
31
  async authenticate(credentials) {
30
32
  const principal = await this.findActivePrincipal({
31
33
  where: {
@@ -45,6 +47,23 @@ class PasswordAuthentication extends authentication_1.Authentication {
45
47
  const isValid = await this.hash.check(credentials.password, passwordRecord?.password_hash);
46
48
  return isValid ? principal : null;
47
49
  }
50
+ async revokePasswords(principalId) {
51
+ await this.passwordsRepo.update({
52
+ set: { deactivate_timestamp: new Date() },
53
+ where: {
54
+ principal_id: principalId,
55
+ deactivate_timestamp: null,
56
+ },
57
+ });
58
+ }
59
+ async insertPassword(principalId, hash) {
60
+ await this.passwordsRepo.insertOne({
61
+ record: {
62
+ principal_id: principalId,
63
+ password_hash: hash,
64
+ },
65
+ });
66
+ }
48
67
  }
49
68
  exports.PasswordAuthentication = PasswordAuthentication;
50
69
  //# sourceMappingURL=authentication-password.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authentication-password.js","sourceRoot":"","sources":["../../src/authentication-password.ts"],"names":[],"mappings":";;;AACA,yCAAsC;AAEtC,6DAA0D;AAQ1D,MAAsB,sBAEpB,SAAQ,+BAA0B;IAC5B,aAAa,CAA4B;IAEtC,IAAI,CAAO;IAErB,YAAmB,OAAsC;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,WAAI,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAAW;YAC5D,KAAK,EAAE,eAAe;YACtB,YAAY,EAAE,IAAI;SAClB,CAAC,CAAC;IACJ,CAAC;IAEe,KAAK,CAAC,eAAe,CACpC,SAEC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtD,OAAQ,SAAmC,CAAC,QAAQ,CAAC;QAErD,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAE3D,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;YAClC,MAAM,EAAE;gBACP,YAAY,EAAE,WAAqB;gBACnC,aAAa,EAAE,IAAI;aACnB;SACD,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,YAAY,CACxB,WAAuD;QAEvD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC;YAChD,KAAK,EAAc;gBAClB,KAAK,EAAE,WAAW,CAAC,KAAK;aACxB;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YACvD,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE;YACjE,OAAO,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,WAAW,CAAC,QAAkB,EAC9B,cAAc,EAAE,aAAuB,CACvC,CAAC;QAEF,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;CACD;AAjED,wDAiEC"}
1
+ {"version":3,"file":"authentication-password.js","sourceRoot":"","sources":["../../src/authentication-password.ts"],"names":[],"mappings":";;;AACA,yCAAsC;AAEtC,6DAA0D;AAQ1D,MAAsB,sBAEpB,SAAQ,+BAA0B;IAC5B,aAAa,CAA4B;IAEtC,IAAI,CAAO;IAErB,YAAmB,OAAsC;QACxD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,WAAI,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,EAAE,CAAC,kBAAkB,CAAW;YAC5D,KAAK,EAAE,eAAe;YACtB,YAAY,EAAE,IAAI;SAClB,CAAC,CAAC;IACJ,CAAC;IAEe,KAAK,CAAC,eAAe,CACpC,SAEC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtD,OAAQ,SAAmC,CAAC,QAAQ,CAAC;QAErD,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAE7C,OAAO,WAAW,CAAC;IACpB,CAAC;IAEM,KAAK,CAAC,cAAc,CAC1B,WAA6B,EAC7B,WAAmB;QAEnB,sCAAsC;QACtC,OAAO,CAAC,GAAG,CACV,qCAAqC,EACrC,WAAW,EACX,WAAW,CACX,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAE/C,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,YAAY,CACxB,WAAuD;QAEvD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC;YAChD,KAAK,EAAc;gBAClB,KAAK,EAAE,WAAW,CAAC,KAAK;aACxB;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;YACvD,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE;YACjE,OAAO,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE;SACrC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CACpC,WAAW,CAAC,QAAkB,EAC9B,cAAc,EAAE,aAAuB,CACvC,CAAC;QAEF,OAAO,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC;IAES,KAAK,CAAC,eAAe,CAC9B,WAA6B;QAE7B,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAC/B,GAAG,EAAE,EAAE,oBAAoB,EAAE,IAAI,IAAI,EAAE,EAAE;YACzC,KAAK,EAAE;gBACN,YAAY,EAAE,WAAqB;gBACnC,oBAAoB,EAAE,IAAI;aAC1B;SACD,CAAC,CAAC;IACJ,CAAC;IAES,KAAK,CAAC,cAAc,CAC7B,WAA6B,EAC7B,IAAY;QAEZ,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;YAClC,MAAM,EAAE;gBACP,YAAY,EAAE,WAAqB;gBACnC,aAAa,EAAE,IAAI;aACnB;SACD,CAAC,CAAC;IACJ,CAAC;CACD;AAnGD,wDAmGC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@riao/authn-password",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "Password driver for Riao",
5
5
  "typescript-template": {
6
6
  "base": "1.0.1",