feat: env variable support in authorization

Co-authored-by: Andrew Bastin <andrewbastin.k@gmail.com>
This commit is contained in:
liyasthomas
2021-08-26 10:00:21 +05:30
parent ee44a48994
commit 62205919a3
3 changed files with 88 additions and 59 deletions

View File

@@ -108,39 +108,51 @@
/> />
</div> </div>
<div v-if="authType === 'basic'" class="border-b border-dividerLight flex"> <div v-if="authType === 'basic'" class="border-b border-dividerLight flex">
<div class="border-r border-dividerLight space-y-2 p-2 w-2/3"> <div class="border-r border-dividerLight w-2/3">
<div class="flex relative"> <div
class="divide-x divide-dividerLight border-b border-dividerLight flex"
>
<SmartEnvInput
class="bg-primary flex flex-1 py-1 px-4"
v-if="EXPERIMENTAL_URL_BAR_ENABLED"
v-model="basicUsername"
:placeholder="$t('authorization.username')"
/>
<input <input
v-else
id="http_basic_user" id="http_basic_user"
v-model="basicUsername" v-model="basicUsername"
class="input floating-input" class="bg-primary flex flex-1 py-2 px-4"
placeholder=" " :placeholder="$t('authorization.username')"
name="http_basic_user" name="http_basic_user"
/> />
<label for="http_basic_user">
{{ $t("authorization.username") }}
</label>
</div> </div>
<div class="flex relative"> <div
class="divide-x divide-dividerLight border-b border-dividerLight flex"
>
<SmartEnvInput
class="bg-primary flex flex-1 py-1 px-4"
v-if="EXPERIMENTAL_URL_BAR_ENABLED"
v-model="basicPassword"
:placeholder="$t('authorization.password')"
/>
<input <input
v-else
id="http_basic_passwd" id="http_basic_passwd"
v-model="basicPassword" v-model="basicPassword"
class="input floating-input" class="bg-primary flex flex-1 py-2 px-4"
placeholder=" " :placeholder="$t('authorization.password')"
name="http_basic_passwd" name="http_basic_passwd"
:type="passwordFieldType" :type="passwordFieldType"
/> />
<label for="http_basic_passwd"> <span>
{{ $t("authorization.password") }} <ButtonSecondary
</label> :icon="
<ButtonSecondary passwordFieldType === 'text' ? 'visibility' : 'visibility_off'
:icon=" "
passwordFieldType === 'text' ? 'visibility' : 'visibility_off' @click.native="switchVisibility"
" />
outline </span>
class="rounded ml-2"
@click.native="switchVisibility"
/>
</div> </div>
</div> </div>
<div <div
@@ -169,16 +181,24 @@
</div> </div>
</div> </div>
<div v-if="authType === 'bearer'" class="border-b border-dividerLight flex"> <div v-if="authType === 'bearer'" class="border-b border-dividerLight flex">
<div class="border-r border-dividerLight space-y-2 p-2 w-2/3"> <div class="border-r border-dividerLight w-2/3">
<div class="flex relative"> <div
class="divide-x divide-dividerLight border-b border-dividerLight flex"
>
<SmartEnvInput
class="bg-primary flex flex-1 py-1 px-4"
v-if="EXPERIMENTAL_URL_BAR_ENABLED"
v-model="bearerToken"
placeholder="Token"
/>
<input <input
v-else
id="bearer_token" id="bearer_token"
v-model="bearerToken" v-model="bearerToken"
class="input floating-input" class="bg-primary flex flex-1 py-2 px-4"
placeholder=" " placeholder="Token"
name="bearer_token" name="bearer_token"
/> />
<label for="bearer_token"> Token </label>
</div> </div>
</div> </div>
<div <div
@@ -210,16 +230,24 @@
v-if="authType === 'oauth-2'" v-if="authType === 'oauth-2'"
class="border-b border-dividerLight flex" class="border-b border-dividerLight flex"
> >
<div class="border-r border-dividerLight space-y-2 p-2 w-2/3"> <div class="border-r border-dividerLight w-2/3">
<div class="flex relative"> <div
class="divide-x divide-dividerLight border-b border-dividerLight flex"
>
<SmartEnvInput
class="bg-primary flex flex-1 py-1 px-4"
v-if="EXPERIMENTAL_URL_BAR_ENABLED"
v-model="oauth2Token"
placeholder="Token"
/>
<input <input
v-else
id="oauth2_token" id="oauth2_token"
v-model="oauth2Token" v-model="oauth2Token"
class="input floating-input" class="bg-primary flex flex-1 py-2 px-4"
placeholder=" " placeholder="Token"
name="oauth2_token" name="oauth2_token"
/> />
<label for="oauth2_token"> Token </label>
</div> </div>
<HttpOAuth2Authorization /> <HttpOAuth2Authorization />
</div> </div>
@@ -316,6 +344,7 @@ export default defineComponent({
passwordFieldType, passwordFieldType,
clearContent, clearContent,
switchVisibility, switchVisibility,
EXPERIMENTAL_URL_BAR_ENABLED: useSetting("EXPERIMENTAL_URL_BAR_ENABLED"),
} }
}, },
}) })

