- added new class CollectionRole.ts
All checks were successful
CI Pipeline / japa-tests (push) Successful in 50s
All checks were successful
CI Pipeline / japa-tests (push) Successful in 50s
- added relation 'collectionRole' to Collection.ts class - added 'ListSets' and =GetRecord request for OaiController.ts - npm updates - added utility-functions.ts
This commit is contained in:
parent
ebb24cc75c
commit
2a7480d2ed
|
@ -85,7 +85,7 @@ RUN npm ci --omit=dev
|
||||||
# Copy files to the working directory from the build folder the user
|
# Copy files to the working directory from the build folder the user
|
||||||
COPY --chown=node:node --from=build /home/node/app/build .
|
COPY --chown=node:node --from=build /home/node/app/build .
|
||||||
# Expose port
|
# Expose port
|
||||||
EXPOSE $PORT
|
EXPOSE 3333
|
||||||
ENTRYPOINT ["/home/node/app/docker-entrypoint.sh"]
|
ENTRYPOINT ["/home/node/app/docker-entrypoint.sh"]
|
||||||
# Run the command to start the server using "dumb-init"
|
# Run the command to start the server using "dumb-init"
|
||||||
CMD [ "dumb-init", "node", "server.js" ]
|
CMD [ "dumb-init", "node", "server.js" ]
|
|
@ -10,7 +10,11 @@ import { StatusCodes } from 'http-status-codes';
|
||||||
import { transform } from 'saxon-js';
|
import { transform } from 'saxon-js';
|
||||||
// import { Xslt, xmlParse } from 'xslt-processor'
|
// import { Xslt, xmlParse } from 'xslt-processor'
|
||||||
import { OaiErrorCodes, OaiModelError } from 'App/Exceptions/OaiErrorCodes';
|
import { OaiErrorCodes, OaiModelError } from 'App/Exceptions/OaiErrorCodes';
|
||||||
import { OaiModelException } from 'App/Exceptions/OaiModelException';
|
import { OaiModelException, BadOaiModelException } from 'App/Exceptions/OaiModelException';
|
||||||
|
import Dataset from 'App/Models/Dataset';
|
||||||
|
import Collection from 'App/Models/Collection';
|
||||||
|
import { getDomain } from 'App/Utils/utility-functions';
|
||||||
|
import XmlModel from 'App/Library/XmlModel';
|
||||||
|
|
||||||
interface XslTParameter {
|
interface XslTParameter {
|
||||||
[key: string]: any;
|
[key: string]: any;
|
||||||
|
@ -21,9 +25,12 @@ interface Dictionary {
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class OaiController {
|
export default class OaiController {
|
||||||
// private deliveringDocumentStates = ["published", "deleted"];
|
private deliveringDocumentStates = ['published', 'deleted'];
|
||||||
// private sampleRegEx = /^[A-Za-zäüÄÜß0-9\-_.!~]+$/;
|
// private sampleRegEx = /^[A-Za-zäüÄÜß0-9\-_.!~]+$/;
|
||||||
private xsltParameter: XslTParameter;
|
private xsltParameter: XslTParameter;
|
||||||
|
// private configuration: Configuration;
|
||||||
|
// private tokenWorker: TokenWorker;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Holds xml representation of document information to be processed.
|
* Holds xml representation of document information to be processed.
|
||||||
*
|
*
|
||||||
|
@ -61,7 +68,7 @@ export default class OaiController {
|
||||||
}
|
}
|
||||||
// const oaiRequest: OaiParameter = request.body;
|
// const oaiRequest: OaiParameter = request.body;
|
||||||
try {
|
try {
|
||||||
this.handleRequest(oaiRequest, request);
|
await this.handleRequest(oaiRequest, request);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
if (error instanceof OaiModelException) {
|
if (error instanceof OaiModelException) {
|
||||||
const code = error.oaiCode;
|
const code = error.oaiCode;
|
||||||
|
@ -106,7 +113,7 @@ export default class OaiController {
|
||||||
response.status(StatusCodes.OK).send(xmlOutput);
|
response.status(StatusCodes.OK).send(xmlOutput);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected handleRequest(oaiRequest: Dictionary, request: RequestContract) {
|
protected async handleRequest(oaiRequest: Dictionary, request: RequestContract) {
|
||||||
// Setup stylesheet
|
// Setup stylesheet
|
||||||
// $this->loadStyleSheet('datasetxml2oai-pmh.xslt');
|
// $this->loadStyleSheet('datasetxml2oai-pmh.xslt');
|
||||||
|
|
||||||
|
@ -130,17 +137,17 @@ export default class OaiController {
|
||||||
this.handleIdentify();
|
this.handleIdentify();
|
||||||
} else if (verb === 'ListMetadataFormats') {
|
} else if (verb === 'ListMetadataFormats') {
|
||||||
this.handleListMetadataFormats();
|
this.handleListMetadataFormats();
|
||||||
|
} else if (verb == 'GetRecord') {
|
||||||
|
await this.handleGetRecord(oaiRequest);
|
||||||
}
|
}
|
||||||
// else if (verb == "GetRecord") {
|
// else if (verb == "ListRecords") {
|
||||||
// await this.handleGetRecord(oaiRequest);
|
|
||||||
// } else if (verb == "ListRecords") {
|
|
||||||
// await this.handleListRecords(oaiRequest);
|
// await this.handleListRecords(oaiRequest);
|
||||||
// } else if (verb == "ListIdentifiers") {
|
// } else if (verb == "ListIdentifiers") {
|
||||||
// await this.handleListIdentifiers(oaiRequest);
|
// await this.handleListIdentifiers(oaiRequest);
|
||||||
// } else if (verb == "ListSets") {
|
|
||||||
// await this.handleListSets();
|
|
||||||
// }
|
// }
|
||||||
else {
|
else if (verb == 'ListSets') {
|
||||||
|
await this.handleListSets();
|
||||||
|
} else {
|
||||||
this.handleIllegalVerb();
|
this.handleIllegalVerb();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -182,6 +189,206 @@ export default class OaiController {
|
||||||
this.xml.root().ele('Datasets');
|
this.xml.root().ele('Datasets');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected async handleListSets() {
|
||||||
|
const repIdentifier = 'tethys.at';
|
||||||
|
this.xsltParameter['repIdentifier'] = repIdentifier;
|
||||||
|
const datasetElement = this.xml.root().ele('Datasets');
|
||||||
|
|
||||||
|
const sets: { [key: string]: string } = {
|
||||||
|
'open_access': 'Set for open access licenses',
|
||||||
|
'doc-type:ResearchData': 'Set for document type ResearchData',
|
||||||
|
// ...(await this.getSetsForDatasetTypes()),
|
||||||
|
...(await this.getSetsForCollections()),
|
||||||
|
// ... await this.getSetsForProjects(),
|
||||||
|
} as Dictionary;
|
||||||
|
|
||||||
|
for (const [key, value] of Object.entries(sets)) {
|
||||||
|
const setElement = datasetElement.ele('Rdr_Sets');
|
||||||
|
setElement.att('Type', key);
|
||||||
|
setElement.att('TypeName', value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async handleGetRecord(oaiRequest: Dictionary) {
|
||||||
|
const repIdentifier = 'tethys.at';
|
||||||
|
this.xsltParameter['repIdentifier'] = repIdentifier;
|
||||||
|
|
||||||
|
const dataId = this.validateAndGetIdentifier(oaiRequest);
|
||||||
|
const dataset = await Dataset.query().where('publish_id', dataId).preload('xmlCache').preload('collections').first();
|
||||||
|
|
||||||
|
if (!dataset || !dataset.publish_id) {
|
||||||
|
throw new OaiModelException(
|
||||||
|
StatusCodes.INTERNAL_SERVER_ERROR,
|
||||||
|
'The value of the identifier argument is unknown or illegal in this repository.',
|
||||||
|
OaiErrorCodes.IDDOESNOTEXIST,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const metadataPrefix = this.validateAndGetMetadataPrefix(oaiRequest);
|
||||||
|
this.xsltParameter['oai_metadataPrefix'] = metadataPrefix;
|
||||||
|
// do not deliver datasets which are restricted by document state defined in deliveringStates
|
||||||
|
this.validateDatasetState(dataset);
|
||||||
|
|
||||||
|
// add xml elements
|
||||||
|
const datasetNode = this.xml.root().ele('Datasets');
|
||||||
|
await this.createXmlRecord(dataset, datasetNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
private validateAndGetIdentifier(oaiRequest: Dictionary): number {
|
||||||
|
// Identifier references metadata Urn, not plain Id!
|
||||||
|
// Currently implemented as 'oai:foo.bar.de:{docId}' or 'urn:nbn...-123'
|
||||||
|
if (!('identifier' in oaiRequest)) {
|
||||||
|
throw new BadOaiModelException('The prefix of the identifier argument is unknown.');
|
||||||
|
}
|
||||||
|
const dataId = Number(this.getDocumentIdByIdentifier(oaiRequest.identifier));
|
||||||
|
if (isNaN(dataId)) {
|
||||||
|
throw new OaiModelException(
|
||||||
|
StatusCodes.INTERNAL_SERVER_ERROR,
|
||||||
|
'The value of the identifier argument is illegal in this repository.',
|
||||||
|
OaiErrorCodes.BADARGUMENT,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return dataId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private validateAndGetMetadataPrefix(oaiRequest: Dictionary): string {
|
||||||
|
let metadataPrefix = '';
|
||||||
|
if ('metadataPrefix' in oaiRequest) {
|
||||||
|
metadataPrefix = oaiRequest['metadataPrefix'];
|
||||||
|
} else {
|
||||||
|
throw new OaiModelException(
|
||||||
|
StatusCodes.INTERNAL_SERVER_ERROR,
|
||||||
|
'The prefix of the metadata argument is unknown.',
|
||||||
|
OaiErrorCodes.BADARGUMENT,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return metadataPrefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
private validateDatasetState(dataset: Dataset): void {
|
||||||
|
if (dataset.server_state == null || !this.deliveringDocumentStates.includes(dataset.server_state)) {
|
||||||
|
throw new OaiModelException(
|
||||||
|
StatusCodes.INTERNAL_SERVER_ERROR,
|
||||||
|
'Document is not available for OAI export!',
|
||||||
|
OaiErrorCodes.NORECORDSMATCH,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async createXmlRecord(dataset: Dataset, datasetNode: XMLBuilder) {
|
||||||
|
const domNode = await this.getDatasetXmlDomNode(dataset);
|
||||||
|
|
||||||
|
if (domNode) {
|
||||||
|
// add frontdoor url and data-type
|
||||||
|
dataset.publish_id && this.addLandingPageAttribute(domNode, dataset.publish_id.toString());
|
||||||
|
this.addSpecInformation(domNode, 'data-type:' + dataset.type);
|
||||||
|
|
||||||
|
// if (dataset.collections) {
|
||||||
|
// for (const coll of dataset.collections) {
|
||||||
|
// const collRole = await coll.getCollectionRole();
|
||||||
|
// this.addSpecInformation(domNode, collRole.oai_name + ':' + coll.number);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
datasetNode.import(domNode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async getDatasetXmlDomNode(dataset: Dataset) {
|
||||||
|
const xmlModel = new XmlModel(dataset);
|
||||||
|
// xmlModel.setModel(dataset);
|
||||||
|
xmlModel.excludeEmptyFields();
|
||||||
|
xmlModel.caching = true;
|
||||||
|
// const cache = dataset.xmlCache ? dataset.xmlCache : null;
|
||||||
|
// dataset.load('xmlCache');
|
||||||
|
if (dataset.xmlCache) {
|
||||||
|
xmlModel.xmlCache = dataset.xmlCache;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return cache.getDomDocument();
|
||||||
|
const domDocument: XMLBuilder | null = await xmlModel.getDomDocument();
|
||||||
|
return domDocument;
|
||||||
|
}
|
||||||
|
|
||||||
|
private addSpecInformation(domNode: XMLBuilder, information: string) {
|
||||||
|
domNode.ele('SetSpec').att('Value', information);
|
||||||
|
}
|
||||||
|
|
||||||
|
private addLandingPageAttribute(domNode: XMLBuilder, dataid: string) {
|
||||||
|
const baseDomain = process.env.BASE_DOMAIN || 'localhost';
|
||||||
|
const url = 'https://' + getDomain(baseDomain) + '/dataset/' + dataid;
|
||||||
|
// add attribute du dataset xml element
|
||||||
|
domNode.att('landingpage', url);
|
||||||
|
}
|
||||||
|
|
||||||
|
private getDocumentIdByIdentifier(oaiIdentifier: string): string {
|
||||||
|
const identifierParts: string[] = oaiIdentifier.split(':'); // explode(":", $oaiIdentifier);
|
||||||
|
const dataId: string = identifierParts[2];
|
||||||
|
// switch (identifierParts[0]) {
|
||||||
|
// case 'oai':
|
||||||
|
// if (isset($identifierParts[2])) {
|
||||||
|
// $dataId = $identifierParts[2];
|
||||||
|
// }
|
||||||
|
// break;
|
||||||
|
// default:
|
||||||
|
// throw new OaiModelException(
|
||||||
|
// 'The prefix of the identifier argument is unknown.',
|
||||||
|
// OaiModelError::BADARGUMENT
|
||||||
|
// );
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (empty($dataId) or !preg_match('/^\d+$/', $dataId)) {
|
||||||
|
// throw new OaiModelException(
|
||||||
|
// 'The value of the identifier argument is unknown or illegal in this repository.',
|
||||||
|
// OaiModelError::IDDOESNOTEXIST
|
||||||
|
// );
|
||||||
|
|
||||||
|
return dataId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async getSetsForCollections(): Promise<Dictionary> {
|
||||||
|
const sets: { [key: string]: string } = {} as Dictionary;
|
||||||
|
|
||||||
|
const collections = await Collection.query()
|
||||||
|
.select('name', 'number', 'role_id')
|
||||||
|
.whereHas('collectionRole', (query) => {
|
||||||
|
query.where('visible_oai', true);
|
||||||
|
})
|
||||||
|
.preload('collectionRole');
|
||||||
|
|
||||||
|
collections.forEach((collection) => {
|
||||||
|
// if collection has a collection role (classification like ddc):
|
||||||
|
if (collection.number) {
|
||||||
|
// collection.load('collectionRole');
|
||||||
|
const setSpec = collection.collectionRole?.oai_name + ':' + collection.number;
|
||||||
|
sets[setSpec] = `Set ${collection.number} '${collection.name}'`;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return sets;
|
||||||
|
}
|
||||||
|
|
||||||
|
// private async getSetsForDatasetTypes(): Promise<IDictionary> {
|
||||||
|
// const sets: { [key: string]: string } = {} as IDictionary;
|
||||||
|
|
||||||
|
// const datasets: Array<Dataset> = await Dataset.findAll({
|
||||||
|
// attributes: ["type"],
|
||||||
|
// where: { server_state: { [Sequelize.Op.eq]: "published" } },
|
||||||
|
// });
|
||||||
|
// datasets.forEach((dataset) => {
|
||||||
|
// if (dataset.type && false == preg_match(this.sampleRegEx, dataset.type)) {
|
||||||
|
// const msg = `Invalid SetSpec (data-type='${dataset.type}').
|
||||||
|
// Allowed characters are [${this.sampleRegEx}].`;
|
||||||
|
// Logger.err(`OAI: ${msg}`);
|
||||||
|
// // Log::error("OAI-PMH: $msg");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// const setSpec = "data-type:" + dataset.type;
|
||||||
|
// sets[setSpec] = `Set for document type '${dataset.type}'`;
|
||||||
|
// });
|
||||||
|
// return sets;
|
||||||
|
// }
|
||||||
|
|
||||||
private handleIllegalVerb() {
|
private handleIllegalVerb() {
|
||||||
this.xsltParameter['oai_error_code'] = 'badVerb';
|
this.xsltParameter['oai_error_code'] = 'badVerb';
|
||||||
this.xsltParameter['oai_error_message'] = 'The verb provided in the request is illegal.';
|
this.xsltParameter['oai_error_message'] = 'The verb provided in the request is illegal.';
|
||||||
|
|
|
@ -33,8 +33,8 @@ import ClamScan from 'clamscan';
|
||||||
import { ValidationException } from '@ioc:Adonis/Core/Validator';
|
import { ValidationException } from '@ioc:Adonis/Core/Validator';
|
||||||
import Drive from '@ioc:Adonis/Core/Drive';
|
import Drive from '@ioc:Adonis/Core/Drive';
|
||||||
import { Exception } from '@adonisjs/core/build/standalone';
|
import { Exception } from '@adonisjs/core/build/standalone';
|
||||||
import XmlModel from 'App/Library/XmlModel';
|
// import XmlModel from 'App/Library/XmlModel';
|
||||||
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces';
|
// import { XMLBuilder } from 'xmlbuilder2/lib/interfaces';
|
||||||
|
|
||||||
export default class DatasetController {
|
export default class DatasetController {
|
||||||
public async index({ auth, request, inertia }: HttpContextContract) {
|
public async index({ auth, request, inertia }: HttpContextContract) {
|
||||||
|
@ -579,23 +579,6 @@ export default class DatasetController {
|
||||||
'files.extnames': 'file extension is not supported',
|
'files.extnames': 'file extension is not supported',
|
||||||
};
|
};
|
||||||
|
|
||||||
private async getDatasetXmlDomNode(dataset: Dataset) {
|
|
||||||
// dataset.fetchValues();
|
|
||||||
const xmlModel = new XmlModel(dataset);
|
|
||||||
// xmlModel.setModel(dataset);
|
|
||||||
xmlModel.excludeEmptyFields();
|
|
||||||
xmlModel.caching = true;
|
|
||||||
// const cache = dataset.xmlCache ? dataset.xmlCache : null;
|
|
||||||
// dataset.load('xmlCache');
|
|
||||||
if (dataset.xmlCache) {
|
|
||||||
xmlModel.xmlCache = dataset.xmlCache;
|
|
||||||
}
|
|
||||||
|
|
||||||
// return cache.getDomDocument();
|
|
||||||
const domDocument: XMLBuilder | null = await xmlModel.getDomDocument();
|
|
||||||
return domDocument;
|
|
||||||
}
|
|
||||||
|
|
||||||
// public async release({ params, view }) {
|
// public async release({ params, view }) {
|
||||||
public async release({ request, inertia, response }: HttpContextContract) {
|
public async release({ request, inertia, response }: HttpContextContract) {
|
||||||
const id = request.param('id');
|
const id = request.param('id');
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { column, SnakeCaseNamingStrategy, manyToMany, ManyToMany } from '@ioc:Adonis/Lucid/Orm';
|
import { column, SnakeCaseNamingStrategy, manyToMany, ManyToMany, belongsTo, BelongsTo } from '@ioc:Adonis/Lucid/Orm';
|
||||||
import Dataset from './Dataset';
|
import Dataset from './Dataset';
|
||||||
import BaseModel from './BaseModel';
|
import BaseModel from './BaseModel';
|
||||||
|
import CollectionRole from './CollectionRole';
|
||||||
|
|
||||||
export default class Collection extends BaseModel {
|
export default class Collection extends BaseModel {
|
||||||
public static namingStrategy = new SnakeCaseNamingStrategy();
|
public static namingStrategy = new SnakeCaseNamingStrategy();
|
||||||
|
@ -43,4 +44,10 @@ export default class Collection extends BaseModel {
|
||||||
pivotTable: 'link_documents_collections',
|
pivotTable: 'link_documents_collections',
|
||||||
})
|
})
|
||||||
public datasets: ManyToMany<typeof Dataset>;
|
public datasets: ManyToMany<typeof Dataset>;
|
||||||
|
|
||||||
|
@belongsTo(() => CollectionRole, {
|
||||||
|
foreignKey: 'role_id',
|
||||||
|
})
|
||||||
|
public collectionRole: BelongsTo<typeof CollectionRole>;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
38
app/Models/CollectionRole.ts
Normal file
38
app/Models/CollectionRole.ts
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
import { column, SnakeCaseNamingStrategy, hasMany, HasMany } from '@ioc:Adonis/Lucid/Orm';
|
||||||
|
import BaseModel from './BaseModel';
|
||||||
|
import Collection from './Collection';
|
||||||
|
|
||||||
|
export default class CollectionRole extends BaseModel {
|
||||||
|
public static namingStrategy = new SnakeCaseNamingStrategy();
|
||||||
|
public static primaryKey = 'id';
|
||||||
|
public static table = 'collections_roles';
|
||||||
|
public static fillable: string[] = ['name', 'oai_name', 'visible'];
|
||||||
|
|
||||||
|
@column({
|
||||||
|
isPrimary: true,
|
||||||
|
})
|
||||||
|
public id: number;
|
||||||
|
|
||||||
|
@column({})
|
||||||
|
public name: string;
|
||||||
|
|
||||||
|
@column({})
|
||||||
|
public oai_name?: string;
|
||||||
|
|
||||||
|
@column({})
|
||||||
|
public position: number;
|
||||||
|
|
||||||
|
@column({})
|
||||||
|
public visible: boolean;
|
||||||
|
|
||||||
|
@column({})
|
||||||
|
public visible_frontdoor: boolean;
|
||||||
|
|
||||||
|
@column({})
|
||||||
|
public visible_oai: boolean;
|
||||||
|
|
||||||
|
@hasMany(() => Collection, {
|
||||||
|
foreignKey: 'role_id',
|
||||||
|
})
|
||||||
|
public collections: HasMany<typeof Collection>;
|
||||||
|
}
|
|
@ -3,7 +3,6 @@ import Dataset from './Dataset';
|
||||||
import { builder, create } from 'xmlbuilder2';
|
import { builder, create } from 'xmlbuilder2';
|
||||||
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces';
|
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces';
|
||||||
import Database from '@ioc:Adonis/Lucid/Database';
|
import Database from '@ioc:Adonis/Lucid/Database';
|
||||||
import dayjs from 'dayjs';
|
|
||||||
import { DateTime } from 'luxon';
|
import { DateTime } from 'luxon';
|
||||||
|
|
||||||
export default class DocumentXmlCache extends BaseModel {
|
export default class DocumentXmlCache extends BaseModel {
|
||||||
|
|
21
app/Utils/utility-functions.ts
Normal file
21
app/Utils/utility-functions.ts
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
export function sum(a: number, b: number): number {
|
||||||
|
return a + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getDomain(host: string): string {
|
||||||
|
// $myhost = strtolower(trim($host));
|
||||||
|
let myHost: string = host.trim().toLocaleLowerCase();
|
||||||
|
// $count = substr_count($myhost, '.');
|
||||||
|
const count: number = myHost.split(',').length - 1;
|
||||||
|
|
||||||
|
if (count == 2) {
|
||||||
|
const words = myHost.split('.');
|
||||||
|
if (words[1].length > 3) {
|
||||||
|
myHost = myHost.split('.', 2)[1];
|
||||||
|
}
|
||||||
|
} else if (count > 2) {
|
||||||
|
myHost = getDomain(myHost.split('.', 2)[1]);
|
||||||
|
}
|
||||||
|
myHost = myHost.replace(new RegExp(/^.*:\/\//i, 'g'), '');
|
||||||
|
return myHost;
|
||||||
|
}
|
119
package-lock.json
generated
119
package-lock.json
generated
|
@ -2677,9 +2677,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@eslint-community/regexpp": {
|
"node_modules/@eslint-community/regexpp": {
|
||||||
"version": "4.8.2",
|
"version": "4.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.2.tgz",
|
"resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.0.tgz",
|
||||||
"integrity": "sha512-0MGxAVt1m/ZK+LTJp/j0qF7Hz97D9O/FH9Ms3ltnyIdDD57cbb1ACIQTkbHvNXtWDv5TPq7w5Kq56+cNukbo7g==",
|
"integrity": "sha512-zJmuCWj2VLBt4c25CfBIbMZLGLyhkvs7LznyVX5HfpzeocThgIj5XQK4L+g3U36mMcx8bPMhGyPpwCATamC4jQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
|
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
|
||||||
|
@ -2832,9 +2832,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@inertiajs/core/node_modules/axios": {
|
"node_modules/@inertiajs/core/node_modules/axios": {
|
||||||
"version": "1.5.0",
|
"version": "1.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz",
|
||||||
"integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
|
"integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"follow-redirects": "^1.15.0",
|
"follow-redirects": "^1.15.0",
|
||||||
"form-data": "^4.0.0",
|
"form-data": "^4.0.0",
|
||||||
|
@ -3966,9 +3966,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/istanbul-lib-report": {
|
"node_modules/@types/istanbul-lib-report": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
|
||||||
"integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
|
"integrity": "sha512-gPQuzaPR5h/djlAv2apEG1HVOyj1IUs7GpfMZixU0/0KXT3pm64ylHuMUI1/Akh+sq/iikxg6Z2j+fcMDXaaTQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/istanbul-lib-coverage": "*"
|
"@types/istanbul-lib-coverage": "*"
|
||||||
|
@ -4026,14 +4026,14 @@
|
||||||
"integrity": "sha512-l5cpE57br4BIjK+9BSkFBOsWtwv6J9bJpC7gdXIzZyI0vuKvNTk0wZZrkQxMGsUAuGW9+WMNWF2IJMD7br2yeQ=="
|
"integrity": "sha512-l5cpE57br4BIjK+9BSkFBOsWtwv6J9bJpC7gdXIzZyI0vuKvNTk0wZZrkQxMGsUAuGW9+WMNWF2IJMD7br2yeQ=="
|
||||||
},
|
},
|
||||||
"node_modules/@types/md5": {
|
"node_modules/@types/md5": {
|
||||||
"version": "2.3.2",
|
"version": "2.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.3.3.tgz",
|
||||||
"integrity": "sha512-v+JFDu96+UYJ3/UWzB0mEglIS//MZXgRaJ4ubUPwOM0gvLc/kcQ3TWNYwENEK7/EcXGQVrW8h/XqednSjBd/Og=="
|
"integrity": "sha512-4K40FjTW0tiIx9NfV+/DHJ56ih3fcdkDqBYz5CffKwJVWYho1FxzjkddGcgEEIs+fP2DqmQ3lujC5c4bUOESTQ=="
|
||||||
},
|
},
|
||||||
"node_modules/@types/mime": {
|
"node_modules/@types/mime": {
|
||||||
"version": "1.3.2",
|
"version": "1.3.3",
|
||||||
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz",
|
||||||
"integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==",
|
"integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/minimatch": {
|
"node_modules/@types/minimatch": {
|
||||||
|
@ -4043,9 +4043,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/node": {
|
"node_modules/@types/node": {
|
||||||
"version": "20.7.0",
|
"version": "20.7.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.1.tgz",
|
||||||
"integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg=="
|
"integrity": "sha512-LT+OIXpp2kj4E2S/p91BMe+VgGX2+lfO+XTpfXhh+bCk2LkQtHZSub8ewFBMGP5ClysPjTDFa4sMI8Q3n4T0wg=="
|
||||||
},
|
},
|
||||||
"node_modules/@types/pino": {
|
"node_modules/@types/pino": {
|
||||||
"version": "6.3.12",
|
"version": "6.3.12",
|
||||||
|
@ -4092,9 +4092,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/range-parser": {
|
"node_modules/@types/range-parser": {
|
||||||
"version": "1.2.4",
|
"version": "1.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz",
|
"resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz",
|
||||||
"integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==",
|
"integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/@types/retry": {
|
"node_modules/@types/retry": {
|
||||||
|
@ -4168,9 +4168,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/validator": {
|
"node_modules/@types/validator": {
|
||||||
"version": "13.11.1",
|
"version": "13.11.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.2.tgz",
|
||||||
"integrity": "sha512-d/MUkJYdOeKycmm75Arql4M5+UuXmf4cHdHKsyw1GcvnNgL6s77UkgSgJ8TE/rI5PYsnwYq5jkcWBLuN/MpQ1A=="
|
"integrity": "sha512-nIKVVQKT6kGKysnNt+xLobr+pFJNssJRi2s034wgWeFBUx01fI8BeHTW2TcRp7VcFu9QCYG8IlChTuovcm0oKQ=="
|
||||||
},
|
},
|
||||||
"node_modules/@types/ws": {
|
"node_modules/@types/ws": {
|
||||||
"version": "8.5.6",
|
"version": "8.5.6",
|
||||||
|
@ -5868,9 +5868,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/browserslist": {
|
"node_modules/browserslist": {
|
||||||
"version": "4.21.11",
|
"version": "4.22.1",
|
||||||
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz",
|
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
|
||||||
"integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==",
|
"integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -5887,8 +5887,8 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"caniuse-lite": "^1.0.30001538",
|
"caniuse-lite": "^1.0.30001541",
|
||||||
"electron-to-chromium": "^1.4.526",
|
"electron-to-chromium": "^1.4.535",
|
||||||
"node-releases": "^2.0.13",
|
"node-releases": "^2.0.13",
|
||||||
"update-browserslist-db": "^1.0.13"
|
"update-browserslist-db": "^1.0.13"
|
||||||
},
|
},
|
||||||
|
@ -6085,9 +6085,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001539",
|
"version": "1.0.30001541",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001539.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001541.tgz",
|
||||||
"integrity": "sha512-hfS5tE8bnNiNvEOEkm8HElUHroYwlqMMENEzELymy77+tJ6m+gA2krtHl5hxJaj71OlpC2cHZbdSMX1/YEqEkA==",
|
"integrity": "sha512-bLOsqxDgTqUBkzxbNlSBt8annkDpQB9NdzdTbO2ooJ+eC/IQcvDspDc058g84ejCelF7vHUx57KIOjEecOHXaw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
@ -6128,18 +6128,18 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/chai": {
|
"node_modules/chai": {
|
||||||
"version": "4.3.8",
|
"version": "4.3.10",
|
||||||
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz",
|
"resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz",
|
||||||
"integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==",
|
"integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"assertion-error": "^1.1.0",
|
"assertion-error": "^1.1.0",
|
||||||
"check-error": "^1.0.2",
|
"check-error": "^1.0.3",
|
||||||
"deep-eql": "^4.1.2",
|
"deep-eql": "^4.1.3",
|
||||||
"get-func-name": "^2.0.0",
|
"get-func-name": "^2.0.2",
|
||||||
"loupe": "^2.3.1",
|
"loupe": "^2.3.6",
|
||||||
"pathval": "^1.1.1",
|
"pathval": "^1.1.1",
|
||||||
"type-detect": "^4.0.5"
|
"type-detect": "^4.0.8"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=4"
|
"node": ">=4"
|
||||||
|
@ -6208,10 +6208,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/check-error": {
|
"node_modules/check-error": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
|
||||||
"integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
|
"integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"get-func-name": "^2.0.2"
|
||||||
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "*"
|
"node": "*"
|
||||||
}
|
}
|
||||||
|
@ -7970,9 +7973,9 @@
|
||||||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
|
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
|
||||||
},
|
},
|
||||||
"node_modules/electron-to-chromium": {
|
"node_modules/electron-to-chromium": {
|
||||||
"version": "1.4.529",
|
"version": "1.4.535",
|
||||||
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.529.tgz",
|
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.535.tgz",
|
||||||
"integrity": "sha512-6uyPyXTo8lkv8SWAmjKFbG42U073TXlzD4R8rW3EzuznhFS2olCIAfjjQtV2dV2ar/vRF55KUd3zQYnCB0dd3A==",
|
"integrity": "sha512-4548PpR4S5X5dlvX8NUIw0njH7btQtBoJWcgzpq7n2F9NQ5gMXOPP/6p6iVx6+YT3FVioNhEGa14WJj1k+2SfA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/emittery": {
|
"node_modules/emittery": {
|
||||||
|
@ -9213,9 +9216,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/get-func-name": {
|
"node_modules/get-func-name": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
|
||||||
"integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==",
|
"integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "*"
|
"node": "*"
|
||||||
|
@ -10793,9 +10796,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/jest-util/node_modules/@types/istanbul-reports": {
|
"node_modules/jest-util/node_modules/@types/istanbul-reports": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
|
||||||
"integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
|
"integrity": "sha512-kv43F9eb3Lhj+lr/Hn6OcLCs/sSM8bt+fIaP11rCYngfV6NVjzWXJ17owQtDQTL9tQ8WSLUrGsSJ6rJz0F1w1A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/istanbul-lib-report": "*"
|
"@types/istanbul-lib-report": "*"
|
||||||
|
@ -12983,9 +12986,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/pino-pretty/node_modules/sonic-boom": {
|
"node_modules/pino-pretty/node_modules/sonic-boom": {
|
||||||
"version": "3.3.0",
|
"version": "3.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.4.0.tgz",
|
||||||
"integrity": "sha512-LYxp34KlZ1a2Jb8ZQgFCK3niIHzibdwtwNUWKg0qQRzsDoJ3Gfgkf8KdBTFU3SkejDEIlWwnSnpVdOZIhFMl/g==",
|
"integrity": "sha512-zSe9QQW30nPzjkSJ0glFQO5T9lHsk39tz+2bAAwCj8CNgEG8ItZiX7Wb2ZgA8I04dwRGCcf1m3ABJa8AYm12Fw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"atomic-sleep": "^1.0.0"
|
"atomic-sleep": "^1.0.0"
|
||||||
}
|
}
|
||||||
|
@ -16763,9 +16766,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vue-facing-decorator": {
|
"node_modules/vue-facing-decorator": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/vue-facing-decorator/-/vue-facing-decorator-3.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/vue-facing-decorator/-/vue-facing-decorator-3.0.3.tgz",
|
||||||
"integrity": "sha512-hwOWIblWLBovaCHkNvqp2XTmaVmY8ZE7JcnkwlH9GZz0ZETZyN/O3kmZSmNVnOcRVG/ZOFhVdiBivozhaZxInA==",
|
"integrity": "sha512-gMeyi6l+IBUijBITIzVcOQ6fPYHqbfqRGmazMmVNkR/TE+aW7OLDF2MW6+GBnzC+hUKTm8KtK5uPw1x/pkiZmA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"vue": "^3.0.0"
|
"vue": "^3.0.0"
|
||||||
|
|
|
@ -28,7 +28,7 @@ test.group('DatasetController', (group) => {
|
||||||
|
|
||||||
const dataset = new Dataset();
|
const dataset = new Dataset();
|
||||||
dataset.type = 'analysisdata';
|
dataset.type = 'analysisdata';
|
||||||
dataset.creatingCorporation = 'Tethys RDR';
|
dataset.creating_corporation = 'Tethys RDR';
|
||||||
dataset.language = 'de';
|
dataset.language = 'de';
|
||||||
dataset.server_state = 'inprogress'; // Set the desired server state here
|
dataset.server_state = 'inprogress'; // Set the desired server state here
|
||||||
await dataset.save();
|
await dataset.save();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user