Skip to content

Commit

Permalink
Fixed cloud credential validation (rancher#12161)
Browse files Browse the repository at this point in the history
  • Loading branch information
eva-vashkevich authored Oct 9, 2024
1 parent 9b3c6ae commit e0f7991
Show file tree
Hide file tree
Showing 10 changed files with 158 additions and 117 deletions.
37 changes: 20 additions & 17 deletions shell/cloud-credential/aws.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@ import Loading from '@shell/components/Loading';
import CreateEditView from '@shell/mixins/create-edit-view';
import { LabeledInput } from '@components/Form/LabeledInput';
import LabeledSelect from '@shell/components/form/LabeledSelect';
import FormValidation from '@shell/mixins/form-validation';
export default {
emits: ['validationChanged'],
emits: ['validationChanged', 'valueChanged'],
components: {
Loading, LabeledInput, LabeledSelect
},
mixins: [CreateEditView],
mixins: [CreateEditView, FormValidation],
async fetch() {
let cur = (this.value.decodedData.defaultRegion || '').toLowerCase();
Expand All @@ -28,21 +29,19 @@ export default {
},
data() {
return { knownRegions: null };
return {
knownRegions: null,
fvFormRuleSets: [
{ path: 'decodedData.accessKey', rules: ['required'] },
{ path: 'decodedData.secretKey', rules: ['required'] },
]
};
},
watch: {
'value.decodedData.accessKey'(neu) {
this.$emit('validationChanged', !!neu);
},
'value.decodedData.secretKey'(neu) {
this.$emit('validationChanged', !!neu);
},
'value.decodedData.defaultRegion'(neu) {
this.$emit('validationChanged', !!neu);
},
fvFormIsValid(newValue) {
this.$emit('validationChanged', !!newValue);
}
},
methods: {
Expand Down Expand Up @@ -76,17 +75,21 @@ export default {
label-key="cluster.credential.aws.accessKey.label"
placeholder-key="cluster.credential.aws.accessKey.placeholder"
type="text"
:rules="fvGetAndReportPathRules('decodedData.accessKey')"
:mode="mode"
@update:value="value.setData('accessKey', $event);"
:required="true"
@update:value="$emit('valueChanged', 'accessKey', $event)"
/>
<LabeledInput
:value="value.decodedData.secretKey"
class="mt-20"
label-key="cluster.credential.aws.secretKey.label"
placeholder-key="cluster.credential.aws.secretKey.placeholder"
type="password"
:rules="fvGetAndReportPathRules('decodedData.secretKey')"
:mode="mode"
@update:value="value.setData('secretKey', $event);"
:required="true"
@update:value="$emit('valueChanged', 'secretKey', $event)"
/>
<LabeledSelect
:value="value.decodedData.defaultRegion"
Expand All @@ -96,7 +99,7 @@ export default {
:mode="mode"
:taggable="true"
:options="knownRegions"
@update:value="value.setData('defaultRegion', $event);"
@update:value="$emit('valueChanged', 'defaultRegion', $event)"
/>
<p
v-clean-html="t('cluster.credential.aws.defaultRegion.help', {}, true)"
Expand Down
41 changes: 21 additions & 20 deletions shell/cloud-credential/azure.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,33 @@ import { LabeledInput } from '@components/Form/LabeledInput';
import { azureEnvironments } from '@shell/machine-config/azure';
import { parseAzureError } from '@shell/utils/azure';
import LabeledSelect from '@shell/components/form/LabeledSelect';
import FormValidation from '@shell/mixins/form-validation';
export default {
emits: ['validationChanged'],
emits: ['validationChanged', 'valueChanged'],
components: { LabeledInput, LabeledSelect },
mixins: [CreateEditView],
mixins: [CreateEditView, FormValidation],
data() {
if ( !this.value.decodedData.environment ) {
this.value.setData('environment', 'AzurePublicCloud');
}
return { azureEnvironments };
return {
azureEnvironments,
fvFormRuleSets: [
{ path: 'decodedData.clientId', rules: ['required'] },
{ path: 'decodedData.clientSecret', rules: ['required'] },
{ path: 'decodedData.subscriptionId', rules: ['required'] },
]
};
},
watch: {
'value.decodedData.clientId'(neu) {
this.$emit('validationChanged', !!neu);
},
'value.decodedData.clientSecret'(neu) {
this.$emit('validationChanged', !!neu);
},
'value.decodedData.subscriptionId'(neu) {
this.$emit('validationChanged', !!neu);
},
'value.decodedData.environment'(neu) {
this.$emit('validationChanged', !!neu);
},
fvFormIsValid(newValue) {
this.$emit('validationChanged', !!newValue);
}
},
methods: {
Expand Down Expand Up @@ -85,10 +84,9 @@ export default {
option-key="value"
option-label="value"
:searchable="false"
:required="true"
:label="t('cluster.credential.azure.environment.label')"
data-testid="azure-cloud-credentials-environment"
@update:value="value.setData('environment', $event)"
@update:value="$emit('valueChanged', 'environment', $event)"
/>
</div>
<div class="col span-6">
Expand All @@ -98,8 +96,9 @@ export default {
type="text"
:mode="mode"
:required="true"
:rules="fvGetAndReportPathRules('decodedData.subscriptionId')"
data-testid="azure-cloud-credentials-subscription-id"
@update:value="value.setData('subscriptionId', $event)"
@update:value="$emit('valueChanged', 'subscriptionId', $event)"
/>
</div>
</div>
Expand All @@ -111,8 +110,9 @@ export default {
type="text"
:mode="mode"
:required="true"
:rules="fvGetAndReportPathRules('decodedData.clientId')"
data-testid="azure-cloud-credentials-client-id"
@update:value="value.setData('clientId', $event)"
@update:value="$emit('valueChanged', 'clientId', $event)"
/>
</div>
<div class="col span-6">
Expand All @@ -122,8 +122,9 @@ export default {
type="password"
:mode="mode"
:required="true"
:rules="fvGetAndReportPathRules('decodedData.clientSecret')"
data-testid="azure-cloud-credentials-client-secret"
@update:value="value.setData('clientSecret', $event)"
@update:value="$emit('valueChanged', 'clientSecret', $event)"
/>
</div>
</div>
Expand Down
16 changes: 11 additions & 5 deletions shell/cloud-credential/digitalocean.vue
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
<script>
import CreateEditView from '@shell/mixins/create-edit-view';
import { LabeledInput } from '@components/Form/LabeledInput';
import FormValidation from '@shell/mixins/form-validation';
export default {
emits: ['validationChanged'],
emits: ['validationChanged', 'valueChanged'],
components: { LabeledInput },
mixins: [CreateEditView],
mixins: [CreateEditView, FormValidation],
data() {
return { fvFormRuleSets: [{ path: 'decodedData.accessToken', rules: ['required'] }] };
},
watch: {
'value.decodedData.accessToken'(neu) {
this.$emit('validationChanged', !!neu);
fvFormIsValid(newValue) {
this.$emit('validationChanged', !!newValue);
}
},
Expand Down Expand Up @@ -39,7 +43,9 @@ export default {
placeholder-key="cluster.credential.digitalocean.accessToken.placeholder"
type="password"
:mode="mode"
@update:value="value.setData('accessToken', $event);"
:required="true"
:rules="fvGetAndReportPathRules('decodedData.accessToken')"
@update:value="$emit('valueChanged', 'accessToken', $event)"
/>
<p
v-clean-html="t('cluster.credential.digitalocean.accessToken.help', {}, true)"
Expand Down
21 changes: 15 additions & 6 deletions shell/cloud-credential/gcp.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,29 @@
import CreateEditView from '@shell/mixins/create-edit-view';
import { LabeledInput } from '@components/Form/LabeledInput';
import FileSelector from '@shell/components/form/FileSelector';
import FormValidation from '@shell/mixins/form-validation';
export default {
emits: ['validationChanged'],
emits: ['validationChanged', 'valueChanged'],
components: { LabeledInput, FileSelector },
mixins: [CreateEditView],
mixins: [CreateEditView, FormValidation],
data() {
return {
fvFormRuleSets: [
{ path: 'decodedData.authEncodedJson', rules: ['required'] }]
};
},
watch: {
'value.decodedData.authEncodedJson'(neu) {
this.$emit('validationChanged', !!neu);
fvFormIsValid(newValue) {
this.$emit('validationChanged', !!newValue);
}
},
methods: {
onFileSelected(data) {
this.value.setData('authEncodedJson', data);
this.$emit('valueChanged', 'authEncodedJson', data);
},
async test() {
Expand Down Expand Up @@ -58,7 +65,9 @@ export default {
placeholder-key="cluster.credential.gcp.authEncodedJson.placeholder"
type="multiline"
:mode="mode"
@update:value="value.setData('authEncodedJson', $event);"
:required="true"
:rules="fvGetAndReportPathRules('decodedData.authEncodedJson')"
@update:value="$emit('valueChanged', 'authEncodedJson', $event)"
/>
<FileSelector
class="role-primary btn-sm mt-20 mb-20"
Expand Down
19 changes: 14 additions & 5 deletions shell/cloud-credential/linode.vue
Original file line number Diff line number Diff line change
@@ -1,16 +1,23 @@
<script>
import CreateEditView from '@shell/mixins/create-edit-view';
import { LabeledInput } from '@components/Form/LabeledInput';
import FormValidation from '@shell/mixins/form-validation';
export default {
emits: ['validationChanged'],
emits: ['validationChanged', 'valueChanged'],
components: { LabeledInput },
mixins: [CreateEditView],
mixins: [CreateEditView, FormValidation],
data() {
return {
fvFormRuleSets: [
{ path: 'decodedData.token', rules: ['required'] }]
};
},
watch: {
'value.decodedData.token'(neu) {
this.$emit('validationChanged', !!neu);
fvFormIsValid(newValue) {
this.$emit('validationChanged', !!newValue);
}
},
Expand Down Expand Up @@ -39,7 +46,9 @@ export default {
placeholder-key="cluster.credential.linode.accessToken.placeholder"
type="password"
:mode="mode"
@update:value="value.setData('token', $event);"
:required="true"
:rules="fvGetAndReportPathRules('decodedData.token')"
@update:value="$emit('valueChanged', 'token', $event)"
/>
<p
v-clean-html="t('cluster.credential.linode.accessToken.help', {}, true)"
Expand Down
28 changes: 19 additions & 9 deletions shell/cloud-credential/pnap.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,25 @@
import CreateEditView from '@shell/mixins/create-edit-view';
import { LabeledInput } from '@components/Form/LabeledInput';
import { base64Encode } from '@shell/utils/crypto';
import FormValidation from '@shell/mixins/form-validation';
export default {
emits: ['validationChanged'],
emits: ['validationChanged', 'valueChanged'],
components: { LabeledInput },
mixins: [CreateEditView],
mixins: [CreateEditView, FormValidation],
data() {
return {
fvFormRuleSets: [
{ path: 'decodedData.clientIdentifier', rules: ['required'] },
{ path: 'decodedData.clientSecret', rules: ['required'] }
]
};
},
watch: {
'value.decodedData.clientIdentifier'(neu) {
this.$emit('validationChanged', !!neu);
},
'value.decodedData.clientSecret'(neu) {
this.$emit('validationChanged', !!neu);
fvFormIsValid(newValue) {
this.$emit('validationChanged', !!newValue);
}
},
Expand Down Expand Up @@ -58,7 +64,9 @@ export default {
placeholder-key="cluster.credential.pnap.clientIdentifier.placeholder"
type="text"
:mode="mode"
@update:value="value.setData('clientIdentifier', $event);"
:required="true"
:rules="fvGetAndReportPathRules('decodedData.clientIdentifier')"
@update:value="$emit('valueChanged', 'clientIdentifier', $event)"
/>
</div>
<div class="col span-6">
Expand All @@ -68,7 +76,9 @@ export default {
placeholder-key="cluster.credential.pnap.clientSecret.placeholder"
type="text"
:mode="mode"
@update:value="value.setData('clientSecret', $event);"
:required="true"
:rules="fvGetAndReportPathRules('decodedData.clientSecret')"
@update:value="$emit('valueChanged', 'clientSecret', $event)"
/>
</div>
</div>
Expand Down
Loading

0 comments on commit e0f7991

Please sign in to comment.