@backstage/plugin-search-backend 0.2.6 → 0.3.1-next.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/CHANGELOG.md +50 -0
- package/dist/index.cjs.js +18 -8
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/package.json +6 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
# @backstage/plugin-search-backend
|
|
2
2
|
|
|
3
|
+
## 0.3.1-next.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
- @backstage/backend-common@0.10.4-next.0
|
|
9
|
+
|
|
10
|
+
## 0.3.0
|
|
11
|
+
|
|
12
|
+
### Minor Changes
|
|
13
|
+
|
|
14
|
+
- a41fbfe739: Search result location filtering
|
|
15
|
+
|
|
16
|
+
This change introduces a filter for search results based on their location protocol. The intention is to filter out unsafe or
|
|
17
|
+
malicious values before they can be consumed by the frontend. By default locations must be http/https URLs (or paths).
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies
|
|
22
|
+
- @backstage/backend-common@0.10.0
|
|
23
|
+
|
|
24
|
+
## 0.2.8
|
|
25
|
+
|
|
26
|
+
### Patch Changes
|
|
27
|
+
|
|
28
|
+
- dcd1a0c3f4: Minor improvement to the API reports, by not unpacking arguments directly
|
|
29
|
+
- Updated dependencies
|
|
30
|
+
- @backstage/backend-common@0.9.13
|
|
31
|
+
|
|
32
|
+
## 0.2.7
|
|
33
|
+
|
|
34
|
+
### Patch Changes
|
|
35
|
+
|
|
36
|
+
- bab752e2b3: Change default port of backend from 7000 to 7007.
|
|
37
|
+
|
|
38
|
+
This is due to the AirPlay Receiver process occupying port 7000 and preventing local Backstage instances on MacOS to start.
|
|
39
|
+
|
|
40
|
+
You can change the port back to 7000 or any other value by providing an `app-config.yaml` with the following values:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
backend:
|
|
44
|
+
listen: 0.0.0.0:7123
|
|
45
|
+
baseUrl: http://localhost:7123
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
More information can be found here: https://backstage.io/docs/conf/writing
|
|
49
|
+
|
|
50
|
+
- Updated dependencies
|
|
51
|
+
- @backstage/backend-common@0.9.11
|
|
52
|
+
|
|
3
53
|
## 0.2.6
|
|
4
54
|
|
|
5
55
|
### Patch Changes
|
package/dist/index.cjs.js
CHANGED
|
@@ -8,17 +8,27 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
8
8
|
|
|
9
9
|
var Router__default = /*#__PURE__*/_interopDefaultLegacy(Router);
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
logger
|
|
14
|
-
}) {
|
|
15
|
-
|
|
11
|
+
const allowedLocationProtocols = ["http:", "https:"];
|
|
12
|
+
async function createRouter(options) {
|
|
13
|
+
const { engine, logger } = options;
|
|
14
|
+
const filterResultSet = ({ results, ...resultSet }) => ({
|
|
15
|
+
...resultSet,
|
|
16
|
+
results: results.filter((result) => {
|
|
17
|
+
const protocol = new URL(result.document.location, "https://example.com").protocol;
|
|
18
|
+
const isAllowed = allowedLocationProtocols.includes(protocol);
|
|
19
|
+
if (!isAllowed) {
|
|
20
|
+
logger.info(`Rejected search result for "${result.document.title}" as location protocol "${protocol}" is unsafe`);
|
|
21
|
+
}
|
|
22
|
+
return isAllowed;
|
|
23
|
+
})
|
|
24
|
+
});
|
|
25
|
+
const router = Router__default["default"]();
|
|
16
26
|
router.get("/query", async (req, res) => {
|
|
17
|
-
const {term, filters = {}, types, pageCursor} = req.query;
|
|
27
|
+
const { term, filters = {}, types, pageCursor } = req.query;
|
|
18
28
|
logger.info(`Search request received: term="${term}", filters=${JSON.stringify(filters)}, types=${types ? types.join(",") : ""}, pageCursor=${pageCursor != null ? pageCursor : ""}`);
|
|
19
29
|
try {
|
|
20
|
-
const
|
|
21
|
-
res.send(
|
|
30
|
+
const resultSet = await (engine == null ? void 0 : engine.query(req.query));
|
|
31
|
+
res.send(filterResultSet(resultSet));
|
|
22
32
|
} catch (err) {
|
|
23
33
|
throw new Error(`There was a problem performing the search query. ${err}`);
|
|
24
34
|
}
|
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/service/router.ts"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport express from 'express';\nimport Router from 'express-promise-router';\nimport { Logger } from 'winston';\nimport { SearchQuery, SearchResultSet } from '@backstage/search-common';\nimport { SearchEngine } from '@backstage/plugin-search-backend-node';\n\
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/service/router.ts"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport express from 'express';\nimport Router from 'express-promise-router';\nimport { Logger } from 'winston';\nimport { SearchQuery, SearchResultSet } from '@backstage/search-common';\nimport { SearchEngine } from '@backstage/plugin-search-backend-node';\n\nexport type RouterOptions = {\n engine: SearchEngine;\n logger: Logger;\n};\n\nconst allowedLocationProtocols = ['http:', 'https:'];\n\nexport async function createRouter(\n options: RouterOptions,\n): Promise<express.Router> {\n const { engine, logger } = options;\n\n const filterResultSet = ({ results, ...resultSet }: SearchResultSet) => ({\n ...resultSet,\n results: results.filter(result => {\n const protocol = new URL(result.document.location, 'https://example.com')\n .protocol;\n const isAllowed = allowedLocationProtocols.includes(protocol);\n if (!isAllowed) {\n logger.info(\n `Rejected search result for \"${result.document.title}\" as location protocol \"${protocol}\" is unsafe`,\n );\n }\n return isAllowed;\n }),\n });\n\n const router = Router();\n router.get(\n '/query',\n async (\n req: express.Request<any, unknown, unknown, SearchQuery>,\n res: express.Response<SearchResultSet>,\n ) => {\n const { term, filters = {}, types, pageCursor } = req.query;\n logger.info(\n `Search request received: term=\"${term}\", filters=${JSON.stringify(\n filters,\n )}, types=${types ? types.join(',') : ''}, pageCursor=${\n pageCursor ?? ''\n }`,\n );\n\n try {\n const resultSet = await engine?.query(req.query);\n res.send(filterResultSet(resultSet));\n } catch (err) {\n throw new Error(\n `There was a problem performing the search query. ${err}`,\n );\n }\n },\n );\n\n return router;\n}\n"],"names":["Router"],"mappings":";;;;;;;;;;AA2BA,MAAM,2BAA2B,CAAC,SAAS;4BAGzC,SACyB;AACzB,QAAM,EAAE,QAAQ,WAAW;AAE3B,QAAM,kBAAkB,CAAC,EAAE,YAAY;AAAkC,OACpE;AAAA,IACH,SAAS,QAAQ,OAAO,YAAU;AAChC,YAAM,WAAW,IAAI,IAAI,OAAO,SAAS,UAAU,uBAChD;AACH,YAAM,YAAY,yBAAyB,SAAS;AACpD,UAAI,CAAC,WAAW;AACd,eAAO,KACL,+BAA+B,OAAO,SAAS,gCAAgC;AAAA;AAGnF,aAAO;AAAA;AAAA;AAIX,QAAM,SAASA;AACf,SAAO,IACL,UACA,OACE,KACA,QACG;AACH,UAAM,EAAE,MAAM,UAAU,IAAI,OAAO,eAAe,IAAI;AACtD,WAAO,KACL,kCAAkC,kBAAkB,KAAK,UACvD,mBACU,QAAQ,MAAM,KAAK,OAAO,kBACpC,kCAAc;AAIlB,QAAI;AACF,YAAM,YAAY,wCAAc,MAAM,IAAI;AAC1C,UAAI,KAAK,gBAAgB;AAAA,aAClB,KAAP;AACA,YAAM,IAAI,MACR,oDAAoD;AAAA;AAAA;AAM5D,SAAO;AAAA;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,6 @@ declare type RouterOptions = {
|
|
|
6
6
|
engine: SearchEngine;
|
|
7
7
|
logger: Logger;
|
|
8
8
|
};
|
|
9
|
-
declare function createRouter(
|
|
9
|
+
declare function createRouter(options: RouterOptions): Promise<express.Router>;
|
|
10
10
|
|
|
11
|
-
export { createRouter };
|
|
11
|
+
export { RouterOptions, createRouter };
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/plugin-search-backend",
|
|
3
|
-
"
|
|
3
|
+
"description": "The Backstage backend plugin that provides your backstage app with search",
|
|
4
|
+
"version": "0.3.1-next.0",
|
|
4
5
|
"main": "dist/index.cjs.js",
|
|
5
6
|
"types": "dist/index.d.ts",
|
|
6
7
|
"license": "Apache-2.0",
|
|
@@ -19,8 +20,8 @@
|
|
|
19
20
|
"clean": "backstage-cli clean"
|
|
20
21
|
},
|
|
21
22
|
"dependencies": {
|
|
22
|
-
"@backstage/backend-common": "^0.
|
|
23
|
-
"@backstage/plugin-search-backend-node": "^0.4.
|
|
23
|
+
"@backstage/backend-common": "^0.10.4-next.0",
|
|
24
|
+
"@backstage/plugin-search-backend-node": "^0.4.4",
|
|
24
25
|
"@backstage/search-common": "^0.2.0",
|
|
25
26
|
"@types/express": "^4.17.6",
|
|
26
27
|
"express": "^4.17.1",
|
|
@@ -29,12 +30,12 @@
|
|
|
29
30
|
"yn": "^4.0.0"
|
|
30
31
|
},
|
|
31
32
|
"devDependencies": {
|
|
32
|
-
"@backstage/cli": "^0.
|
|
33
|
+
"@backstage/cli": "^0.12.0-next.0",
|
|
33
34
|
"@types/supertest": "^2.0.8",
|
|
34
35
|
"supertest": "^6.1.3"
|
|
35
36
|
},
|
|
36
37
|
"files": [
|
|
37
38
|
"dist"
|
|
38
39
|
],
|
|
39
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "31184691d5a38cb78b091c8f7ad6db80604519a6"
|
|
40
41
|
}
|