View File

@@ -1,57 +1,53 @@
<template> <template>
<div class="flex flex-col space-y-2"> <div class="flex flex-col">
<div class="flex relative"> <div class="divide-x divide-dividerLight border-b border-dividerLight flex">
<input <input
id="oidcDiscoveryURL" id="oidcDiscoveryURL"
v-model="oidcDiscoveryURL" v-model="oidcDiscoveryURL"
class="input floating-input" class="bg-primary flex flex-1 py-2 px-4"
placeholder=" " placeholder="OpenID Connect Discovery URL"
name="oidcDiscoveryURL" name="oidcDiscoveryURL"
/> />
<label for="oidcDiscoveryURL"> OpenID Connect Discovery URL </label>
</div> </div>
<div class="flex relative"> <div class="divide-x divide-dividerLight border-b border-dividerLight flex">
<input <input
id="authURL" id="authURL"
v-model="authURL" v-model="authURL"
class="input floating-input" class="bg-primary flex flex-1 py-2 px-4"
placeholder=" " placeholder="Authentication URL"
name="authURL" name="authURL"
/> />
<label for="authURL"> Authentication URL </label>
</div> </div>
<div class="flex relative"> <div class="divide-x divide-dividerLight border-b border-dividerLight flex">
<input <input
id="accessTokenURL" id="accessTokenURL"
v-model="accessTokenURL" v-model="accessTokenURL"
class="input floating-input" class="bg-primary flex flex-1 py-2 px-4"
placeholder=" " placeholder="Access Token URL"
name="accessTokenURL" name="accessTokenURL"
/> />
<label for="accessTokenURL"> Access Token URL </label>
</div> </div>
<div class="flex relative"> <div class="divide-x divide-dividerLight border-b border-dividerLight flex">
<input <input
id="clientID" id="clientID"
v-model="clientID" v-model="clientID"
class="input floating-input" class="bg-primary flex flex-1 py-2 px-4"
placeholder=" " placeholder="Client ID"
name="clientID" name="clientID"
/> />
<label for="clientID"> Client ID </label>
</div> </div>
<div class="flex relative"> <div class="divide-x divide-dividerLight border-b border-dividerLight flex">
<input <input
id="scope" id="scope"
v-model="scope" v-model="scope"
class="input floating-input" class="bg-primary flex flex-1 py-2 px-4"
placeholder=" " placeholder="Scope"
name="scope" name="scope"
/> />
<label for="scope"> Scope </label>
</div> </div>
<div> <div class="p-2">
<ButtonPrimary <ButtonSecondary
filled
:label="$t('authorization.generate_token')" :label="$t('authorization.generate_token')"
@click.native="handleAccessTokenRequest()" @click.native="handleAccessTokenRequest()"
/> />
@@ -101,7 +97,7 @@ export default {
oidcDiscoveryURL.value === "" && oidcDiscoveryURL.value === "" &&
(authURL.value === "" || accessTokenURL.value === "") (authURL.value === "" || accessTokenURL.value === "")
) { ) {
$toast.error($t("complete_config_urls"), { $toast.error($t("complete_config_urls").toString(), {
icon: "error", icon: "error",
}) })
return return

View File

@@ -80,12 +80,13 @@ export function getEffectiveRESTRequest(
if (request.auth.authActive) { if (request.auth.authActive) {
// TODO: Support a better b64 implementation than btoa ? // TODO: Support a better b64 implementation than btoa ?
if (request.auth.authType === "basic") { if (request.auth.authType === "basic") {
const username = parseTemplateString(request.auth.username, envVariables)
const password = parseTemplateString(request.auth.password, envVariables)
effectiveFinalHeaders.push({ effectiveFinalHeaders.push({
active: true, active: true,
key: "Authorization", key: "Authorization",
value: `Basic ${btoa( value: `Basic ${btoa(`${username}:${password}`)}`,
`${request.auth.username}:${request.auth.password}`
)}`,
}) })
} else if ( } else if (
request.auth.authType === "bearer" || request.auth.authType === "bearer" ||
@@ -94,7 +95,10 @@ export function getEffectiveRESTRequest(
effectiveFinalHeaders.push({ effectiveFinalHeaders.push({
active: true, active: true,
key: "Authorization", key: "Authorization",
value: `Bearer ${request.auth.token}`, value: `Bearer ${parseTemplateString(
request.auth.token,
envVariables
)}`,
}) })
} }
} }