Compare commits

..

5 Commits

Author SHA1 Message Date
Mohamed Sohail ff7bb43e03
testing
continuous-integration/drone/push Build is passing Details
2022-01-25 19:01:09 +03:00
lash 96b9289060
Merge remote-tracking branch 'ge/master' into lash/404
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is passing Details
2022-01-24 19:48:38 +00:00
lash e9c64d6deb
Handle 404 error 2022-01-24 19:46:25 +00:00
Mohamed Sohail eb287050dc
ci: add docker build
continuous-integration/drone/push Build is passing Details
ci: update docker registry

ci: update creds

ci: update repo

ci: (fix) repo
2021-11-04 11:51:09 +03:00
Mohamed Sohail 63c4922f08
add: docker and test files 2021-10-27 10:06:23 +03:00
15 changed files with 473 additions and 252 deletions

View File

@ -1,2 +1 @@
tests
venv

View File

@ -1,193 +0,0 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=b8b1
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -1,14 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQGzBAABCAAdFiEEzOLh0tDjat4EBeLQmVuyGBYxO9UFAmHxG1wACgkQmVuyGBYx
O9U1MwwAmQtv/FNlEYCjkvJhCgOKRfAuIR1Sro5qguImlaoalHK2lA6LzORnay5L
hRzYpG6hE7bIn18iRujHsEoxD6tK7QXhIsqpWpZ+nuZnsMTffsGUIqxDWmiYz/Tm
rusw1wCI6xyGWgxjQCpLsQGcCT0oGe6aumGMXNYwjhVnjhQj3Whegx6WXhXtOh1L
vh68PLpWxT59RkKy9WBbFmrujs3I0Xcayj6bfFahnFOacQfqJ5FjgbtGuVVr8M8O
q4kb83O1cDI5gso5Q7/dg3kRjGxr76CQy53C7LXt5URRGHAocC7GMM7AvHcXuTwa
wYenYFkOGhYAJPD/cuCKIoinyDAnGuxh1Lv2cOChoARQ461b7Eg624fqlIZxiowd
lR0Kcm4CcSyHz1A2XSl4vsrscif8RRhKRguE6RlovOz3nHM6MBYZeCWaKJ/rkOsF
u7GWW4VBSJHEeQ9HC29bG7gLd8taOIG+EawGmHPBMq1kxivhq3i/huW9TmI+XAjN
Rls2ZgGi
=/0Oi
-----END PGP SIGNATURE-----

View File

@ -0,0 +1,3 @@
- "^/user(/.*)?$":
read:
- user

View File

@ -0,0 +1,3 @@
- "^/user(/.*)?$":
read:
- user

431
.wellknown/allowed.asc Normal file
View File

@ -0,0 +1,431 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=iVM9
-----END PGP PUBLIC KEY BLOCK-----

View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEQ8p39kGtoDHBJmXLR0YcMbAGvA4FAmHv0RwACgkQR0YcMbAG
vA4SfRAAsTaG8Uf0ICrTbEnHcEqvk/qnB0oM9+Z8pXGDdGn4ajvqmimqAGCUwkBr
KCnXYCNnuWrUFTJOGeuFLJGmI5Zs7aB7ouye/VpPF8mAqGObepFTs9QVujyZ6oPZ
N2t3nc6+gCzQc1CWhFLLXZ6V1PMx5d/CKcTLZcQ02aw3HtTtHw0Bhr+1RN6k7txO
slPnsuko7oPtyBQLC32iNzNhbz6mm3Vdn2OgJZtLBn5Gp/bcLZCHEgN2zmjCk4IM
3wJAksqEPlAnIlgGt23Pcr+8jfPzeaIshss1dumYxfIngoycuVpJLK5EAfuE17YZ
PUsLB9tcu3sPkn1zj8zKLg7opzw8a37vBlmX0mnBDZTe7zRt1AvHXwcUKsuVnvud
RFNEgAOSJ3s22vSFuIx1E43odD0S9fggYIQv3wtGt1YoQDByTqLSccVaMgC9JpHu
9c9kTaOrc2BYpqNTc/Zp3TuyjZSHG8DHXmTA2/ZjosTanfLyZ9r0JFgH/jBXjCPO
6+FiQzKWvXhr8CP06wCrtFAmJHOlu57HCLp4Jpx+LUwVZryUNjrYQUlSI2w8M4t4
2ThuSls6qrW9kQdT9ev/dOggAgpn/pBK/nSHU6lyOIOl2FXMX6aqqzcttmdw9IDw
tSYqfuXM1ITlCtfLKcavtk1lnCCsp8B7rXWN6hvFfaD0ijB5hYk=
=Dwpx
-----END PGP SIGNATURE-----

View File

@ -20,7 +20,7 @@ WORKDIR /home/root/app
RUN apk add --no-cache gnupg
COPY . .
COPY ./.well-known /var/lib/cic-auth-helper/pgp
COPY ./.wellknown /var/lib/cic-auth-helper/pgp
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

