auth: implemented module to authenticate against our GitLab
This helps to have a convenient way to manage and test our personal GitLab tokens. Those are used for certain API calls like creating new repositories. prefill the access token web view as per https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#prefill-personal-access-token-name-and-scopes Signed-off-by: Levente Polyak <anthraxx@archlinux.org>
This commit is contained in:
parent
d2245b1943
commit
77d800eab2
|
@ -18,6 +18,22 @@ _archbuild_args=(
|
|||
'--[Introduce makechrootpkg options]:*::makechrootpkg options:= _dispatch makechrootpkg makechrootpkg'
|
||||
)
|
||||
|
||||
_pkgctl_auth_cmds=(
|
||||
"pkgctl auth command"
|
||||
"login[Authenticate with the GitLab instance]"
|
||||
"status[View authentication status]"
|
||||
)
|
||||
|
||||
_pkgctl_auth_login_args=(
|
||||
'(-g --gen-access-token)'{-g,--gen-access-token}'[Open the URL to generate a new personal access token]'
|
||||
'(-h --help)'{-h,--help}'[Display usage]'
|
||||
)
|
||||
|
||||
_pkgctl_auth_status_args=(
|
||||
'(-t --show-token)'{-t,--show-token}'[Display the auth token]'
|
||||
'(-h --help)'{-h,--help}'[Display usage]'
|
||||
)
|
||||
|
||||
_pkgctl_repo_cmds=(
|
||||
"pkgctl repo command"
|
||||
"clone[Clone a package repository]"
|
||||
|
@ -154,6 +170,7 @@ _devtools_completions_all_packages() {
|
|||
|
||||
_pkgctl_cmds=(
|
||||
"pkgctl command"
|
||||
"auth[Authenticate with services like GitLab]"
|
||||
"diff[Compare package files using different modes]"
|
||||
"repo[Manage Git packaging repositories and their configuration]"
|
||||
)
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
pkgctl-auth-login(1)
|
||||
====================
|
||||
|
||||
Name
|
||||
----
|
||||
pkgctl-auth-login - Authenticate with the GitLab instance
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
pkgctl auth login [OPTIONS]
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
Interactively authenticate with the GitLab instance.
|
||||
|
||||
The minimum required scopes for the token are: 'api', 'write_repository'.
|
||||
|
||||
Options
|
||||
-------
|
||||
|
||||
*-g, --gen-access-token*::
|
||||
Open the URL to generate a new personal access token
|
||||
|
||||
*-h, --help*::
|
||||
Show a help text
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-auth-status[1]
|
||||
|
||||
include::include/footer.asciidoc[]
|
|
@ -0,0 +1,32 @@
|
|||
pkgctl-auth-status(1)
|
||||
=====================
|
||||
|
||||
Name
|
||||
----
|
||||
pkgctl-auth-status - View authentication status
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
pkgctl auth status [OPTIONS]
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
Verifies and displays information about your authentication state of
|
||||
services like the GitLab instance and reports issues if any.
|
||||
|
||||
Options
|
||||
-------
|
||||
|
||||
*-t, --show-token*::
|
||||
Display the auth token
|
||||
|
||||
*-h, --help*::
|
||||
Show a help text
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-auth-login[1]
|
||||
|
||||
include::include/footer.asciidoc[]
|
|
@ -0,0 +1,38 @@
|
|||
pkgctl-auth(1)
|
||||
==============
|
||||
|
||||
Name
|
||||
----
|
||||
pkgctl-auth - Authenticate with serivces like GitLab.
|
||||
|
||||
Synopsis
|
||||
--------
|
||||
pkgctl auth [OPTIONS] [SUBCOMMAND]
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
Manage the authorization for the GitLab instance and show its current status.
|
||||
|
||||
Options
|
||||
-------
|
||||
|
||||
*-h, --help*::
|
||||
Show a help text
|
||||
|
||||
Subcommands
|
||||
-----------
|
||||
|
||||
pkgctl auth login::
|
||||
Authenticate with the GitLab instance
|
||||
|
||||
pkgctl auth status::
|
||||
View authentication status
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-auth-login[1]
|
||||
linkman:pkgctl-auth-status[1]
|
||||
|
||||
include::include/footer.asciidoc[]
|
|
@ -17,6 +17,9 @@ TODO
|
|||
Subcommands
|
||||
-----------
|
||||
|
||||
pkgctl auth::
|
||||
Authenticate with services like GitLab
|
||||
|
||||
pkgctl diff::
|
||||
Compare package files using different modes
|
||||
|
||||
|
@ -26,6 +29,7 @@ pkgctl repo::
|
|||
See Also
|
||||
--------
|
||||
|
||||
linkman:pkgctl-auth[1]
|
||||
linkman:pkgctl-diff[1]
|
||||
linkman:pkgctl-repo[1]
|
||||
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
#!/hint/bash
|
||||
#
|
||||
# This may be included with or without `set -euE`
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
[[ -z ${DEVTOOLS_INCLUDE_AUTH_SH:-} ]] || return 0
|
||||
DEVTOOLS_INCLUDE_AUTH_SH=1
|
||||
|
||||
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
|
||||
|
||||
set -e
|
||||
|
||||
|
||||
pkgctl_auth_usage() {
|
||||
local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
|
||||
cat <<- _EOF_
|
||||
Usage: ${COMMAND} [COMMAND] [OPTIONS]
|
||||
|
||||
Authenticate with services like GitLab.
|
||||
|
||||
COMMANDS
|
||||
login Authenticate with the GitLab instance
|
||||
status View authentication status
|
||||
|
||||
OPTIONS
|
||||
-h, --help Show this help text
|
||||
|
||||
EXAMPLES
|
||||
$ ${COMMAND} login --gen-access-token
|
||||
$ ${COMMAND} status
|
||||
_EOF_
|
||||
}
|
||||
|
||||
pkgctl_auth() {
|
||||
if (( $# < 1 )); then
|
||||
pkgctl_auth_usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# option checking
|
||||
while (( $# )); do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
pkgctl_auth_usage
|
||||
exit 0
|
||||
;;
|
||||
login)
|
||||
_DEVTOOLS_COMMAND+=" $1"
|
||||
shift
|
||||
# shellcheck source=src/lib/auth/login.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/auth/login.sh
|
||||
pkgctl_auth_login "$@"
|
||||
exit 0
|
||||
;;
|
||||
status)
|
||||
_DEVTOOLS_COMMAND+=" $1"
|
||||
shift
|
||||
# shellcheck source=src/lib/auth/status.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/auth/status.sh
|
||||
pkgctl_auth_status "$@"
|
||||
exit 0
|
||||
;;
|
||||
-*)
|
||||
die "invalid argument: %s" "$1"
|
||||
;;
|
||||
*)
|
||||
die "invalid command: %s" "$1"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
|
@ -0,0 +1,93 @@
|
|||
#!/hint/bash
|
||||
#
|
||||
# This may be included with or without `set -euE`
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
[[ -z ${DEVTOOLS_INCLUDE_AUTH_LOGIN_SH:-} ]] || return 0
|
||||
DEVTOOLS_INCLUDE_AUTH_LOGIN_SH=1
|
||||
|
||||
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
|
||||
# shellcheck source=src/lib/common.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh
|
||||
# shellcheck source=src/lib/config.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/config.sh
|
||||
# shellcheck source=src/lib/api/gitlab.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/api/gitlab.sh
|
||||
|
||||
set -e
|
||||
|
||||
|
||||
pkgctl_auth_login_usage() {
|
||||
local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
|
||||
cat <<- _EOF_
|
||||
Usage: ${COMMAND} [OPTIONS]
|
||||
|
||||
Interactively authenticate with the GitLab instance.
|
||||
|
||||
The minimum required scopes for the token are: 'api', 'write_repository'.
|
||||
|
||||
OPTIONS
|
||||
-g, --gen-access-token Open the URL to generate a new personal access token
|
||||
-h, --help Show this help text
|
||||
|
||||
EXAMPLES
|
||||
$ ${COMMAND}
|
||||
$ ${COMMAND} --gen-access-token
|
||||
_EOF_
|
||||
}
|
||||
|
||||
|
||||
pkgctl_auth_login() {
|
||||
local token personal_access_token_url
|
||||
local GEN_ACESS_TOKEN=0
|
||||
|
||||
# option checking
|
||||
while (( $# )); do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
pkgctl_auth_login_usage
|
||||
exit 0
|
||||
;;
|
||||
-g|--gen-access-token)
|
||||
GEN_ACESS_TOKEN=1
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
die "invalid argument: %s" "$1"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
personal_access_token_url="https://${GITLAB_HOST}/-/profile/personal_access_tokens?name=pkgctl+token&scopes=api,write_repository"
|
||||
|
||||
cat <<- _EOF_
|
||||
Logging into ${BOLD}${GITLAB_HOST}${ALL_OFF}
|
||||
|
||||
Tip: you can generate a Personal Access Token here ${personal_access_token_url}
|
||||
The minimum required scopes are 'api' and 'write_repository'.
|
||||
_EOF_
|
||||
|
||||
if (( GEN_ACESS_TOKEN )); then
|
||||
xdg-open "${personal_access_token_url}" 2>/dev/null
|
||||
fi
|
||||
|
||||
# read token from stdin
|
||||
read -s -r -p "${GREEN}?${ALL_OFF} ${BOLD}Paste your authentication token:${ALL_OFF} " token
|
||||
echo
|
||||
|
||||
if [[ -z ${token} ]]; then
|
||||
msg_error " No token provided"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# check if the passed token works
|
||||
GITLAB_TOKEN="${token}"
|
||||
if ! result=$(gitlab_api_get_user); then
|
||||
printf "%s\n" "$result"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
msg_success " Logged in as ${BOLD}${result}${ALL_OFF}"
|
||||
save_devtools_config
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
#!/hint/bash
|
||||
#
|
||||
# This may be included with or without `set -euE`
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
[[ -z ${DEVTOOLS_INCLUDE_AUTH_STATUS_SH:-} ]] || return 0
|
||||
DEVTOOLS_INCLUDE_AUTH_STATUS_SH=1
|
||||
|
||||
_DEVTOOLS_LIBRARY_DIR=${_DEVTOOLS_LIBRARY_DIR:-@pkgdatadir@}
|
||||
# shellcheck source=src/lib/common.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/common.sh
|
||||
# shellcheck source=src/lib/api/gitlab.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/api/gitlab.sh
|
||||
|
||||
set -e
|
||||
|
||||
|
||||
pkgctl_auth_status_usage() {
|
||||
local -r COMMAND=${_DEVTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
|
||||
cat <<- _EOF_
|
||||
Usage: ${COMMAND} [OPTIONS]
|
||||
|
||||
Verifies and displays information about your authentication state of
|
||||
services like the GitLab instance and reports issues if any.
|
||||
|
||||
OPTIONS
|
||||
-t, --show-token Display the auth token
|
||||
-h, --help Show this help text
|
||||
|
||||
EXAMPLES
|
||||
$ ${COMMAND}
|
||||
$ ${COMMAND} --show-token
|
||||
_EOF_
|
||||
}
|
||||
|
||||
pkgctl_auth_status() {
|
||||
local SHOW_TOKEN=0
|
||||
# option checking
|
||||
while (( $# )); do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
pkgctl_auth_status_usage
|
||||
exit 0
|
||||
;;
|
||||
-t|--show-token)
|
||||
SHOW_TOKEN=1
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
die "invalid argument: %s" "$1"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
printf "%s\n" "${BOLD}${GITLAB_HOST}${ALL_OFF}"
|
||||
# shellcheck disable=2119
|
||||
if ! username=$(gitlab_api_get_user); then
|
||||
printf "%s\n" "${username}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
msg_success " Logged in as ${BOLD}${username}${ALL_OFF}"
|
||||
if (( SHOW_TOKEN )); then
|
||||
msg_success " Token: ${GITLAB_TOKEN}"
|
||||
else
|
||||
msg_success " Token: **************************"
|
||||
fi
|
||||
}
|
|
@ -19,6 +19,7 @@ usage() {
|
|||
Unified command-line frontend for devtools.
|
||||
|
||||
COMMANDS
|
||||
auth Authenticate with services like GitLab
|
||||
diff Compare package files using different modes
|
||||
repo Manage Git packaging repositories and their configuration
|
||||
|
||||
|
@ -51,6 +52,14 @@ while (( $# )); do
|
|||
pkgctl_repo "$@"
|
||||
exit 0
|
||||
;;
|
||||
auth)
|
||||
_DEVTOOLS_COMMAND+=" $1"
|
||||
shift
|
||||
# shellcheck source=src/lib/auth.sh
|
||||
source "${_DEVTOOLS_LIBRARY_DIR}"/lib/auth.sh
|
||||
pkgctl_auth "$@"
|
||||
exit 0
|
||||
;;
|
||||
diff)
|
||||
_DEVTOOLS_COMMAND+=" $1"
|
||||
shift
|
||||
|
|
Loading…
Reference in New Issue