Before credentials get created or updated check if one with same type and

name already exist
This commit is contained in:
Jan Oberhauser 2019-06-30 19:09:08 +02:00
parent ea82fd36c2
commit 3282acbcf1
2 changed files with 47 additions and 3 deletions

View file

@ -55,8 +55,10 @@ import {
import { import {
FindManyOptions, FindManyOptions,
FindOneOptions,
LessThan, LessThan,
LessThanOrEqual, LessThanOrEqual,
Not,
} from 'typeorm'; } from 'typeorm';
import * as parseUrl from 'parseurl'; import * as parseUrl from 'parseurl';
@ -499,6 +501,19 @@ class App {
throw new Error('No encryption key got found to encrypt the credentials!'); throw new Error('No encryption key got found to encrypt the credentials!');
} }
// Check if credentials with the same name and type exist already
const findQuery = {
where: {
name: incomingData.name,
type: incomingData.type,
},
} as FindOneOptions;
const checkResult = await Db.collections.Credentials!.findOne(findQuery);
if (checkResult !== undefined) {
throw new ResponseHelper.ReponseError(`Credentials with the same type and name exist already.`, undefined, 400);
}
// Encrypt the data // Encrypt the data
const credentials = new Credentials(incomingData.name, incomingData.type, incomingData.nodesAccess); const credentials = new Credentials(incomingData.name, incomingData.type, incomingData.nodesAccess);
credentials.setData(incomingData.data, encryptionKey); credentials.setData(incomingData.data, encryptionKey);
@ -532,6 +547,20 @@ class App {
} }
} }
// Check if credentials with the same name and type exist already
const findQuery = {
where: {
id: Not(id),
name: incomingData.name,
type: incomingData.type,
},
} as FindOneOptions;
const checkResult = await Db.collections.Credentials!.findOne(findQuery);
if (checkResult !== undefined) {
throw new ResponseHelper.ReponseError(`Credentials with the same type and name exist already.`, undefined, 400);
}
const encryptionKey = await UserSettings.getEncryptionKey(); const encryptionKey = await UserSettings.getEncryptionKey();
if (encryptionKey === undefined) { if (encryptionKey === undefined) {
throw new Error('No encryption key got found to encrypt the credentials!'); throw new Error('No encryption key got found to encrypt the credentials!');

View file

@ -71,6 +71,8 @@ import Vue from 'vue';
import { restApi } from '@/components/mixins/restApi'; import { restApi } from '@/components/mixins/restApi';
import { nodeHelpers } from '@/components/mixins/nodeHelpers'; import { nodeHelpers } from '@/components/mixins/nodeHelpers';
import { showMessage } from '@/components/mixins/showMessage';
import { ICredentialsDecryptedResponse, IUpdateInformation } from '@/Interface'; import { ICredentialsDecryptedResponse, IUpdateInformation } from '@/Interface';
import { import {
CredentialInformation, CredentialInformation,
@ -89,6 +91,7 @@ import mixins from 'vue-typed-mixins';
export default mixins( export default mixins(
nodeHelpers, nodeHelpers,
restApi, restApi,
showMessage,
).extend({ ).extend({
name: 'CredentialsInput', name: 'CredentialsInput',
props: [ props: [
@ -152,7 +155,7 @@ export default mixins(
// @ts-ignore // @ts-ignore
this.propertyValue[name] = parameterData.value; this.propertyValue[name] = parameterData.value;
}, },
async createCredentials () { async createCredentials (): Promise<void> {
const nodesAccess = this.nodesAccess.map((nodeType) => { const nodesAccess = this.nodesAccess.map((nodeType) => {
return { return {
nodeType, nodeType,
@ -166,7 +169,13 @@ export default mixins(
data: this.propertyValue, data: this.propertyValue,
} as ICredentialsDecrypted; } as ICredentialsDecrypted;
const result = await this.restApi().createNewCredentials(newCredentials); let result;
try {
result = await this.restApi().createNewCredentials(newCredentials);
} catch (error) {
this.$showError(error, 'Problem Creating Credentials', 'There was a problem creating the credentials:');
return;
}
// Add also to local store // Add also to local store
this.$store.commit('addCredentials', result); this.$store.commit('addCredentials', result);
@ -202,7 +211,13 @@ export default mixins(
data: this.propertyValue, data: this.propertyValue,
} as ICredentialsDecrypted; } as ICredentialsDecrypted;
const result = await this.restApi().updateCredentials((this.credentialData as ICredentialsDecryptedResponse).id as string, newCredentials); let result;
try {
result = await this.restApi().updateCredentials((this.credentialData as ICredentialsDecryptedResponse).id as string, newCredentials);
} catch (error) {
this.$showError(error, 'Problem Updating Credentials', 'There was a problem updating the credentials:');
return;
}
// Update also in local store // Update also in local store
this.$store.commit('updateCredentials', result); this.$store.commit('updateCredentials', result);