From 3aebd067cedec1b4620b5ff5abcac284a617165b Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: Jun 26 2024 21:24:37 +0000 Subject: Port submit script to use openidc authentication (#50) This should make authenticated result submission work again. It uses https://github.com/puiterwijk/python-openidc-client , like python-wikitcms and a few other things. When you first submit a result it will trigger a browser auth flow, then store a token for future uses. Signed-off-by: Adam Williamson --- diff --git a/config.example b/config.example index 86847f0..082de43 100644 --- a/config.example +++ b/config.example @@ -35,13 +35,7 @@ anonymous) ;; authenticated) commit=y - if [ -n "$username" ]; then - username="-u $username" - fi - if [ -n "$password" ]; then - password="-p $password" - fi - commithook="./fedora_submit.py $username $password -l $logfile" + commithook="./fedora_submit.py $logfile" ;; *) commithook=/usr/bin/true diff --git a/fedora_submit.py b/fedora_submit.py index 8b12e85..ed4eb9d 100755 --- a/fedora_submit.py +++ b/fedora_submit.py @@ -3,53 +3,41 @@ # Licensed under the terms of the GNU GPL License version 2 from __future__ import print_function -from fedora.client import OpenIdBaseClient -import getpass -import sys, getopt +from openidc_client import OpenIDCClient +from openidc_client.requestsauth import OpenIDCClientAuther +import requests +import sys -username = '' -password = '' -log = '' - -argv = sys.argv[1:] -try: - opts, args = getopt.getopt(argv,"hu:p:l:",["user=","password=", "logfile="]) -except getopt.GetoptError: - print('fedora_submit.py -u [-p ] -l ') - sys.exit(2) -for opt, arg in opts: - if opt == '-h': - print('fedora_submit.py -u [-p ] -l ') - sys.exit() - elif opt in ("-u", "--user"): - username = arg - elif opt in ("-p", "--password"): - password = arg - elif opt in ("-l", "--logfile"): - log = arg - -if username == '' or log == '': - print('fedora_submit.py -u [-p ] -l ') +log = sys.argv[1:] +if len(log) != 1: + print('fedora_submit.py ') sys.exit(2) -if password == '': - password = getpass.getpass('FAS password: ') +log = log[0] +print(log) -submitclient = OpenIdBaseClient( - base_url='https://apps.fedoraproject.org/kerneltest/', - login_url='https://apps.fedoraproject.org/kerneltest/login', - username=username, +client = OpenIDCClient( + app_identifier="kerneltest", + id_provider=f"https://id.fedoraproject.org/openidc/", + id_provider_mapping={"Token": "Token", "Authorization": "Authorization"}, + client_id="kerneltest-client", + client_secret="notsecret", + useragent="kerneltest-client", ) - -submitclient.login( - submitclient.username, - password=password -) - -req = submitclient.send_request( - 'https://apps.fedoraproject.org/kerneltest/upload/anonymous', - verb='POST', - auth=True, - files= { 'test_result': ('logfile', open(log, 'rb'), 'text/x-log'),} + +req = requests.post( + "https://kerneltest.fedoraproject.org/upload/anonymous", + auth=OpenIDCClientAuther( + client, + [ + "openid", + "email", + "profile", + "https://id.fedoraproject.org/scope/groups", + "https://id.fedoraproject.org/scope/agreements", + "https://id.fedoraproject.org/scope/fas-attributes", + ] + ), + files={ 'test_result': ('logfile', open(log, 'rb'), 'text/plain'),}, ) - -print(req.message) + +print(req.text)