@autofleet/zehut 1.8.2 → 2.0.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
@@ -70,4 +70,8 @@ and run
70
70
  ```
71
71
  npm publish
72
72
  ```
73
+
74
+ # Environment Variables
75
+
76
+ when using this package locally or outside autofleet-prod project you must set INTEGRATION_MS_SERVICE_HOST in .env file
73
77
  # zehut
@@ -0,0 +1,2 @@
1
+ export declare const decodeAppBearer: (bearer: string, appId: string) => Promise<any>;
2
+ export declare const getClientSecret: (appId: string) => Promise<any>;
@@ -0,0 +1,21 @@
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.getClientSecret = exports.decodeAppBearer = void 0;
13
+ const services_1 = require("./services");
14
+ exports.decodeAppBearer = (bearer, appId) => __awaiter(void 0, void 0, void 0, function* () {
15
+ const { data: decoded } = yield services_1.AutofleetApiNetwork.post('/api/v1/auth', { bearer, appId });
16
+ return decoded;
17
+ });
18
+ exports.getClientSecret = (appId) => __awaiter(void 0, void 0, void 0, function* () {
19
+ const { data: secret } = yield services_1.AutofleetApiNetwork.get(`/api/v1/auth/client-secret/${appId}`);
20
+ return secret;
21
+ });
@@ -0,0 +1,3 @@
1
+ export default class AppDoesNotExist extends Error {
2
+ mesaage: 'app does not exist';
3
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class AppDoesNotExist extends Error {
4
+ }
5
+ exports.default = AppDoesNotExist;
package/lib/index.d.ts CHANGED
@@ -31,7 +31,6 @@ declare const _default: {
31
31
  appMiddleware: (options: {
32
32
  appId: string;
33
33
  clientSecret: string;
34
- appSecret: string;
35
34
  }) => (req: any, res: any, next: any) => Promise<void>;
36
35
  };
37
36
  export default _default;
@@ -12,7 +12,6 @@ export declare const middlewareWithDecode: (options?: {
12
12
  export declare const appMiddleware: (options: {
13
13
  appId: string;
14
14
  clientSecret: string;
15
- appSecret: string;
16
15
  }) => (req: any, res: any, next: any) => Promise<void>;
17
16
  export declare const eagerLoadPermissionsMiddleware: (req: any, res: any, next: any) => Promise<any>;
18
17
  export declare const getDecodedBearer: (req: any) => any;
package/lib/user/index.js CHANGED
@@ -27,39 +27,52 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
27
27
  step((generator = generator.apply(thisArg, _arguments || [])).next());
28
28
  });
29
29
  };
30
+ var __importDefault = (this && this.__importDefault) || function (mod) {
31
+ return (mod && mod.__esModule) ? mod : { "default": mod };
32
+ };
30
33
  Object.defineProperty(exports, "__esModule", { value: true });
31
34
  exports.getDecodedBearer = exports.eagerLoadPermissionsMiddleware = exports.appMiddleware = exports.middlewareWithDecode = exports.middleware = void 0;
32
35
  const jsonwebtoken_1 = require("jsonwebtoken");
33
36
  const ApiUser_1 = __importStar(require("./ApiUser"));
34
- const utils_1 = require("../utils");
35
37
  const tracer_1 = require("../tracer");
