From d7b31c443aa6c2d6b47165675540a520f992de5b Mon Sep 17 00:00:00 2001 From: Tomislav R Date: Wed, 4 May 2016 20:11:15 +0200 Subject: [PATCH 1/4] Updated INSTALLATION doc --- INSTALLATION.rst | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/INSTALLATION.rst b/INSTALLATION.rst index 26a4ae0e..3ea52569 100644 --- a/INSTALLATION.rst +++ b/INSTALLATION.rst @@ -43,6 +43,21 @@ After You have complited the task create a pull request and ask someone to revie `read more about getting code from upstream here `_ +*merging your branch* +**IMPORTANT** +Before You make a pull request from Your forked branch to the ungleich make sure You did merge and resolve any conflicts You may find and that the application is running bug free. +Also You can run + +``./manage test`` + +To merge upstream branch run this git commands. + +``git fetch upstream`` +``git checkout your_feature_branch`` +``git merge remotes/upstream/develop`` + + + From 7faf08bfdeaabfe4b2c68b222547b94edf687b4f Mon Sep 17 00:00:00 2001 From: Tomislav R Date: Wed, 4 May 2016 20:12:58 +0200 Subject: [PATCH 2/4] Updated INSTALLATION doc --- INSTALLATION.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/INSTALLATION.rst b/INSTALLATION.rst index 3ea52569..3696b446 100644 --- a/INSTALLATION.rst +++ b/INSTALLATION.rst @@ -45,15 +45,19 @@ After You have complited the task create a pull request and ask someone to revie *merging your branch* **IMPORTANT** + Before You make a pull request from Your forked branch to the ungleich make sure You did merge and resolve any conflicts You may find and that the application is running bug free. Also You can run ``./manage test`` + To merge upstream branch run this git commands. ``git fetch upstream`` + ``git checkout your_feature_branch`` + ``git merge remotes/upstream/develop`` From 6abf5b1b53f2a5c4dbd5b048a64c760b336eca1e Mon Sep 17 00:00:00 2001 From: Tomislav R Date: Wed, 4 May 2016 20:13:31 +0200 Subject: [PATCH 3/4] Updated INSTALLATION doc --- INSTALLATION.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/INSTALLATION.rst b/INSTALLATION.rst index 3696b446..ee36b3ad 100644 --- a/INSTALLATION.rst +++ b/INSTALLATION.rst @@ -44,7 +44,7 @@ After You have complited the task create a pull request and ask someone to revie `read more about getting code from upstream here `_ *merging your branch* -**IMPORTANT** +(**IMPORTANT**) Before You make a pull request from Your forked branch to the ungleich make sure You did merge and resolve any conflicts You may find and that the application is running bug free. Also You can run From fbbee2839c5f91ec73dc759eb6595c96a4e7c470 Mon Sep 17 00:00:00 2001 From: Tomislav R Date: Sat, 7 May 2016 23:05:46 +0200 Subject: [PATCH 4/4] resolve base.py conflict --- dynamicweb/settings/base.py | 76 ++++++++++++++++++------------------ dynamicweb/settings/local.py | 8 +--- dynamicweb/settings/prod.py | 2 + membership/models.py | 7 ++-- utils/mailer.py | 52 ++++++++++++++++++++++++ utils/stripe_utils.py | 4 +- 6 files changed, 98 insertions(+), 51 deletions(-) create mode 100644 utils/mailer.py diff --git a/dynamicweb/settings/base.py b/dynamicweb/settings/base.py index 9d64dc60..54e39c9a 100644 --- a/dynamicweb/settings/base.py +++ b/dynamicweb/settings/base.py @@ -30,7 +30,7 @@ dotenv.read_dotenv("{0}/.env".format(PROJECT_DIR)) SITE_ID = 1 APP_ROOT_ENDPOINT = "/" -APPEND_SLASH=True +APPEND_SLASH = True LOGIN_URL = None LOGOUT_URL = None @@ -43,7 +43,7 @@ SECRET_KEY = env('DJANGO_SECRET_KEY') # Application definition INSTALLED_APPS = ( - #1st migrate + # 1st migrate 'membership', 'django.contrib.admin', 'django.contrib.auth', @@ -79,26 +79,26 @@ INSTALLED_APPS = ( 'menus', # helper for model independent hierarchical website navigation 'cmsplugin_filer_image', - #2nd migrate + # 2nd migrate # django-cms plugins - 'djangocms_file', - 'djangocms_picture', - 'djangocms_video', - # 'djangocms_flash', - # 'djangocms_googlemap', - # 'djangocms_inherit', - # 'djangocms_link', - # 'djangocms_teaser', - 'djangocms_page_meta', - 'djangocms_text_ckeditor', - 'djangocms_admin_style', - 'cmsplugin_filer_file', - 'cmsplugin_filer_folder', - 'cmsplugin_filer_link', - # 'cmsplugin_filer_teaser', - 'cmsplugin_filer_video', + 'djangocms_file', + 'djangocms_picture', + 'djangocms_video', + # 'djangocms_flash', + # 'djangocms_googlemap', + # 'djangocms_inherit', + # 'djangocms_link', + # 'djangocms_teaser', + 'djangocms_page_meta', + 'djangocms_text_ckeditor', + 'djangocms_admin_style', + 'cmsplugin_filer_file', + 'cmsplugin_filer_folder', + 'cmsplugin_filer_link', + # 'cmsplugin_filer_teaser', + 'cmsplugin_filer_video', # - #blog + # blog # versioning 'reversion', # ungleich @@ -128,18 +128,17 @@ MIDDLEWARE_CLASSES = ( ROOT_URLCONF = 'dynamicweb.urls' - TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [os.path.join(PROJECT_DIR,'cms_templates/'), - os.path.join(PROJECT_DIR,'cms_templates/djangocms_blog/'), - os.path.join(PROJECT_DIR,'membership'), - os.path.join(PROJECT_DIR,'ungleich/templates/djangocms_blog/'), - os.path.join(PROJECT_DIR,'ungleich/templates/cms/ungleichch'), - os.path.join(PROJECT_DIR,'ungleich/templates/ungleich') + 'DIRS': [os.path.join(PROJECT_DIR, 'cms_templates/'), + os.path.join(PROJECT_DIR, 'cms_templates/djangocms_blog/'), + os.path.join(PROJECT_DIR, 'membership'), + os.path.join(PROJECT_DIR, 'ungleich/templates/djangocms_blog/'), + os.path.join(PROJECT_DIR, 'ungleich/templates/cms/ungleichch'), + os.path.join(PROJECT_DIR, 'ungleich/templates/ungleich') - ], + ], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ @@ -170,7 +169,7 @@ CMS_TEMPLATES = ( ('letscowork.html', gettext('DG.CoWork')), # ('detail.html', gettext('DG.Detail')), ('one_column.html', gettext('DG.OneColumn')), - #ungleich + # ungleich ('blog_ungleich.html', gettext('Blog')), ('page.html', gettext('Page')), ) @@ -204,8 +203,8 @@ LANGUAGES = ( LANGUAGE_CODE = 'en-us' LOCALE_PATHS = [ - - os.path.join(PROJECT_DIR,'digitalglarus/locale'), + + os.path.join(PROJECT_DIR, 'digitalglarus/locale'), ] CMS_PLACEHOLDER_CONF = { @@ -332,9 +331,9 @@ STATICFILES_FINDERS = ( 'compressor.finders.CompressorFinder', ) -#COMPRESS_PRECOMPILERS = ( +# COMPRESS_PRECOMPILERS = ( # ('text/less', 'lesscpy {infile}'), -#) +# ) THUMBNAIL_PROCESSORS = ( 'easy_thumbnails.processors.colorspace', @@ -446,14 +445,15 @@ AUTH_USER_MODEL = 'membership.CustomUser' # PAYMENT -STRIPE_API_PUBLIC_KEY = 'pk_test_QqBZ50Am8KOxaAlOxbcm9Psl' # used in frontend to call from user browser -STRIPE_API_PRIVATE_KEY = 'sk_test_dqAmbKAij12QCGfkYZ3poGt2' # used in backend payment STRIPE_DESCRIPTION_ON_PAYMENT = "Payment for ungleich GmbH services" # EMAIL MESSAGES REGISTRATION_MESSAGE = {'subject': "Validation mail", - 'message': 'Please validate Your account under this link http://localhost:8000/en-us/validate/{}', - 'from': 'test@test.com'} + 'message': 'Thank You for registering for account on Digital Glarus.\nPlease verify Your account under following link http://{host}/en-us/digitalglarus/login/validate/{slug}', + } + +STRIPE_API_PRIVATE_KEY = env('STRIPE_API_PRIVATE_KEY') +STRIPE_API_PUBLIC_KEY = env('STRIPE_API_PUBLIC_KEY') DEBUG = True @@ -461,5 +461,3 @@ if DEBUG: from .local import * else: from .prod import * -#dont migrate test -# SOUTH_TESTS_MIGRATE = False diff --git a/dynamicweb/settings/local.py b/dynamicweb/settings/local.py index e8907acc..fd11ccb1 100644 --- a/dynamicweb/settings/local.py +++ b/dynamicweb/settings/local.py @@ -1,15 +1,9 @@ from .base import * - +REGISTRATION_MESSAGE['message'] = REGISTRATION_MESSAGE['message'].format(host='dynamicweb-development.ungleich.ch',slug='{slug}') ALLOWED_HOSTS = [ "*" ] -# DATABASES = { -# 'default': { -# 'ENGINE': 'django.db.backends.sqlite3', -# 'NAME': 'app.db', -# } -# } EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' CACHES = { diff --git a/dynamicweb/settings/prod.py b/dynamicweb/settings/prod.py index 2577bfe5..1f21ca46 100644 --- a/dynamicweb/settings/prod.py +++ b/dynamicweb/settings/prod.py @@ -8,6 +8,8 @@ ADMINS = ( MANAGERS = ADMINS +REGISTRATION_MESSAGE['message'] = REGISTRATION_MESSAGE['message'].format(host='digitalglarus.ungleich.ch',slug='{slug}') + ALLOWED_HOSTS = [ ".ungleich.ch", "digital.glarus.ungleich.ch" , diff --git a/membership/models.py b/membership/models.py index 75962660..d9861166 100644 --- a/membership/models.py +++ b/membership/models.py @@ -4,12 +4,12 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from django.contrib.auth.models import User, AbstractBaseUser, BaseUserManager, AbstractUser from django.contrib.auth.hashers import make_password -from django.core.mail import send_mail from django.core.validators import RegexValidator from django.contrib.auth.models import User from django.contrib.sites.models import Site from utils.stripe_utils import StripeUtils +from utils.mailer import DigitalGlarusRegistrationMailer REGISTRATION_MESSAGE = {'subject': "Validation mail", 'message': 'Please validate Your account under this link http://localhost:8000/en-us/digitalglarus/login/validate/{}', @@ -72,9 +72,8 @@ class CustomUser(AbstractBaseUser): if not user: user = cls.objects.create_user(name=name, email=email, password=password) if user: - send_mail(REGISTRATION_MESSAGE['subject'], - REGISTRATION_MESSAGE['message'].format(user.validation_slug), - REGISTRATION_MESSAGE['from'], [user.email], fail_silently=False) + dg = DigitalGlarusRegistrationMailer(user.validation_slug) + dg.send_mail(to=user.email) return user else: return None diff --git a/utils/mailer.py b/utils/mailer.py new file mode 100644 index 00000000..a12ffba6 --- /dev/null +++ b/utils/mailer.py @@ -0,0 +1,52 @@ +import six +from django.core.mail import send_mail + +from django.conf import settings + + +class BaseMailer(object): + def __init__(self): + self._slug = None + self.no_replay_mail = 'no-replay@ungleich.ch' + + if not hasattr(self, '_to'): + self._to = None + + @property + def slug(self): + return self._slug + + @slug.setter + def slug(self, val): + assert isinstance(val, six.string_types), "slug is not string: %r" % val + self._slug = val + + @property + def registration(self): + return self.message + + @registration.setter + def registration(self, val): + msg = "registration is not dict with fields subject,message" + assert type(val) is dict, msg + assert val.get('subject') and val.get('message'), msg + self._message, self._subject, self._from = ( + val.get('message'), val.get('subject'), val.get('from')) + assert isinstance(self.slug, six.string_types), 'slug not set' + + def send_mail(self, to=None): + if not to: + to = self._to + if not self.message: + raise NotImplementedError + send_mail(self._subject, self._message, self.no_replay_mail, [to]) + + +class DigitalGlarusRegistrationMailer(BaseMailer): + message = settings.REGISTRATION_MESSAGE + + def __init__(self, slug): + self.slug = slug + self.registration = self.message + self._message = self._message.format(slug=self._slug) + super().__init__() diff --git a/utils/stripe_utils.py b/utils/stripe_utils.py index ce14d417..fb0a328e 100644 --- a/utils/stripe_utils.py +++ b/utils/stripe_utils.py @@ -1,6 +1,5 @@ import stripe from django.conf import settings - stripe.api_key = settings.STRIPE_API_PRIVATE_KEY @@ -122,3 +121,6 @@ class StripeUtils(object): name=name, currency=self.CURRENCY, id=id) + + +