Skip to content

Commit 21ea1a6

Browse files
committed
Fixed validation name of access token when creating
1 parent 3bbacac commit 21ea1a6

File tree

4 files changed

+33
-16
lines changed

4 files changed

+33
-16
lines changed

options/locale/locale_en-US.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,7 @@ token_name = Token Name
908908
generate_token = Generate Token
909909
generate_token_success = Your new token has been generated. Copy it now as it will not be shown again.
910910
generate_token_name_duplicate = <strong>%s</strong> has been used as an application name already. Please use a new one.
911+
generate_token_name_required = Token Name is required.
911912
delete_token = Delete
912913
access_token_deletion = Delete Access Token
913914
access_token_deletion_cancel_action = Cancel

templates/user/settings/applications.tmpl

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,12 @@
5555
</h5>
5656
<form id="scoped-access-form" class="ui form ignore-dirty" action="{{.Link}}" method="post">
5757
{{.CsrfTokenHtml}}
58-
<div class="field {{if .Err_Name}}error{{end}}">
59-
<label for="name">{{ctx.Locale.Tr "settings.token_name"}}</label>
60-
<input id="name" name="name" value="{{.name}}" autofocus required maxlength="255">
61-
</div>
58+
<div class="field">
59+
<label for="name">{{ctx.Locale.Tr "settings.token_name"}}</label>
60+
<div id="scoped-access-token-name">
61+
<input id="name" name="name" value="{{.name}}" autofocus required maxlength="255">
62+
</div>
63+
</div>
6264
<div class="field">
6365
<label>{{ctx.Locale.Tr "settings.repo_and_org_access"}}</label>
6466
<label class="tw-cursor-pointer">
@@ -90,6 +92,9 @@
9092
{{ctx.Locale.Tr "settings.generate_token"}}
9193
</button>
9294
</form>{{/* Fomantic ".ui.form .warning.message" is hidden by default, so put the warning message out of the form*/}}
95+
<div id="token-name-warning" class="ui warning message center tw-hidden">
96+
{{ctx.Locale.Tr "settings.generate_token_name_required"}}
97+
</div>
9398
<div id="scoped-access-warning" class="ui warning message center tw-hidden">
9499
{{ctx.Locale.Tr "settings.at_least_one_permission"}}
95100
</div>

web_src/js/components/ScopedAccessTokenSelector.vue renamed to web_src/js/components/ScopedAccessTokenForm.vue

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,31 @@ onUnmounted(() => {
3838
function onClickSubmit(e: Event) {
3939
e.preventDefault();
4040
41+
const nameInput = document.querySelector<HTMLInputElement>('#name');
42+
const nameWarning = document.querySelector('#token-name-warning');
43+
if (!nameInput?.value.trim()) {
44+
showElem(nameWarning);
45+
return;
46+
}
47+
hideElem(nameWarning);
48+
4149
const warningEl = document.querySelector('#scoped-access-warning');
42-
// check that at least one scope has been selected
50+
let hasSelectedScope = false;
51+
4352
for (const el of document.querySelectorAll<HTMLInputElement>('.access-token-select')) {
4453
if (el.value) {
45-
// Hide the error if it was visible from previous attempt.
46-
hideElem(warningEl);
47-
// Submit the form.
48-
document.querySelector<HTMLFormElement>('#scoped-access-form').submit();
49-
// Don't show the warning.
50-
return;
54+
hasSelectedScope = true;
55+
break;
5156
}
5257
}
53-
// no scopes selected, show validation error
54-
showElem(warningEl);
58+
59+
if (!hasSelectedScope) {
60+
showElem(warningEl);
61+
return;
62+
}
63+
64+
hideElem(warningEl);
65+
document.querySelector<HTMLFormElement>('#scoped-access-form')?.submit();
5566
}
5667
</script>
5768

web_src/js/features/scoped-access-token.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@ export async function initScopedAccessTokenCategories() {
44
const el = document.querySelector('#scoped-access-token-selector');
55
if (!el) return;
66

7-
const {default: ScopedAccessTokenSelector} = await import(/* webpackChunkName: "scoped-access-token-selector" */'../components/ScopedAccessTokenSelector.vue');
7+
const {default: ScopedAccessTokenForm} = await import(/* webpackChunkName: "scoped-access-token-form" */'../components/ScopedAccessTokenForm.vue');
88
try {
9-
const View = createApp(ScopedAccessTokenSelector, {
9+
const View = createApp(ScopedAccessTokenForm, {
1010
isAdmin: JSON.parse(el.getAttribute('data-is-admin')),
1111
noAccessLabel: el.getAttribute('data-no-access-label'),
1212
readLabel: el.getAttribute('data-read-label'),
1313
writeLabel: el.getAttribute('data-write-label'),
1414
});
1515
View.mount(el);
1616
} catch (err) {
17-
console.error('ScopedAccessTokenSelector failed to load', err);
17+
console.error('ScopedAccessTokenForm failed to load', err);
1818
el.textContent = el.getAttribute('data-locale-component-failed-to-load');
1919
}
2020
}

0 commit comments

Comments
 (0)