38
+ const app_auth_1 = require("../app-auth");
39
+ const appDoesNotExist_1 = __importDefault(require("../exceptions/appDoesNotExist"));
40
+ const utils_1 = require("../utils");
36
41
  exports.middleware = (options = {}) => (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
37
- const { eagerLoadUserPermissions, eagerLoadUserPermissionsLegacy, customPermissionLoader, } = options;
38
- const userId = req.headers['x-af-user-id'];
39
- const trace = tracer_1.newTrace('userPayload');
40
- if (!userId) {
41
- return next();
42
- }
43
- const elevatedPermissionsFromHeader = req.headers[ApiUser_1.ELEVATED_PERMISSIONS_HEADER] && req.headers[ApiUser_1.ELEVATED_PERMISSIONS_HEADER].length > 0
44
- ? JSON.parse(req.headers[ApiUser_1.ELEVATED_PERMISSIONS_HEADER])
45
- : {};
46
- const userObject = new ApiUser_1.default(userId, 'user', elevatedPermissionsFromHeader);
47
- if (eagerLoadUserPermissions) {
48
- if (customPermissionLoader) {
49
- yield userObject.useCustomPermissionLoader(customPermissionLoader);
42
+ try {
43
+ const { eagerLoadUserPermissions, eagerLoadUserPermissionsLegacy, customPermissionLoader, } = options;
44
+ const userId = req.headers['x-af-user-id'];
45
+ const trace = tracer_1.newTrace('userPayload');
46
+ if (!userId) {
47
+ return next();
50
48
  }
51
- else {
52
- yield userObject.getUserPermissions();
49
+ const elevatedPermissionsFromHeader = req.headers[ApiUser_1.ELEVATED_PERMISSIONS_HEADER] && req.headers[ApiUser_1.ELEVATED_PERMISSIONS_HEADER].length > 0
50
+ ? JSON.parse(req.headers[ApiUser_1.ELEVATED_PERMISSIONS_HEADER])
51
+ : {};
52
+ const userObject = new ApiUser_1.default(userId, 'user', elevatedPermissionsFromHeader);
53
+ if (eagerLoadUserPermissions) {
54
+ if (customPermissionLoader) {
55
+ yield userObject.useCustomPermissionLoader(customPermissionLoader);
56
+ }
57
+ else {
58
+ yield userObject.getUserPermissions();
59
+ }
53
60
  }
61
+ if (eagerLoadUserPermissionsLegacy) {
62
+ yield userObject.getUserPermissionsLegacy();
63
+ }
64
+ req.user = userObject;
65
+ trace.context.set('userObject', userObject);
66
+ // Added in order to support outbreak.
67
+ req.headers['x-af-user-permissions'] = userObject;
68
+ return next();
54
69
  }
55
- if (eagerLoadUserPermissionsLegacy) {
56
- yield userObject.getUserPermissionsLegacy();
70
+ catch (e) {
71
+ res.status(401);
72
+ return res.json({
73
+ error: 'cannot authenticate user',
74
+ });
57
75
  }
58
- req.user = userObject;
59
- trace.context.set('userObject', userObject);
60
- // Added in order to support outbreak.
61
- req.headers['x-af-user-permissions'] = userObject;
62
- return next();
63
76
  });
64
77
  exports.middlewareWithDecode = (options = {}) => (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
65
78
  var _a, _b;
@@ -68,7 +81,7 @@ exports.middlewareWithDecode = (options = {}) => (req, res, next) => __awaiter(v
68
81
  let decoded;
69
82
  if (req.headers.authorization) {
70
83
  try {
71
- decoded = utils_1.decodeBearer(req.headers.authorization);
84
+ decoded = yield utils_1.decodeBearer(req.headers.authorization);
72
85
  }
73
86
  catch (e) {
74
87
  if (e instanceof jsonwebtoken_1.TokenExpiredError) {
@@ -118,7 +131,7 @@ exports.middlewareWithDecode = (options = {}) => (req, res, next) => __awaiter(v
118
131
  return next();
119
132
  });
120
133
  exports.appMiddleware = (options) => (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
121
- const { appId, clientSecret, appSecret, } = options;
134
+ const { appId, clientSecret, } = options;
122
135
  const trace = tracer_1.newTrace('userPayload');
123
136
  let decoded;
124
137
  if (!req.headers.authorization) {
@@ -128,7 +141,10 @@ exports.appMiddleware = (options) => (req, res, next) => __awaiter(void 0, void
128
141
  });
129
142
  }
130
143
  try {
131
- decoded = utils_1.decodeBearer(req.headers.authorization, appSecret);
144
+ decoded = yield app_auth_1.decodeAppBearer(req.headers.authorization, appId);
145
+ if (!decoded) {
146
+ throw new appDoesNotExist_1.default();
147
+ }
132
148
  }
133
149
  catch (e) {
134
150
  if (e instanceof jsonwebtoken_1.TokenExpiredError) {
@@ -143,6 +159,12 @@ exports.appMiddleware = (options) => (req, res, next) => __awaiter(void 0, void
143
159
  errors: [e.message],
144
160
  });
145
161
  }
162
+ if (e instanceof appDoesNotExist_1.default) {
163
+ res.status(400);
164
+ return res.json({
165
+ errors: [e.message],
166
+ });
167
+ }
146
168
  res.status(500);
147
169
  return res.json({
148
170
  errors: ['Server error while parsing token'],
@@ -153,13 +175,14 @@ exports.appMiddleware = (options) => (req, res, next) => __awaiter(void 0, void
153
175
  req.headers['X-AF-USER-ID'] = userId;
154
176
  }
155
177
  const userObject = new ApiUser_1.default(userId);
156
- if (appId && clientSecret) {
178
+ if (appId) {
157
179
  req.headers['x-autofleet-apps-secret'] = clientSecret;
158
180
  // Won't work until we find a better solution for identity ms
159
181
  yield userObject.getUserAppPermissions(appId, clientSecret);
160
182
  }
161
183
  req.user = userObject;
162
184
  trace.context.set('userObject', userObject);
185
+ trace.context.set('accessToken', utils_1.getAuthFromBearer(req.headers.authorization));
163
186
  // Added in order to support outbreak.
164
187
  req.headers['x-af-user-permissions'] = userObject;
165
188
  return next();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autofleet/zehut",
3
- "version": "1.8.2",
3
+ "version": "2.0.0",
4
4
  "description": "manage user's identity",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",