mirror of
https://gitlab.com/openstapps/openstapps.git
synced 2026-01-10 03:32:52 +00:00
Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6fd8c5adf3 | ||
|
|
db24b41d99 | ||
|
|
b1fcd22ab2 | ||
|
|
268588fb6f | ||
|
|
d3048a12d8 | ||
|
|
e14993114f | ||
|
|
4237f6ad60 | ||
|
|
e7c1000bc4 | ||
|
|
e0adb2332e | ||
|
|
e5696b23e7 | ||
|
|
659d0974f7 | ||
|
|
e8304eeeb4 | ||
|
|
dca9d26c66 | ||
|
|
852e0f5373 | ||
|
|
26dd531d24 | ||
|
|
52bdf93356 | ||
|
|
7509610145 | ||
|
|
972cdf392d | ||
|
|
4f758f7d0c | ||
|
|
980e899807 | ||
|
|
d1c5bb9595 | ||
|
|
dc9c0f528f | ||
|
|
66d64e0858 | ||
|
|
06339786c2 | ||
|
|
8ed68481fa | ||
|
|
e26042957c | ||
|
|
7553620a5d | ||
|
|
322c001e70 |
47
CHANGELOG.md
47
CHANGELOG.md
@@ -1,3 +1,50 @@
|
|||||||
|
# [0.63.0](https://gitlab.com/openstapps/core/compare/v0.62.0...v0.63.0) (2022-01-24)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* add auth object to index route ([e149931](https://gitlab.com/openstapps/core/commit/e14993114f0ec370775010eee4ad0d302a0beebb))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.62.0](https://gitlab.com/openstapps/core/compare/v0.61.0...v0.62.0) (2022-01-21)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* add missing lastPublished to SCCreativeWork ([e0adb23](https://gitlab.com/openstapps/core/commit/e0adb2332ec24ce388c4c008b51b7aa941948532))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.61.0](https://gitlab.com/openstapps/core/compare/v0.60.0...v0.61.0) (2022-01-21)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.60.0](https://gitlab.com/openstapps/core/compare/v0.59.0...v0.60.0) (2022-01-21)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.59.0](https://gitlab.com/openstapps/core/compare/v0.58.0...v0.59.0) (2022-01-20)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.58.0](https://gitlab.com/openstapps/core/compare/v0.57.0...v0.58.0) (2022-01-18)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.57.0](https://gitlab.com/openstapps/core/compare/v0.56.0...v0.57.0) (2022-01-18)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* extend config to describe auth providers ([7553620](https://gitlab.com/openstapps/core/commit/7553620a5d330ebfb66461afeab700e36bd37165))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [0.56.0](https://gitlab.com/openstapps/core/compare/v0.55.0...v0.56.0) (2021-12-17)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [0.55.0](https://gitlab.com/openstapps/core/compare/v0.54.0...v0.55.0) (2021-12-15)
|
# [0.55.0](https://gitlab.com/openstapps/core/compare/v0.54.0...v0.55.0) (2021-12-15)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
706
package-lock.json
generated
706
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
24
package.json
24
package.json
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@openstapps/core",
|
"name": "@openstapps/core",
|
||||||
"version": "0.56.0",
|
"version": "0.64.0",
|
||||||
"description": "StAppsCore - Generalized model of data",
|
"description": "StAppsCore - Generalized model of data",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"Model",
|
"Model",
|
||||||
@@ -45,14 +45,14 @@
|
|||||||
"Wieland Schöbl"
|
"Wieland Schöbl"
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openstapps/core-tools": "0.28.0",
|
"@openstapps/core-tools": "0.29.0",
|
||||||
"@types/geojson": "1.0.6",
|
"@types/geojson": "1.0.6",
|
||||||
"@types/json-patch": "0.0.30",
|
"@types/json-patch": "0.0.30",
|
||||||
"@types/json-schema": "7.0.9",
|
"@types/json-schema": "7.0.10",
|
||||||
"@types/node": "14.18.0",
|
"@types/node": "14.18.3",
|
||||||
"fast-clone": "1.5.13",
|
"fast-clone": "1.5.13",
|
||||||
"fast-deep-equal": "3.1.3",
|
"fast-deep-equal": "3.1.3",
|
||||||
"http-status-codes": "2.1.4",
|
"http-status-codes": "2.2.0",
|
||||||
"json-patch": "0.7.0",
|
"json-patch": "0.7.0",
|
||||||
"json-schema": "0.4.0",
|
"json-schema": "0.4.0",
|
||||||
"ts-optchain": "0.1.8"
|
"ts-optchain": "0.1.8"
|
||||||
@@ -63,19 +63,19 @@
|
|||||||
"@openstapps/logger": "0.8.0",
|
"@openstapps/logger": "0.8.0",
|
||||||
"@testdeck/mocha": "0.2.0",
|
"@testdeck/mocha": "0.2.0",
|
||||||
"@types/chai": "4.3.0",
|
"@types/chai": "4.3.0",
|
||||||
"@types/lodash": "4.14.178",
|
"@types/lodash": "4.14.180",
|
||||||
"@types/mocha": "9.0.0",
|
"@types/mocha": "9.1.0",
|
||||||
"@types/rimraf": "3.0.2",
|
"@types/rimraf": "3.0.2",
|
||||||
"chai": "4.3.4",
|
"chai": "4.3.6",
|
||||||
"conditional-type-checks": "1.0.5",
|
"conditional-type-checks": "1.0.5",
|
||||||
"conventional-changelog-cli": "2.1.1",
|
"conventional-changelog-cli": "2.2.2",
|
||||||
"lodash": "4.17.21",
|
"lodash": "4.17.21",
|
||||||
"mocha": "9.1.3",
|
"mocha": "9.2.2",
|
||||||
"nyc": "15.1.0",
|
"nyc": "15.1.0",
|
||||||
"rimraf": "3.0.2",
|
"rimraf": "3.0.2",
|
||||||
"source-map-support": "0.5.21",
|
"source-map-support": "0.5.21",
|
||||||
"surge": "0.23.0",
|
"surge": "0.23.1",
|
||||||
"ts-node": "10.4.0",
|
"ts-node": "10.7.0",
|
||||||
"tslint": "6.1.3",
|
"tslint": "6.1.3",
|
||||||
"typedoc": "0.21.6",
|
"typedoc": "0.21.6",
|
||||||
"typescript": "4.3.5"
|
"typescript": "4.3.5"
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import {Polygon} from 'geojson';
|
|||||||
import {SCTranslations} from '../general/i18n';
|
import {SCTranslations} from '../general/i18n';
|
||||||
import {SCMap} from '../general/map';
|
import {SCMap} from '../general/map';
|
||||||
import {SCLanguageSetting, SCSetting, SCUserGroupSetting} from '../things/setting';
|
import {SCLanguageSetting, SCSetting, SCUserGroupSetting} from '../things/setting';
|
||||||
|
import {SCFeatureConfiguration} from './feature';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An app configuration menu item
|
* An app configuration menu item
|
||||||
@@ -94,9 +95,9 @@ export interface SCAppConfiguration {
|
|||||||
campusPolygon: Polygon;
|
campusPolygon: Polygon;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A list of features to en- or disable
|
* Maps of enabled features (plugins and external services)
|
||||||
*/
|
*/
|
||||||
features: SCAppConfigurationFeature;
|
features: SCFeatureConfiguration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A URL where images are available
|
* A URL where images are available
|
||||||
@@ -135,16 +136,6 @@ export interface SCAppConfiguration {
|
|||||||
url?: string;
|
url?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Map of features
|
|
||||||
*/
|
|
||||||
export interface SCAppConfigurationFeature {
|
|
||||||
/**
|
|
||||||
* Whether or not widgets are enabled
|
|
||||||
*/
|
|
||||||
widgets: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* URLs of published apps
|
* URLs of published apps
|
||||||
*/
|
*/
|
||||||
|
|||||||
96
src/config/authorization.ts
Normal file
96
src/config/authorization.ts
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 StApps
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {SCUserConfigurationMap} from './user';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Supported authorization provider types
|
||||||
|
*
|
||||||
|
* @see https://datatracker.ietf.org/doc/html/rfc6749#section-1.3.1
|
||||||
|
* @see https://github.com/gbv/paia
|
||||||
|
*/
|
||||||
|
export type SCAuthorizationProviderType = 'default' | 'paia' ;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An authorization provider complete configuration
|
||||||
|
*/
|
||||||
|
export interface SCAuthorizationProvider {
|
||||||
|
/**
|
||||||
|
* An authorization provider client configuration
|
||||||
|
*/
|
||||||
|
client: SCAuthorizationProviderClient;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An authorization provider endpoints configuration
|
||||||
|
*/
|
||||||
|
endpoints: SCAuthorizationProviderEndpoints;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An authorization provider client configuration
|
||||||
|
*/
|
||||||
|
export interface SCAuthorizationProviderClient {
|
||||||
|
/**
|
||||||
|
* Client ID
|
||||||
|
*/
|
||||||
|
clientId: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Scopes to request
|
||||||
|
*/
|
||||||
|
scopes: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Main url to reach authorization provider
|
||||||
|
*/
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An authorization provider endpoints configuration
|
||||||
|
*/
|
||||||
|
export interface SCAuthorizationProviderEndpoints {
|
||||||
|
/**
|
||||||
|
* URL to start authentication flow
|
||||||
|
*/
|
||||||
|
authorization: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL to end current session
|
||||||
|
*/
|
||||||
|
endSession?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapping of how to create SCUser from userinfo endpoint response (using JSONPath syntax)
|
||||||
|
*
|
||||||
|
* @see https://www.npmjs.com/package/jsonpath
|
||||||
|
*/
|
||||||
|
mapping: SCUserConfigurationMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL to revoke a token
|
||||||
|
*/
|
||||||
|
revoke?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL to get access Token
|
||||||
|
*/
|
||||||
|
token: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL to general user info endpoint
|
||||||
|
*/
|
||||||
|
userinfo: string;
|
||||||
|
}
|
||||||
49
src/config/feature.ts
Normal file
49
src/config/feature.ts
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 StApps
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {SCMap} from '../general/map';
|
||||||
|
import {SCAuthorizationProviderType} from './authorization';
|
||||||
|
|
||||||
|
export interface SCFeatureConfiguration {
|
||||||
|
/**
|
||||||
|
* Map of extern services mapped by their name (statically)
|
||||||
|
*/
|
||||||
|
extern?: SCMap<SCFeatureConfigurationExtern>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map of plugins registered with the backend mapped by their name.
|
||||||
|
*/
|
||||||
|
plugins?: SCMap<SCFeatureConfigurationPlugin>;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export interface SCFeatureConfigurationPlugin {
|
||||||
|
/**
|
||||||
|
* URL path registered with the backend
|
||||||
|
*/
|
||||||
|
urlPath: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SCFeatureConfigurationExtern {
|
||||||
|
/**
|
||||||
|
* Key of authorization provider available in SCConfigFile
|
||||||
|
*/
|
||||||
|
authProvider?: SCAuthorizationProviderType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL of extern service
|
||||||
|
*/
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
import {SCLicensePlate} from '../general/namespaces';
|
import {SCLicensePlate} from '../general/namespaces';
|
||||||
import {SCAppConfiguration} from './app';
|
import {SCAppConfiguration} from './app';
|
||||||
|
import {SCAuthorizationProvider, SCAuthorizationProviderType} from './authorization';
|
||||||
import {SCBackendConfiguration, SCBackendInternalConfiguration} from './backend';
|
import {SCBackendConfiguration, SCBackendInternalConfiguration} from './backend';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -27,6 +28,11 @@ export interface SCConfigFile {
|
|||||||
*/
|
*/
|
||||||
app: SCAppConfiguration;
|
app: SCAppConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configuration for the supported authorization providers
|
||||||
|
*/
|
||||||
|
auth: { [key in SCAuthorizationProviderType]?: SCAuthorizationProvider; };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration for the backend that is visible to clients
|
* Configuration for the backend that is visible to clients
|
||||||
*/
|
*/
|
||||||
|
|||||||
64
src/config/user.ts
Normal file
64
src/config/user.ts
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2021 StApps
|
||||||
|
* This program is free software: you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation, version 3.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
* more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along with
|
||||||
|
* this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User configuration keys mapped to string type while including their requiredness
|
||||||
|
*/
|
||||||
|
export type SCUserConfigurationMap = { [K in keyof SCUserConfigurationOptional]?: string } & { [K in keyof SCUserConfigurationRequired]: string };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A user configuration
|
||||||
|
*/
|
||||||
|
export type SCUserConfiguration = SCUserConfigurationRequired & SCUserConfigurationOptional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A user configurations required properties
|
||||||
|
*/
|
||||||
|
interface SCUserConfigurationRequired {
|
||||||
|
/**
|
||||||
|
* ID given to the user
|
||||||
|
*/
|
||||||
|
id: string;
|
||||||
|
/**
|
||||||
|
* The complete name of the user combining all the parts of the name into one
|
||||||
|
*/
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A user configurations optional properties
|
||||||
|
*/
|
||||||
|
interface SCUserConfigurationOptional {
|
||||||
|
/**
|
||||||
|
* User's e-mail
|
||||||
|
*/
|
||||||
|
email?: string;
|
||||||
|
/**
|
||||||
|
* User's family name
|
||||||
|
*/
|
||||||
|
familyName?: string;
|
||||||
|
/**
|
||||||
|
* User's given name
|
||||||
|
*/
|
||||||
|
givenName?: string;
|
||||||
|
/**
|
||||||
|
* Role assigned to the user
|
||||||
|
*/
|
||||||
|
role?: string;
|
||||||
|
/**
|
||||||
|
* Student ID given to the user
|
||||||
|
*/
|
||||||
|
studentId?: string;
|
||||||
|
}
|
||||||
@@ -78,9 +78,9 @@ export interface SCRoute {
|
|||||||
statusCodeSuccess: number;
|
statusCodeSuccess: number;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* URL fragment of the route
|
* URL path of the route
|
||||||
*/
|
*/
|
||||||
urlFragment: string;
|
urlPath: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -112,16 +112,16 @@ export abstract class SCAbstractRoute implements SCRoute {
|
|||||||
*/
|
*/
|
||||||
statusCodeSuccess = 200;
|
statusCodeSuccess = 200;
|
||||||
/**
|
/**
|
||||||
* @see SCRoute.urlFragment
|
* @see SCRoute.urlPath
|
||||||
*/
|
*/
|
||||||
urlFragment = '/';
|
urlPath = '/';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get "compiled" URL fragment
|
* Get "compiled" URL path
|
||||||
*
|
*
|
||||||
* @param parameters Parameters to compile URL fragment with
|
* @param parameters Parameters to compile URL path with
|
||||||
*/
|
*/
|
||||||
public getUrlFragment(parameters: SCMap<string> = {}): string {
|
public getUrlPath(parameters: SCMap<string> = {}): string {
|
||||||
let obligatoryParameters: string[] = [];
|
let obligatoryParameters: string[] = [];
|
||||||
|
|
||||||
if (typeof this.obligatoryParameters === 'object') {
|
if (typeof this.obligatoryParameters === 'object') {
|
||||||
@@ -132,7 +132,7 @@ export abstract class SCAbstractRoute implements SCRoute {
|
|||||||
throw new Error('Extraneous parameters provided.');
|
throw new Error('Extraneous parameters provided.');
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.urlFragment
|
return this.urlPath
|
||||||
.split('/')
|
.split('/')
|
||||||
.map((part) => {
|
.map((part) => {
|
||||||
if (part.indexOf(':') !== 0) {
|
if (part.indexOf(':') !== 0) {
|
||||||
|
|||||||
@@ -89,6 +89,6 @@ export class SCBookAvailabilityRoute extends SCAbstractRoute {
|
|||||||
this.requestBodyName = 'SCBookAvailabilityRequest';
|
this.requestBodyName = 'SCBookAvailabilityRequest';
|
||||||
this.responseBodyName = 'SCBookAvailabilityResponse';
|
this.responseBodyName = 'SCBookAvailabilityResponse';
|
||||||
this.statusCodeSuccess = StatusCodes.OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/bookAvailability';
|
this.urlPath = '/bookAvailability';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,6 +60,6 @@ export class SCBulkAddRoute extends SCAbstractRoute {
|
|||||||
this.requestBodyName = 'SCBulkAddRequest';
|
this.requestBodyName = 'SCBulkAddRequest';
|
||||||
this.responseBodyName = 'SCBulkAddResponse';
|
this.responseBodyName = 'SCBulkAddResponse';
|
||||||
this.statusCodeSuccess = StatusCodes.CREATED;
|
this.statusCodeSuccess = StatusCodes.CREATED;
|
||||||
this.urlFragment = '/bulk/:UID';
|
this.urlPath = '/bulk/:UID';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,6 +60,6 @@ export class SCBulkDoneRoute extends SCAbstractRoute {
|
|||||||
this.requestBodyName = 'SCBulkDoneRequest';
|
this.requestBodyName = 'SCBulkDoneRequest';
|
||||||
this.responseBodyName = 'SCBulkDoneResponse';
|
this.responseBodyName = 'SCBulkDoneResponse';
|
||||||
this.statusCodeSuccess = StatusCodes.NO_CONTENT;
|
this.statusCodeSuccess = StatusCodes.NO_CONTENT;
|
||||||
this.urlFragment = '/bulk/:UID/done';
|
this.urlPath = '/bulk/:UID/done';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,6 +99,6 @@ export class SCBulkRoute extends SCAbstractRoute {
|
|||||||
this.requestBodyName = 'SCBulkRequest';
|
this.requestBodyName = 'SCBulkRequest';
|
||||||
this.responseBodyName = 'SCBulkResponse';
|
this.responseBodyName = 'SCBulkResponse';
|
||||||
this.statusCodeSuccess = StatusCodes.OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/bulk';
|
this.urlPath = '/bulk';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ export class SCFeedbackRoute extends SCAbstractRoute {
|
|||||||
this.requestBodyName = 'SCFeedbackRequest';
|
this.requestBodyName = 'SCFeedbackRequest';
|
||||||
this.responseBodyName = 'SCFeedbackResponse';
|
this.responseBodyName = 'SCFeedbackResponse';
|
||||||
this.statusCodeSuccess = StatusCodes.OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/feedback';
|
this.urlPath = '/feedback';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
import {StatusCodes} from 'http-status-codes';
|
import {StatusCodes} from 'http-status-codes';
|
||||||
import {SCAppConfiguration} from '../../config/app';
|
import {SCAppConfiguration} from '../../config/app';
|
||||||
|
import {SCAuthorizationProvider, SCAuthorizationProviderType} from '../../config/authorization';
|
||||||
import {SCBackendConfiguration} from '../../config/backend';
|
import {SCBackendConfiguration} from '../../config/backend';
|
||||||
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
import {SCInternalServerErrorResponse} from '../errors/internal-server-error';
|
||||||
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
import {SCMethodNotAllowedErrorResponse} from '../errors/method-not-allowed';
|
||||||
@@ -42,6 +43,11 @@ export interface SCIndexResponse {
|
|||||||
*/
|
*/
|
||||||
app: SCAppConfiguration;
|
app: SCAppConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see SCAuthorizationProvider
|
||||||
|
*/
|
||||||
|
auth: { [key in SCAuthorizationProviderType]?: SCAuthorizationProvider; };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see SCBackendConfiguration
|
* @see SCBackendConfiguration
|
||||||
*/
|
*/
|
||||||
@@ -66,6 +72,6 @@ export class SCIndexRoute extends SCAbstractRoute {
|
|||||||
this.requestBodyName = 'SCIndexRequest';
|
this.requestBodyName = 'SCIndexRequest';
|
||||||
this.responseBodyName = 'SCIndexResponse';
|
this.responseBodyName = 'SCIndexResponse';
|
||||||
this.statusCodeSuccess = StatusCodes.OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/';
|
this.urlPath = '/';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -123,6 +123,6 @@ export class SCPluginRegisterRoute extends SCAbstractRoute {
|
|||||||
this.requestBodyName = 'SCPluginRegisterRequest';
|
this.requestBodyName = 'SCPluginRegisterRequest';
|
||||||
this.responseBodyName = 'SCPluginRegisterResponse';
|
this.responseBodyName = 'SCPluginRegisterResponse';
|
||||||
this.statusCodeSuccess = StatusCodes.OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/plugin/register';
|
this.urlPath = '/plugin/register';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,6 +64,6 @@ export class SCMultiSearchRoute extends SCAbstractRoute {
|
|||||||
this.requestBodyName = 'SCMultiSearchRequest';
|
this.requestBodyName = 'SCMultiSearchRequest';
|
||||||
this.responseBodyName = 'SCMultiSearchResponse';
|
this.responseBodyName = 'SCMultiSearchResponse';
|
||||||
this.statusCodeSuccess = StatusCodes.OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/search/multi';
|
this.urlPath = '/search/multi';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,6 +57,6 @@ export class SCSearchRoute extends SCAbstractRoute {
|
|||||||
this.requestBodyName = 'SCSearchRequest';
|
this.requestBodyName = 'SCSearchRequest';
|
||||||
this.responseBodyName = 'SCSearchResponse';
|
this.responseBodyName = 'SCSearchResponse';
|
||||||
this.statusCodeSuccess = StatusCodes.OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/search';
|
this.urlPath = '/search';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,6 +61,6 @@ export class SCThingUpdateRoute extends SCAbstractRoute {
|
|||||||
this.requestBodyName = 'SCThingUpdateRequest';
|
this.requestBodyName = 'SCThingUpdateRequest';
|
||||||
this.responseBodyName = 'SCThingUpdateResponse';
|
this.responseBodyName = 'SCThingUpdateResponse';
|
||||||
this.statusCodeSuccess = StatusCodes.OK;
|
this.statusCodeSuccess = StatusCodes.OK;
|
||||||
this.urlFragment = '/:TYPE/:UID';
|
this.urlPath = '/:TYPE/:UID';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,6 +71,13 @@ export interface SCCreativeWorkWithoutReferences
|
|||||||
*/
|
*/
|
||||||
keywords?: string[];
|
keywords?: string[];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Date (in text form) the creative work was most recently
|
||||||
|
*
|
||||||
|
* @keyword
|
||||||
|
*/
|
||||||
|
lastPublished?: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Translated fields of the creative work
|
* Translated fields of the creative work
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -16,13 +16,13 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"firstPublished": "2008",
|
"firstPublished": "2008",
|
||||||
"sameAs": "https://hds2test.hebis.de/ubffm/Record/HEB198305427",
|
"sameAs": "https://ubffm.hds.hebis.de/Record/HEB198305427",
|
||||||
"origin": {
|
"origin": {
|
||||||
"indexed": "2018-09-11T12:30:00Z",
|
"indexed": "2018-09-11T12:30:00Z",
|
||||||
"name": "HeBIS HDS",
|
"name": "HeBIS HDS",
|
||||||
"originalId": "HEB198305427",
|
"originalId": "HEB198305427",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"url": "https://hds2.hebis.de/ubffm/"
|
"url": "https://ubffm.hds.hebis.de"
|
||||||
},
|
},
|
||||||
"isPartOf": {
|
"isPartOf": {
|
||||||
"uid": "bc5e5399-a24c-5c01-9c1b-0c8b83272087",
|
"uid": "bc5e5399-a24c-5c01-9c1b-0c8b83272087",
|
||||||
|
|||||||
@@ -16,13 +16,13 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"firstPublished": "2002",
|
"firstPublished": "2002",
|
||||||
"sameAs": "https://hds2test.hebis.de/ubffm/Record/HEB107025590",
|
"sameAs": "https://ubffm.hds.hebis.de/Record/HEB107025590",
|
||||||
"origin": {
|
"origin": {
|
||||||
"indexed": "2018-09-11T12:30:00Z",
|
"indexed": "2018-09-11T12:30:00Z",
|
||||||
"name": "HeBIS HDS",
|
"name": "HeBIS HDS",
|
||||||
"originalId": "HEB107025590",
|
"originalId": "HEB107025590",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"url": "https://hds2.hebis.de/ubffm/"
|
"url": "https://ubffm.hds.hebis.de"
|
||||||
},
|
},
|
||||||
"isPartOf": {
|
"isPartOf": {
|
||||||
"uid": "f84c1851-042e-542f-ba7a-158b32dfb82f",
|
"uid": "f84c1851-042e-542f-ba7a-158b32dfb82f",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"firstPublished": "[ca. 1991]",
|
"firstPublished": "[ca. 1991]",
|
||||||
|
"lastPublished": "2000 Q1",
|
||||||
"publications": [
|
"publications": [
|
||||||
{
|
{
|
||||||
"uid": "603a6574-8910-588a-9e83-cd26e6988c74",
|
"uid": "603a6574-8910-588a-9e83-cd26e6988c74",
|
||||||
@@ -27,13 +28,13 @@
|
|||||||
"name": "VDI"
|
"name": "VDI"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"sameAs": "https://hds2test.hebis.de/ubffm/Record/HEB022992618",
|
"sameAs": "https://ubffm.hds.hebis.de/Record/HEB022992618",
|
||||||
"origin": {
|
"origin": {
|
||||||
"indexed": "2018-09-11T12:30:00Z",
|
"indexed": "2018-09-11T12:30:00Z",
|
||||||
"name": "HeBIS HDS",
|
"name": "HeBIS HDS",
|
||||||
"originalId": "HEB022992618",
|
"originalId": "HEB022992618",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"url": "https://hds2.hebis.de/ubffm/"
|
"url": "https://ubffm.hds.hebis.de"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"schema": "SCBook"
|
"schema": "SCBook"
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
"name": "Belles Lettres"
|
"name": "Belles Lettres"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"sameAs": "https://hds2test.hebis.de/ubffm/Record/HEB102248788",
|
"sameAs": "https://ubffm.hds.hebis.de/Record/HEB102248788",
|
||||||
"ISBNs": [
|
"ISBNs": [
|
||||||
"2251760385"
|
"2251760385"
|
||||||
],
|
],
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
"name": "HeBIS HDS",
|
"name": "HeBIS HDS",
|
||||||
"originalId": "HEB102248788",
|
"originalId": "HEB102248788",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"url": "https://hds2.hebis.de/ubffm/"
|
"url": "https://ubffm.hds.hebis.de"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"schema": "SCBook"
|
"schema": "SCBook"
|
||||||
|
|||||||
@@ -22,13 +22,13 @@
|
|||||||
"ISSNs": [
|
"ISSNs": [
|
||||||
"0024-6085"
|
"0024-6085"
|
||||||
],
|
],
|
||||||
"sameAs": "https://hds2test.hebis.de/ubffm/Record/HEB046847146",
|
"sameAs": "https://ubffm.hds.hebis.de/Record/HEB046847146",
|
||||||
"origin": {
|
"origin": {
|
||||||
"indexed": "2018-09-11T12:30:00Z",
|
"indexed": "2018-09-11T12:30:00Z",
|
||||||
"name": "HeBIS HDS",
|
"name": "HeBIS HDS",
|
||||||
"originalId": "HEB046847146",
|
"originalId": "HEB046847146",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"url": "https://hds2.hebis.de/ubffm/"
|
"url": "https://ubffm.hds.hebis.de"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"schema": "SCPeriodical"
|
"schema": "SCPeriodical"
|
||||||
|
|||||||
@@ -19,13 +19,13 @@
|
|||||||
"name": "Frankfurter Allg. Zeitung"
|
"name": "Frankfurter Allg. Zeitung"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"sameAs": "https://hds2test.hebis.de/ubffm/Record/HEB048624853",
|
"sameAs": "https://ubffm.hds.hebis.de/Record/HEB048624853",
|
||||||
"origin": {
|
"origin": {
|
||||||
"indexed": "2018-09-11T12:30:00Z",
|
"indexed": "2018-09-11T12:30:00Z",
|
||||||
"name": "HeBIS HDS",
|
"name": "HeBIS HDS",
|
||||||
"originalId": "HEB048624853",
|
"originalId": "HEB048624853",
|
||||||
"type": "remote",
|
"type": "remote",
|
||||||
"url": "https://hds2.hebis.de/ubffm/"
|
"url": "https://ubffm.hds.hebis.de"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"schema": "SCPeriodical"
|
"schema": "SCPeriodical"
|
||||||
|
|||||||
@@ -21,26 +21,26 @@ import {SCThingUpdateRoute} from '../src/protocol/routes/thing-update';
|
|||||||
@suite(timeout(10000), slow(5000))
|
@suite(timeout(10000), slow(5000))
|
||||||
export class RoutesSpec {
|
export class RoutesSpec {
|
||||||
@test
|
@test
|
||||||
public bulkAddRouteUrlFragment() {
|
public bulkAddRouteUrlPath() {
|
||||||
const bulkAddRoute = new SCBulkAddRoute();
|
const bulkAddRoute = new SCBulkAddRoute();
|
||||||
|
|
||||||
expect(bulkAddRoute.getUrlFragment({
|
expect(bulkAddRoute.getUrlPath({
|
||||||
UID: '540862f3-ea30-5b8f-8678-56b4dc217140',
|
UID: '540862f3-ea30-5b8f-8678-56b4dc217140',
|
||||||
})).to.equal('/bulk/540862f3-ea30-5b8f-8678-56b4dc217140');
|
})).to.equal('/bulk/540862f3-ea30-5b8f-8678-56b4dc217140');
|
||||||
}
|
}
|
||||||
|
|
||||||
@test
|
@test
|
||||||
public bulkRouteUrlFragment() {
|
public bulkRouteUrlPath() {
|
||||||
const bulkRoute = new SCBulkRoute();
|
const bulkRoute = new SCBulkRoute();
|
||||||
|
|
||||||
expect(bulkRoute.getUrlFragment()).to.equal('/bulk');
|
expect(bulkRoute.getUrlPath()).to.equal('/bulk');
|
||||||
}
|
}
|
||||||
|
|
||||||
@test
|
@test
|
||||||
public thingUpdateRouteUrlFragment() {
|
public thingUpdateRouteUrlPath() {
|
||||||
const thingUpdateRoute = new SCThingUpdateRoute();
|
const thingUpdateRoute = new SCThingUpdateRoute();
|
||||||
|
|
||||||
expect(thingUpdateRoute.getUrlFragment({
|
expect(thingUpdateRoute.getUrlPath({
|
||||||
TYPE: 'dish',
|
TYPE: 'dish',
|
||||||
UID: '540862f3-ea30-5b8f-8678-56b4dc217140',
|
UID: '540862f3-ea30-5b8f-8678-56b4dc217140',
|
||||||
})).to.equal('/dish/540862f3-ea30-5b8f-8678-56b4dc217140');
|
})).to.equal('/dish/540862f3-ea30-5b8f-8678-56b4dc217140');
|
||||||
@@ -51,7 +51,7 @@ export class RoutesSpec {
|
|||||||
const thingUpdateRoute = new SCThingUpdateRoute();
|
const thingUpdateRoute = new SCThingUpdateRoute();
|
||||||
|
|
||||||
const fn = () => {
|
const fn = () => {
|
||||||
thingUpdateRoute.getUrlFragment({
|
thingUpdateRoute.getUrlPath({
|
||||||
FOO: 'bar',
|
FOO: 'bar',
|
||||||
TYPE: 'dish',
|
TYPE: 'dish',
|
||||||
UID: '540862f3-ea30-5b8f-8678-56b4dc217140',
|
UID: '540862f3-ea30-5b8f-8678-56b4dc217140',
|
||||||
@@ -66,7 +66,7 @@ export class RoutesSpec {
|
|||||||
const thingUpdateRoute = new SCThingUpdateRoute();
|
const thingUpdateRoute = new SCThingUpdateRoute();
|
||||||
|
|
||||||
const fn = () => {
|
const fn = () => {
|
||||||
thingUpdateRoute.getUrlFragment({
|
thingUpdateRoute.getUrlPath({
|
||||||
TYPO: 'dish',
|
TYPO: 'dish',
|
||||||
UID: '540862f3-ea30-5b8f-8678-56b4dc217140',
|
UID: '540862f3-ea30-5b8f-8678-56b4dc217140',
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user