From b3706260106caaa4f850b3d8b60f8878be4eea92 Mon Sep 17 00:00:00 2001 From: Tony Crowe Date: Tue, 17 Dec 2019 15:36:07 -0700 Subject: [PATCH 1/2] add GiteaAuth class and documentation --- README.md | 26 ++++++++++++++++++++++++++ buildbot_gitea/auth.py | 15 +++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 buildbot_gitea/auth.py diff --git a/README.md b/README.md index 3755e16..8332867 100644 --- a/README.md +++ b/README.md @@ -129,3 +129,29 @@ The parameters are as follows: | `context_pr` | `Renderable` The context message to use, when building on a pull request, allowing to identify from which builder this came, defaults to `Interpolate('buildbot/pull_request/%(prop:buildername)s')` | | `warningAsSuccess` | Treat warnings as build as success to set in the build status of gitea. If false, warnings will be displayed as warnings. | | `verbose` | Perform verbose output | + +## Authentication + +Gitea supports OAuth2 authentication so it is possible to have buildbot communicate to Gitea to authenticate the user. + +`./master.cfg` + +```py +from buildbot_gitea.auth import GiteaAuth +c['www']['auth'] = GiteaAuth( + endpoint="https://your-gitea-host", + client_id 'oauth2-client-id', + client_secret='oauth2-client-secret') +``` + +| Parameter | Value | +| --- | --- | +| `endpoint` | The URL to your Gitea app. | +| `client_id` | The OAuth2 Client ID | +| `client_secret` | The OAuth2 Client Secret | + +Resources: + ++ [Gitea OAuth2 Provider documentation](https://docs.gitea.io/en-us/oauth2-provider/) ++ [Buildbot OAuth2 documentation](https://docs.buildbot.net/current/developer/cls-auth.html?highlight=oauth2#buildbot.www.oauth2.OAuth2Auth) ++ [Buildbot OAuth2 source](https://github.com/buildbot/buildbot/blob/master/master/buildbot/www/oauth2.py) \ No newline at end of file diff --git a/buildbot_gitea/auth.py b/buildbot_gitea/auth.py new file mode 100644 index 0000000..1b74282 --- /dev/null +++ b/buildbot_gitea/auth.py @@ -0,0 +1,15 @@ +from buildbot.www.oauth2 import OAuth2Auth +import urllib.parse + +class GiteaAuth(OAuth2Auth): + name = 'Gitea' + faIcon = 'mug-tea' + + def __init__(self, endpoint, client_id, client_secret): + super(__class__, self).__init__(client_id, client_secret) + self.resourceEndpoint = endpoint + self.authUri = urllib.parse.urljoin(endpoint, 'login/oauth/authorize') + self.tokenUri = urllib.parse.urljoin(endpoint, 'login/oauth/access_token') + + def getUserInfoFromOAuthClient(self, c): + return self.get(c, '/api/v1/user') \ No newline at end of file From d0b9f76be6cd3e1b308a7dc9d4716b89ffbe318c Mon Sep 17 00:00:00 2001 From: Tony Crowe Date: Wed, 18 Dec 2019 11:43:48 -0700 Subject: [PATCH 2/2] shorter urljoin --- buildbot_gitea/auth.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/buildbot_gitea/auth.py b/buildbot_gitea/auth.py index 1b74282..eb8f1d5 100644 --- a/buildbot_gitea/auth.py +++ b/buildbot_gitea/auth.py @@ -1,5 +1,5 @@ from buildbot.www.oauth2 import OAuth2Auth -import urllib.parse +from urllib.parse import urljoin class GiteaAuth(OAuth2Auth): name = 'Gitea' @@ -8,8 +8,8 @@ class GiteaAuth(OAuth2Auth): def __init__(self, endpoint, client_id, client_secret): super(__class__, self).__init__(client_id, client_secret) self.resourceEndpoint = endpoint - self.authUri = urllib.parse.urljoin(endpoint, 'login/oauth/authorize') - self.tokenUri = urllib.parse.urljoin(endpoint, 'login/oauth/access_token') + self.authUri = urljoin(endpoint, 'login/oauth/authorize') + self.tokenUri = urljoin(endpoint, 'login/oauth/access_token') def getUserInfoFromOAuthClient(self, c): return self.get(c, '/api/v1/user') \ No newline at end of file