mirror of
https://git.linux-kernel.at/oliver/ivatar.git
synced 2025-11-11 18:56:23 +00:00
OpenShift online ready
This commit is contained in:
@@ -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
|
||||||
|
|||||||
39
config.py
39
config.py
@@ -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
|
||||||
|
|||||||
@@ -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
21
create.sh
Executable 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
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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})
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user