dbm-graph-api 1.1.45 → 1.1.47

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dbm-graph-api",
3
- "version": "1.1.45",
3
+ "version": "1.1.47",
4
4
  "main": "index.js",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -13,7 +13,7 @@
13
13
  "dependencies": {
14
14
  "@aws-sdk/client-s3": "^3.741.0",
15
15
  "@aws-sdk/s3-request-presigner": "^3.741.0",
16
- "dbm": "^1.4.4",
16
+ "dbm": "^1.4.5",
17
17
  "mime": "^4.0.6",
18
18
  "sharp": "^0.33.5",
19
19
  "ws": "^8.18.0"
@@ -20,55 +20,10 @@ export * as processAction from "./processAction/index.js";
20
20
  export * as taskrunner from "./taskrunner/index.js";
21
21
  export * as schema from "./schema/index.js";
22
22
 
23
- let fullSelectSetup = function() {
24
- let selectPrefix = "graphApi/range/select/";
25
- {
26
- let name = "idSelection";
27
- let currentSelect = new DbmGraphApi.range.select.IdSelection();
28
- currentSelect.item.register(selectPrefix + name);
29
- }
30
-
31
- {
32
- let name = "byObjectType";
33
- let currentSelect = new DbmGraphApi.range.select.ByObjectType();
34
- currentSelect.item.register(selectPrefix + name);
35
- }
36
-
37
- {
38
- let name = "includePrivate";
39
- let currentSelect = new DbmGraphApi.range.select.IncludePrivate();
40
- currentSelect.item.register(selectPrefix + name);
41
- }
42
-
43
- {
44
- let name = "includeDraft";
45
- let currentSelect = new DbmGraphApi.range.select.IncludeDraft();
46
- currentSelect.item.register(selectPrefix + name);
47
- }
48
-
49
- {
50
- let name = "objectRelationQuery";
51
- let currentSelect = new DbmGraphApi.range.select.ObjectRelationQuery();
52
- currentSelect.item.register(selectPrefix + name);
53
- }
54
-
55
- {
56
- let name = "globalObjectRelationQuery";
57
- let currentSelect = new DbmGraphApi.range.select.GlobalObjectRelationQuery();
58
- currentSelect.item.register(selectPrefix + name);
59
- }
60
-
61
- {
62
- let name = "withIdentifier";
63
- let currentSelect = new DbmGraphApi.range.select.WithIdentifier();
64
- currentSelect.item.register(selectPrefix + name);
65
- }
23
+ export const fullSelectSetup = function() {
24
+ DbmGraphApi.range.select.fullSetup();
66
25
  }
67
26
 
68
-
69
-
70
- export {fullSelectSetup};
71
-
72
27
  let registerEncoding = function(aName, aEncoder) {
73
28
  let encodePrefix = "graphApi/range/encode/";
74
29
  aEncoder.item.register(encodePrefix + aName);
@@ -386,6 +341,43 @@ export const setupEndpoints = function(aServer) {
386
341
  return { success: false, error: "incorrect", message: "Incorrect details"};
387
342
  });
388
343
 
344
+ aServer.post('/api/user/loginWith/*', async function handler (aRequest, aReply) {
345
+ let params = {...aRequest.body};
346
+
347
+ let request = new UrlRequest();
348
+ request.setup(aRequest, aReply);
349
+
350
+ let currentUrl = url.parse(aRequest.url);
351
+ let functionName = currentUrl.pathname.substring("/api/user/loginWith/".length);
352
+
353
+ let loginMethod = Dbm.getInstance().repository.getItemIfExists("loginMethods/" + functionName);
354
+ if(!loginMethod) {
355
+ aReply.code(404);
356
+ return { success: false, error: "notFound", message: "No login method " + functionName};
357
+ }
358
+
359
+ let user = await loginMethod.controller.getUser(params);
360
+ console.log(user);
361
+ if(user) {
362
+ let sessionId = await user.createSession();
363
+
364
+ let tempArray = sessionId.split(":");
365
+ let sessionDatabaseId = 1*tempArray[0];
366
+ let expiresTime = 1*tempArray[2];
367
+ let expiresDate = (new Date(expiresTime)).toUTCString();
368
+
369
+ aReply.header("Set-Cookie", "dbm_session=" +sessionId + "; Path=/; Expires=" + expiresDate + "; HttpOnly;");
370
+
371
+ let wsToken = crypto.randomBytes(32).toString('base64');
372
+ let expiryLength = 60;
373
+ let hashedWsToken = await user.generateSignedSessionToken(sessionDatabaseId, (new Date()).valueOf()+expiryLength*1000, wsToken, sessionId)
374
+
375
+ return { success: true, data: {id: user.id, "wsToken": hashedWsToken}};
376
+ }
377
+
378
+ return { success: false, error: "incorrect", message: "Incorrect details"};
379
+ });
380
+
389
381
  let getPublicSessionIdFomCookie = function(aCookies) {
390
382
  if(aCookies) {
391
383
  let cookies = aCookies.split(";");
@@ -0,0 +1,29 @@
1
+ import Dbm from "dbm";
2
+
3
+ import SelectBaseObject from "./SelectBaseObject.js";
4
+
5
+ export default class IdentifiableObjectRelationQuery extends SelectBaseObject {
6
+ _construct() {
7
+ super._construct();
8
+ }
9
+
10
+ async select(aQuery, aData, aRequest) {
11
+ //console.log("IdentifiableObjectRelationQuery::select");
12
+
13
+ this.requireParameters(aData, "path", "fromType", "fromIdentifier");
14
+
15
+ let globalObject = await Dbm.node.getDatabase().getIdentifiableObjectIfExists(aData["fromType"], aData["fromIdentifier"]);
16
+
17
+ if(!globalObject) {
18
+ console.log("No identifiable object", aData["fromType"], aData["fromIdentifier"]);
19
+ //METODO: send back in logs as sensitive
20
+ }
21
+
22
+ let ids = globalObject ? [globalObject.id] : [];
23
+ if(aData["path"] !== "(root)") {
24
+ ids = await Dbm.node.getDatabase().objectRelationQuery(ids, aData["path"]);
25
+ }
26
+
27
+ aQuery.includeOnly(ids);
28
+ }
29
+ }
@@ -0,0 +1,19 @@
1
+ import Dbm from "dbm";
2
+
3
+ import SelectBaseObject from "./SelectBaseObject.js";
4
+
5
+ export default class IncludeAnyStatus extends SelectBaseObject {
6
+ _construct() {
7
+ super._construct();
8
+ }
9
+
10
+ async select(aQuery, aData, aRequest) {
11
+ await aRequest.connection.requireRole("admin");
12
+
13
+ aQuery.includeAnyStatus();
14
+ }
15
+
16
+ async filter(aIds, aData, aRequest) {
17
+ return aIds;
18
+ }
19
+ }
@@ -5,6 +5,25 @@ export default class SelectBaseObject extends Dbm.core.BaseObject {
5
5
  super._construct();
6
6
  }
7
7
 
8
+ requireParameters(aData, ...aRequiredParameters) {
9
+ let isOk = true;
10
+ let missingParameters = [];
11
+
12
+ let currentArray = aRequiredParameters;
13
+ let currentArrayLength = currentArray.length;
14
+ for(let i = 0; i < currentArrayLength; i++) {
15
+ let currentParameterName = currentArray[i];
16
+ if(!aData[currentParameterName]) {
17
+ isOk = false;
18
+ missingParameters.push(currentParameterName);
19
+ }
20
+ }
21
+
22
+ if(!isOk) {
23
+ throw("Missing parameters: " + missingParameters.join(", "));
24
+ }
25
+ }
26
+
8
27
  async select(aQuery, aData, aRequest) {
9
28
 
10
29
  }
@@ -1,8 +1,33 @@
1
+ import DbmGraphApi from "../../../../index.js";
2
+
1
3
  export {default as SelectBaseObject} from "./SelectBaseObject.js";
2
4
  export {default as IdSelection} from "./IdSelection.js";
3
5
  export {default as ByObjectType} from "./ByObjectType.js";
4
6
  export {default as IncludePrivate} from "./IncludePrivate.js";
5
7
  export {default as IncludeDraft} from "./IncludeDraft.js";
8
+ export {default as IncludeAnyStatus} from "./IncludeAnyStatus.js";
6
9
  export {default as ObjectRelationQuery} from "./ObjectRelationQuery.js";
7
10
  export {default as GlobalObjectRelationQuery} from "./GlobalObjectRelationQuery.js";
8
- export {default as WithIdentifier} from "./WithIdentifier.js";
11
+ export {default as WithIdentifier} from "./WithIdentifier.js";
12
+ export {default as IdentifiableObjectRelationQuery} from "./IdentifiableObjectRelationQuery.js";
13
+
14
+ export const PREFIX = "graphApi/range/select/";
15
+
16
+ export const register = function(aName, aHandler) {
17
+ aHandler.item.register(PREFIX + aName);
18
+ }
19
+
20
+ export const fullSetup = function() {
21
+ register("byObjectType", new DbmGraphApi.range.select.ByObjectType());
22
+
23
+ register("idSelection", new DbmGraphApi.range.select.IdSelection());
24
+ register("withIdentifier", new DbmGraphApi.range.select.WithIdentifier());
25
+
26
+ register("includePrivate", new DbmGraphApi.range.select.IncludePrivate());
27
+ register("includeDraft", new DbmGraphApi.range.select.IncludeDraft());
28
+ register("includeAnyStatus", new DbmGraphApi.range.select.IncludeAnyStatus());
29
+
30
+ register("objectRelationQuery", new DbmGraphApi.range.select.ObjectRelationQuery());
31
+ register("globalObjectRelationQuery", new DbmGraphApi.range.select.GlobalObjectRelationQuery());
32
+ register("identifiableObjectRelationQuery", new DbmGraphApi.range.select.IdentifiableObjectRelationQuery());
33
+ }