From d7e60d3ba3bf8a1a6ffad34bf06e158d1796be7a Mon Sep 17 00:00:00 2001 From: Earl Warren Date: Sun, 20 Jul 2025 10:24:40 +0200 Subject: [PATCH] chore: upgrade forgejo-curl.sh --- .forgejo/workflows/integration.yml | 1 + cascading-pr.sh | 4 +- forgejo-curl.sh | 241 ++++++++++++++--------------- tests/run.sh | 4 +- 4 files changed, 125 insertions(+), 125 deletions(-) diff --git a/.forgejo/workflows/integration.yml b/.forgejo/workflows/integration.yml index a91ef4e..471dddd 100644 --- a/.forgejo/workflows/integration.yml +++ b/.forgejo/workflows/integration.yml @@ -27,6 +27,7 @@ jobs: runner_config=/tmp/runner-config.yaml sed -e 's|file: .runner|file: ${{ steps.forgejo.outputs.runner-file }}|' < tests/runner-config.yaml > $runner_config FORGEJO_RUNNER_CONFIG=$runner_config forgejo-runner.sh reload + export PATH=$(pwd):$PATH tests/run.sh --verbose --host_port ${{ steps.forgejo.outputs.host-port }} --url ${{ steps.forgejo.outputs.url }} --token ${{ steps.forgejo.outputs.token }} - name: full logs diff --git a/cascading-pr.sh b/cascading-pr.sh index 8d3e227..7dd7180 100755 --- a/cascading-pr.sh +++ b/cascading-pr.sh @@ -14,7 +14,7 @@ function repo_login() { local direction="$1" local repo=${options[${direction}_repo]} ( - export DOT=$TMPDIR/$repo + export DOT_FORGEJO_CURL=$TMPDIR/$repo forgejo-curl.sh logout forgejo-curl.sh --token "${options[${direction}_token]}" login "${options[${direction}_url]}" ) @@ -23,7 +23,7 @@ function repo_login() { function repo_curl() { local repo=$1 shift - DOT=$TMPDIR/$repo forgejo-curl.sh "$@" + DOT_FORGEJO_CURL=$TMPDIR/$repo forgejo-curl.sh "$@" } function default_branch() { diff --git a/forgejo-curl.sh b/forgejo-curl.sh index ef3d996..ee61723 100755 --- a/forgejo-curl.sh +++ b/forgejo-curl.sh @@ -1,13 +1,14 @@ #!/bin/bash # SPDX-License-Identifier: MIT -VERSION=1.0.0 -SELF_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +VERSION=1.0.1 +SELF_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" VERBOSE=false DEBUG=false : ${EXIT_ON_ERROR:=true} : ${TOKEN_NAME:=forgejo-curl} -: ${DOT:=$HOME/.forgejo-curl} +: ${DOT_FORGEJO_CURL:=$HOME/.forgejo-curl} +: ${DOT:=$DOT_FORGEJO_CURL} function debug() { DEBUG=true @@ -28,8 +29,8 @@ function log_error() { } function log_verbose() { - if $VERBOSE; then - log "$@" + if $VERBOSE ; then + log "$@" fi } @@ -39,20 +40,20 @@ function log_info() { function fatal_error() { log_error "$@" - if $EXIT_ON_ERROR; then - exit 1 + if $EXIT_ON_ERROR ; then + exit 1 else - return 1 + return 1 fi } function dot_ensure() { - mkdir -p $DOT + mkdir -p $DOT_FORGEJO_CURL } HEADER_JSON='-H Content-Type:application/json' -HEADER_TOKEN="-H @$DOT/header-token" -HEADER_CSRF="-H @$DOT/header-csrf" +HEADER_TOKEN="-H @$DOT_FORGEJO_CURL/header-token" +HEADER_CSRF="-H @$DOT_FORGEJO_CURL/header-csrf" function api() { client $HEADER_TOKEN "$@" @@ -66,44 +67,41 @@ function login_api() { local user="$1" password="$2" token="$3" scopes="${4:-[\"all\"]}" url="$5" dot_ensure - if test -s $DOT/token; then - log_info "already logged in, ignored" - return + if test -s $DOT_FORGEJO_CURL/token ; then + log_info "already logged in, ignored" + return fi - if test -z "$token"; then - log_verbose curl -sS -X DELETE --user "${user}:${password}" "${url}/api/v1/users/$user/tokens/${TOKEN_NAME}" -o /dev/null -w "%{http_code}" - local basic="${user:-unknown}:${password:-unknown}" - local status=$(curl -sS -X DELETE --user "${basic}" "${url}/api/v1/users/$user/tokens/${TOKEN_NAME}" -o /dev/null -w "%{http_code}") - if test "${status}" != 404 -a "${status}" != 204; then - fatal_error permission denied, the user or password are probably incorrect, try again with --verbose - return 1 - fi - token=$(client $HEADER_JSON --user "${basic}" --data-raw '{"name":"'${TOKEN_NAME}'","scopes":'${scopes}'}' "${url}/api/v1/users/${user}/tokens" | jq --raw-output .sha1) + if test -z "$token" ; then + log_verbose curl -sS -X DELETE --user "${user}:${password}" "${url}/api/v1/users/$user/tokens/${TOKEN_NAME}" -o /dev/null -w "%{http_code}" + local basic="${user:-unknown}:${password:-unknown}" + local status=$(curl -sS -X DELETE --user "${basic}" "${url}/api/v1/users/$user/tokens/${TOKEN_NAME}" -o /dev/null -w "%{http_code}") + if test "${status}" != 404 -a "${status}" != 204 ; then + fatal_error permission denied, the user or password are probably incorrect, try again with --verbose + return 1 + fi + token=$(client $HEADER_JSON --user "${basic}" --data-raw '{"name":"'${TOKEN_NAME}'","scopes":'${scopes}'}' "${url}/api/v1/users/${user}/tokens" | jq --raw-output .sha1) fi - if [[ "$token" =~ ^@ ]]; then - cp "${token##@}" $DOT/token + if [[ "$token" =~ ^@ ]] ; then + cp "${token##@}" $DOT_FORGEJO_CURL/token else - echo "$token" >$DOT/token + echo "$token" > $DOT_FORGEJO_CURL/token fi - ( - echo -n "Authorization: token " - cat $DOT/token - ) >$DOT/header-token + ( echo -n "Authorization: token " ; cat $DOT_FORGEJO_CURL/token ) > $DOT_FORGEJO_CURL/header-token # - # Verify it works + # Verify the token works # local status=$(api -w "%{http_code}" -o /dev/null "${url}/api/v1/user") - if test "${status}" != 200; then - fatal_error "${url}/api/v1/user returns status code '${status}', the token is invalid, $0 logout and login again" - return 1 + if test "${status}" != 200 ; then + fatal_error "${url}/api/v1/user returns status code '${status}', the token is invalid, $0 logout and login again" + return 1 fi } function client() { - log_verbose curl --cookie $DOT/cookies -f -sS "$@" - if ! curl --cookie $DOT/cookies -f -sS "$@"; then - fatal_error + log_verbose curl --cookie $DOT_FORGEJO_CURL/cookies -f -sS "$@" + if ! curl --cookie $DOT_FORGEJO_CURL/cookies -f -sS "$@" ; then + fatal_error fi } @@ -112,19 +110,19 @@ function web() { } function client_update_cookies() { - log_verbose curl --cookie-jar $DOT/cookies --cookie $DOT/cookies -w "%{http_code}" -f -sS "$@" - local status=$(curl --cookie-jar $DOT/cookies --cookie $DOT/cookies -w "%{http_code}" -f -sS "$@") - if ! test "${status}" = 200 -o "${status}" = 303; then - fatal_error + log_verbose curl --cookie-jar $DOT_FORGEJO_CURL/cookies --cookie $DOT_FORGEJO_CURL/cookies -w "%{http_code}" -f -sS "$@" + local status=$(curl --cookie-jar $DOT_FORGEJO_CURL/cookies --cookie $DOT_FORGEJO_CURL/cookies -w "%{http_code}" -f -sS "$@") + if ! test "${status}" = 200 -o "${status}" = 303 ; then + fatal_error fi } function login_client() { local user="$1" password="$2" url="$3" - if test -z "$password"; then - log_verbose "no password, web will not be authenticated" - return + if test -z "$password" ; then + log_verbose "no password, web will not be authenticated" + return fi dot_ensure @@ -135,23 +133,23 @@ function login_client() { # # The login stores a cookie # - client_update_cookies -X POST --data "user_name=${user}" --data "password=${password}" "${url}/user/login" -o $DOT/login.html + client_update_cookies -X POST --data "user_name=${user}" --data "password=${password}" "${url}/user/login" -o $DOT_FORGEJO_CURL/login.html # # Get the CSRF for reuse by other requests # client_update_cookies -o /dev/null "${url}/user/login" - local csrf=$(sed -n -e '/csrf/s/.*csrf\t//p' $DOT/cookies) - echo "X-Csrf-Token: $csrf" >$DOT/header-csrf + local csrf=$(sed -n -e '/csrf/s/.*csrf\t//p' $DOT_FORGEJO_CURL/cookies) + echo "X-Csrf-Token: $csrf" > $DOT_FORGEJO_CURL/header-csrf # # Verify it works # local status=$(web -o /dev/null -w "%{http_code}" "${url}/user/settings") - if test "${status}" != 200; then - grep -C 1 flash-error $DOT/login.html - if ${DEBUG}; then - cat $DOT/login.html - fi - fatal_error login failed, the user or password are probably incorrect, try again with --verbose + if test "${status}" != 200 ; then + grep -C 1 flash-error $DOT_FORGEJO_CURL/login.html + if ${DEBUG} ; then + cat $DOT_FORGEJO_CURL/login.html + fi + fatal_error login failed, the user or password are probably incorrect, try again with --verbose fi } @@ -162,12 +160,13 @@ function login() { } function logout() { - rm -f $DOT/* - if test -d $DOT; then - rmdir $DOT + rm -f $DOT_FORGEJO_CURL/* + if test -d $DOT_FORGEJO_CURL ; then + rmdir $DOT_FORGEJO_CURL fi } + function usage() { cat >&2 <