OpenShift online ready

This commit is contained in:
Oliver Falk
2018-06-12 09:18:36 +02:00
parent 4a899cc28a
commit 47d65253eb
8 changed files with 96 additions and 22 deletions

View File

@@ -2,7 +2,7 @@ image: centos:centos7
before_script: before_script:
- yum install -y -t https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm - yum install -y -t https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
- yum -y -t install python34 python34-pip python34-devel unzip mysql-devel gcc git - yum -y -t install python34 python34-pip python34-devel unzip mysql-devel gcc git openldap-devel
- pip3 install virtualenv --upgrade - pip3 install virtualenv --upgrade
- virtualenv -p python3 /tmp/.virtualenv - virtualenv -p python3 /tmp/.virtualenv
- source /tmp/.virtualenv/bin/activate - source /tmp/.virtualenv/bin/activate

View File

@@ -1,10 +1,19 @@
'''
Configuration overrides for settings.py
'''
import os import os
from ivatar.settings import BASE_DIR from socket import gethostname, gethostbyname
from django.urls import reverse_lazy from django.urls import reverse_lazy
from ivatar.settings import BASE_DIR
ADMIN_USERS = [] ADMIN_USERS = []
ALLOWED_HOSTS = [ ALLOWED_HOSTS = [
'localhost', 'localhost',
gethostname(),
gethostbyname(gethostname()),
'.openshiftapps.com',
'127.0.0.1',
] ]
from ivatar.settings import INSTALLED_APPS # noqa from ivatar.settings import INSTALLED_APPS # noqa
@@ -12,6 +21,7 @@ INSTALLED_APPS.extend([
'django_extensions', 'django_extensions',
'django_openid_auth', 'django_openid_auth',
'bootstrap4', 'bootstrap4',
'anymail',
'ivatar', 'ivatar',
'ivatar.ivataraccount', 'ivatar.ivataraccount',
]) ])
@@ -40,7 +50,6 @@ TEMPLATES[0]['OPTIONS']['context_processors'].append(
OPENID_CREATE_USERS = True OPENID_CREATE_USERS = True
OPENID_UPDATE_DETAILS_FROM_SREG = True OPENID_UPDATE_DETAILS_FROM_SREG = True
SITE_URL = 'https://ivatar.io'
SITE_NAME = 'ivatar' SITE_NAME = 'ivatar'
IVATAR_VERSION = '0.1' IVATAR_VERSION = '0.1'
@@ -72,5 +81,31 @@ BOOTSTRAP4 = {
}, },
} }
ANYMAIL = {
'MAILGUN_API_KEY': '9ea63b269bf14734e928f7aa99f7b891-47317c98-19591231',
'MAILGUN_SENDER_DOMAIN': 'sandbox86e598eae2de47bcac3926e6d24d789a.mailgun.org',
}
EMAIL_BACKEND = 'anymail.backends.mailgun.EmailBackend'
DEFAULT_FROM_EMAIL = 'ivatar@linux-kernel.at'
try:
from ivatar.settings import DATABASES
except Exception: # pragma: no cover
DATABASES = [] # pragma: no cover
if not 'default' in DATABASES:
DATABASES['default'] = {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
if 'MYSQL_DATABASE' in os.environ:
DATABASES['default'] = {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ['MYSQL_DATABASE'],
'USER': os.environ['MYSQL_USER'],
'PASSWORD': os.environ['MYSQL_PASSWORD'],
'HOST': 'mysql',
}
if os.path.isfile(os.path.join(BASE_DIR, 'config_local.py')): if os.path.isfile(os.path.join(BASE_DIR, 'config_local.py')):
from config_local import * # noqa # flake8: noqa # NOQA # pragma: no cover from config_local import * # noqa # flake8: noqa # NOQA # pragma: no cover

View File

@@ -6,5 +6,4 @@ from ivatar.settings import TEMPLATES # noqa
SESSION_COOKIE_SECURE = False SESSION_COOKIE_SECURE = False
DEBUG = True DEBUG = True
SITE_URL = 'http://localhost:8383'
TEMPLATES[0]['OPTIONS']['debug'] = True TEMPLATES[0]['OPTIONS']['debug'] = True

21
create.sh Executable file
View File

@@ -0,0 +1,21 @@
#!/bin/sh
oc new-project ivatar
# Take care, the following environment variable must be set either in bashrc/profile or locally in this session
oc secrets new-basicauth lkernat-gitlab-openshift-falko-access-token --password=$LKERNAT_GITLAB_OPENSHIFT_ACCESS_TOKEN
oc secrets add serviceaccount/builder secrets/lkernat-gitlab-openshift-falko-access-token
MYSQL_PASSWORD=`openssl rand -base64 16`
MYSQL_ROOT_PASSWORD=`openssl rand -base64 16`
oc new-app --source-secret=lkernat-gitlab-openshift-falko-access-token \
python~https://git.linux-kernel.at/oliver/ivatar.git \
mysql-persistent \
--group=python+mysql-persistent \
-e MYSQL_USER=ivatar \
-p MYSQL_USER=ivatar \
-e MYSQL_PASSWORD=$MYSQL_PASSWORD \
-p MYSQL_PASSWORD=$MYSQL_PASSWORD \
-e MYSQL_DATABASE=ivatar \
-p MYSQL_DATABASE=ivatar \
-e MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD \
-p MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD
oc expose svc/ivatar

View File

@@ -2,7 +2,7 @@
Default: useful variables for the base page templates. Default: useful variables for the base page templates.
''' '''
from ivatar.settings import IVATAR_VERSION, SITE_NAME, SITE_URL from ivatar.settings import IVATAR_VERSION, SITE_NAME
from ipware import get_client_ip from ipware import get_client_ip
@@ -19,5 +19,5 @@ def basepage(request):
context['client_ip'] = client_ip context['client_ip'] = client_ip
context['ivatar_version'] = IVATAR_VERSION context['ivatar_version'] = IVATAR_VERSION
context['site_name'] = SITE_NAME context['site_name'] = SITE_NAME
context['site_url'] = SITE_URL context['site_url'] = request.build_absolute_uri('/')
return context return context

View File

@@ -35,10 +35,11 @@ class AddEmailForm(forms.Form):
# TODO: Domain restriction as in libravatar? # TODO: Domain restriction as in libravatar?
return self.cleaned_data['email'].lower() return self.cleaned_data['email'].lower()
def save(self, user): def save(self, request):
''' '''
Save the model, ensuring some safety Save the model, ensuring some safety
''' '''
user = request.user
# Enforce the maximum number of unconfirmed emails a user can have # Enforce the maximum number of unconfirmed emails a user can have
num_unconfirmed = user.unconfirmedemail_set.count() num_unconfirmed = user.unconfirmedemail_set.count()
@@ -66,7 +67,7 @@ class AddEmailForm(forms.Form):
unconfirmed.user = user unconfirmed.user = user
unconfirmed.save() unconfirmed.save()
link = settings.SITE_URL + \ link = request.build_absolute_uri('/') + \
reverse( reverse(
'confirm_email', 'confirm_email',
kwargs={'verification_key': unconfirmed.verification_key}) kwargs={'verification_key': unconfirmed.verification_key})

View File

@@ -21,7 +21,7 @@ from .forms import AddEmailForm, UploadPhotoForm, AddOpenIDForm
from .models import UnconfirmedEmail, ConfirmedEmail, Photo from .models import UnconfirmedEmail, ConfirmedEmail, Photo
from .models import UnconfirmedOpenId, ConfirmedOpenId, DjangoOpenIDStore from .models import UnconfirmedOpenId, ConfirmedOpenId, DjangoOpenIDStore
from ivatar.settings import MAX_NUM_PHOTOS, MAX_PHOTO_SIZE, SITE_URL from ivatar.settings import MAX_NUM_PHOTOS, MAX_PHOTO_SIZE
import io import io
@@ -91,7 +91,7 @@ class AddEmailView(SuccessMessageMixin, FormView):
success_url = reverse_lazy('profile') success_url = reverse_lazy('profile')
def form_valid(self, form): def form_valid(self, form):
if not form.save(self.request.user): if not form.save(self.request):
messages.error(self.request, _('Address not added')) messages.error(self.request, _('Address not added'))
else: else:
messages.success(self.request, _('Address added successfully')) messages.success(self.request, _('Address added successfully'))
@@ -447,7 +447,7 @@ class RedirectOpenIDView(View):
messages.error(request, _('OpenID discovery failed')) messages.error(request, _('OpenID discovery failed'))
return HttpResponseRedirect(reverse_lazy('profile')) return HttpResponseRedirect(reverse_lazy('profile'))
realm = SITE_URL # pragma: no cover realm = request.build_absolute_uri('/') # pragma: no cover
return_url = realm + reverse( # pragma: no cover return_url = realm + reverse( # pragma: no cover
'confirm_openid', args=[kwargs['openid_id']]) 'confirm_openid', args=[kwargs['openid_id']])
return HttpResponseRedirect( # pragma: no cover return HttpResponseRedirect( # pragma: no cover
@@ -461,7 +461,7 @@ class ConfirmOpenIDView(View): # pragma: no cover
def do_request(self, data, *args, **kwargs): def do_request(self, data, *args, **kwargs):
session = {'id': self.request.session.session_key} session = {'id': self.request.session.session_key}
current_url = SITE_URL + self.request.path current_url = self.request.build_absolute_uri('/') + self.request.path
openid_consumer = consumer.Consumer(session, DjangoOpenIDStore()) openid_consumer = consumer.Consumer(session, DjangoOpenIDStore())
info = openid_consumer.complete(data, current_url) info = openid_consumer.complete(data, current_url)
if info.status == consumer.FAILURE: if info.status == consumer.FAILURE:

View File

@@ -1,14 +1,32 @@
autopep8
bcrypt
defusedxml defusedxml
Django Django
git+https://github.com/ofalk/django-openid-auth django-auth-ldap
python3-openid
pytz
six
Pillow
py3dns
bcrypt
django-extensions
PyMySQL
django-ipware
django-bootstrap4 django-bootstrap4
django-coverage-plugin
django-extensions
django-ipware
django-user-accounts
fabric
flake8-respect-noqa
git+https://github.com/ofalk/django-openid-auth
Pillow
pip
py3dns
pydocstyle
pyLibravatar pyLibravatar
pylint
PyMySQL
python3-openid
python-coveralls
python-language-server
pytz
rope
setuptools
six
social-auth-app-django
wheel
yapf
django-anymail[mailgun]
mysqlclient