View File

@ -1,5 +1,5 @@
[http]
auth_origin =
cors_origin =
auth_realm = ge
hoba_cipher_id = 969
auth_realm = "ge"
hoba_cipher_id = 00

View File

@ -1,5 +1,5 @@
[pgp]
trusted_publickey_fingerprint = CCE2E1D2D0E36ADE0405E2D0995BB21816313BD5
trusted_publickey_fingerprint = 43CA77F641ADA031C12665CB47461C31B006BC0E
import_dir = /var/lib/cic-auth-helper/pgp
publickey_filename = allowed.asc
signature_filename = allowed.asc.sig

View File

@ -1,14 +1,7 @@
class ReverseProxyError(Exception):
class NotFoundError(FileNotFoundError):
def __init__(self, code, msg, headers):
super(ReverseProxyError, self).__init__(msg)
super(NotFoundError, self).__init__(msg)
self.code = code
self.msg = msg
self.headers = headers
class NotFoundError(ReverseProxyError):
pass
class BadRequestError(ReverseProxyError):
pass

View File

@ -5,17 +5,12 @@ import os
import logging
# local imports
from cic_auth_helper.error import (
NotFoundError,
BadRequestError,
)
from cic_auth_helper.error import NotFoundError
logg = logging.getLogger(__name__)
re_x = r'^HTTP_(X_.+)$'
def add_x_headers(env, header_f):
for x in env:
m = re.match(re_x, x)
@ -25,33 +20,29 @@ def add_x_headers(env, header_f):
class ReverseProxyHandler(urllib.request.BaseHandler):
def http_error_404(self, request, response, code, msg, hdrs):
raise NotFoundError(code, msg, response.getheaders())
def http_error_400(self, request, response, code, msg, hdrs):
raise BadRequestError(code, msg, response.getheaders())
class ReverseProxy:
def __init__(self, base_url, ignore_proxy_headers=[]):
self.base_url = base_url
if not isinstance(ignore_proxy_headers, list):
raise ValueError(
'ignore_proxy_headers parameter must be a list of header keys')
raise ValueError('ignore_proxy_headers parameter must be a list of header keys')
self.ignore_proxy_headers = []
for h in ignore_proxy_headers:
self.ignore_proxy_headers.append(h.lower())
self.opener = urllib.request.build_opener(ReverseProxyHandler())
def proxy_pass(self, env, headers=[]):
url = os.path.join(self.base_url, env['REQUEST_URI'][1:])
logg.debug('access ok -> {}'.format(url))
req = urllib.request.Request(url, method=env['REQUEST_METHOD'])
add_x_headers(env, req.add_header)
req.add_header('Content-Type', env.get('CONTENT_TYPE',
'application/octet-stream'))
req.add_header('Content-Type', env.get('CONTENT_TYPE', 'application/octet-stream'))
req.data = env.get('wsgi.input')
res = self.opener.open(req)
@ -73,6 +64,8 @@ class ReverseProxy:
logg.debug('headers after reverse proxy {}'.format(headers))
status = '{} {}'.format(res.status, res.reason)
status = '{} {}'.format(res.status, res.reason)
content = res.read()
return (status, headers, content)

View File

@ -24,10 +24,7 @@ from usumbufu.adapters.uwsgi import UWSGIHTTPAuthorization
from usumbufu.adapters.uwsgi import UWSGIAdapter
# local imports
from cic_auth_helper.error import (
NotFoundError,
ReverseProxyError,
)
from cic_auth_helper.error import NotFoundError
logging.basicConfig(level=logging.WARNING)
logg = logging.getLogger()
@ -104,14 +101,12 @@ def do_auth(env):
http_authenticator.component_id = 'http-hoba'
bearer_authenticator.component_id = 'http-bearer'
try:
logg.debug('registering bearer authenticator with bearer retriever')
authenticator.register(bearer_authenticator)
authenticator.activate(bearer_authenticator.component_id)
except TypeError as e:
logg.debug('not a http bearer request: {}'.format(e))
try:
logg.debug('registering http authenticator with hoba retriever')
authenticator.register(http_authenticator)
authenticator.activate(http_authenticator.component_id)
except TypeError as e:
@ -167,15 +162,10 @@ def application(env, start_response):
if reverse_proxy != None:
try:
(response_status, headers, content) = reverse_proxy.proxy_pass(env, headers)
except ReverseProxyError as e:
response_status = str(e.code) + ' ' + e.msg
headers = headers + e.headers
logg.debug('headers more {}'.format(headers))
except NotFoundError as e:
response_status = '404 ' + e.msg
headers = e.headers
content = b''
# except BadRequestError as e:
# response_status = '400 ' + e.msg
# headers = e.headers
# content = b''
else:
content = str(auth_resource).encode('utf-8')