added new banner image for the indiegogo campaign
This commit is contained in:
parent
0b506d19f2
commit
8f4f67c31e
|
@ -11,7 +11,7 @@ RUN \
|
||||||
apt-get upgrade -y && \
|
apt-get upgrade -y && \
|
||||||
apt-get install -y libssl-dev libffi-dev && \
|
apt-get install -y libssl-dev libffi-dev && \
|
||||||
apt-get install -y software-properties-common python-software-properties && \
|
apt-get install -y software-properties-common python-software-properties && \
|
||||||
apt-get install -y python-MySQLdb python-psycopg2 python-requests-oauthlib python-pip python-dev python-requests python-lxml python-flask python-flask-login && \
|
apt-get install -y python-MySQLdb python-psycopg2 python-requests-oauthlib python-pip python-dev python-dateutil python-requests python-lxml python-flask python-flask-login && \
|
||||||
apt-get install -y cssmin slimit && \
|
apt-get install -y cssmin slimit && \
|
||||||
add-apt-repository -y ppa:oly/ppa && \
|
add-apt-repository -y ppa:oly/ppa && \
|
||||||
apt-get update && \
|
apt-get update && \
|
||||||
|
|
|
@ -36,15 +36,13 @@ Both paypal and gocardless clearly show that you are using the sandbox in the ur
|
||||||
for paypal you can use this email and password
|
for paypal you can use this email and password
|
||||||
|
|
||||||
email = contact-buyer@maidstone-hackspace.org.uk
|
email = contact-buyer@maidstone-hackspace.org.uk
|
||||||
password = mhackspace
|
password = Mhackspace
|
||||||
|
|
||||||
To test the gocardless integration you can use these card details
|
To test the gocardless integration you can use these card details
|
||||||
|
|
||||||
sortcode = 200000
|
sortcode = 200000
|
||||||
account number = 55779911
|
account number = 55779911
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Run locally with uwsgi on port 9090
|
Run locally with uwsgi on port 9090
|
||||||
|
|
||||||
uwsgi --plugins python --http-socket :9090 -w wsgi
|
uwsgi --plugins python --http-socket :9090 -w wsgi
|
||||||
|
|
|
@ -5,3 +5,4 @@ pytz
|
||||||
pip install -e bzr+lp:scaffold#egg=scaffold
|
pip install -e bzr+lp:scaffold#egg=scaffold
|
||||||
python-requests-oauthlib
|
python-requests-oauthlib
|
||||||
paypalrestsdk
|
paypalrestsdk
|
||||||
|
dateutil
|
||||||
|
|
|
@ -9,7 +9,7 @@ from flask import redirect, abort
|
||||||
from flask import make_response
|
from flask import make_response
|
||||||
from flask import request
|
from flask import request
|
||||||
from flask import Blueprint
|
from flask import Blueprint
|
||||||
from flask.ext.login import LoginManager, login_required, UserMixin, login_user, logout_user, make_secure_token
|
from flask.ext.login import current_user, LoginManager, login_required, UserMixin, login_user, logout_user, make_secure_token
|
||||||
from requests_oauthlib import OAuth2Session
|
from requests_oauthlib import OAuth2Session
|
||||||
from requests_oauthlib.compliance_fixes import facebook_compliance_fix
|
from requests_oauthlib.compliance_fixes import facebook_compliance_fix
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@ def todict(data):
|
||||||
class User(UserMixin):
|
class User(UserMixin):
|
||||||
def __init__(self, user_id, active=True):
|
def __init__(self, user_id, active=True):
|
||||||
print user_id
|
print user_id
|
||||||
|
self.id = None
|
||||||
user_details = site_user.get_user_details({'id': user_id}).get()
|
user_details = site_user.get_user_details({'id': user_id}).get()
|
||||||
self.active = False
|
self.active = False
|
||||||
print 'user'
|
print 'user'
|
||||||
|
@ -77,6 +78,7 @@ class User(UserMixin):
|
||||||
|
|
||||||
@login_manager.user_loader
|
@login_manager.user_loader
|
||||||
def load_user(userid):
|
def load_user(userid):
|
||||||
|
"""Flask user loader hook, internal to flask login"""
|
||||||
return User(userid)
|
return User(userid)
|
||||||
|
|
||||||
|
|
||||||
|
@ -98,9 +100,9 @@ def load_token(request):
|
||||||
return user
|
return user
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def auth_required():
|
#~ def auth_required():
|
||||||
if not session.get('user_id'):
|
#~ if not session.get('user_id'):
|
||||||
redirect(domain + '/login', 301)
|
#~ redirect(domain + '/login', 301)
|
||||||
|
|
||||||
@authorize_pages.route("/register", methods=['GET'])
|
@authorize_pages.route("/register", methods=['GET'])
|
||||||
def register_form():
|
def register_form():
|
||||||
|
@ -145,10 +147,11 @@ def register_submit():
|
||||||
web.template.body.append(web.page.render())
|
web.template.body.append(web.page.render())
|
||||||
return make_response(footer())
|
return make_response(footer())
|
||||||
|
|
||||||
@authorize_pages.route("/oauth/<provider>/<state>", methods=['GET'])
|
@authorize_pages.route("/oauth/<provider>/<start_oauth_login>/", methods=['GET'])
|
||||||
@authorize_pages.route("/oauth/<provider>/<state>/", methods=['GET'])
|
@authorize_pages.route("/oauth/<provider>/<start_oauth_login>", methods=['GET'])
|
||||||
|
@authorize_pages.route("/oauth/<provider>/", methods=['GET'])
|
||||||
@authorize_pages.route("/oauth/<provider>", methods=['GET'])
|
@authorize_pages.route("/oauth/<provider>", methods=['GET'])
|
||||||
def oauth(provider, state=None):
|
def oauth(provider, start_oauth_login=False):
|
||||||
oauth_verify = True
|
oauth_verify = True
|
||||||
oauth_provider = oauth_conf.get(provider)
|
oauth_provider = oauth_conf.get(provider)
|
||||||
oauth_access_type = ''
|
oauth_access_type = ''
|
||||||
|
@ -159,8 +162,8 @@ def oauth(provider, state=None):
|
||||||
oauth_approval_prompt = "force"
|
oauth_approval_prompt = "force"
|
||||||
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
|
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
|
||||||
|
|
||||||
oauth_provider.get('redirect_uri')
|
if start_oauth_login:
|
||||||
if state:
|
print oauth_provider.get('redirect_uri')
|
||||||
oauth_session = OAuth2Session(
|
oauth_session = OAuth2Session(
|
||||||
oauth_provider.get('client_id'),
|
oauth_provider.get('client_id'),
|
||||||
scope=oauth_provider.get('scope'),
|
scope=oauth_provider.get('scope'),
|
||||||
|
@ -169,9 +172,6 @@ def oauth(provider, state=None):
|
||||||
if provider == 'facebook':
|
if provider == 'facebook':
|
||||||
oauth_session = facebook_compliance_fix(oauth_session)
|
oauth_session = facebook_compliance_fix(oauth_session)
|
||||||
|
|
||||||
# offline for refresh token
|
|
||||||
# force to always make user click authorize
|
|
||||||
# generate the google url we will use to authorize and redirect there
|
|
||||||
authorization_url, state = oauth_session.authorization_url(
|
authorization_url, state = oauth_session.authorization_url(
|
||||||
oauth_provider.get('auth_uri'),
|
oauth_provider.get('auth_uri'),
|
||||||
access_type=oauth_access_type,
|
access_type=oauth_access_type,
|
||||||
|
@ -184,15 +184,19 @@ def oauth(provider, state=None):
|
||||||
return redirect(authorization_url)
|
return redirect(authorization_url)
|
||||||
|
|
||||||
# allready authorised so lets handle the callback
|
# allready authorised so lets handle the callback
|
||||||
oauth_provider.get('redirect_uri')
|
|
||||||
oauth_session = OAuth2Session(
|
oauth_session = OAuth2Session(
|
||||||
oauth_provider.get('client_id'),
|
oauth_provider.get('client_id'),
|
||||||
state=session['oauth_state'],
|
state=session['oauth_state'],
|
||||||
redirect_uri=oauth_provider.get('redirect_uri'))
|
redirect_uri=oauth_provider.get('redirect_uri'))
|
||||||
|
|
||||||
|
print '----------'
|
||||||
|
print oauth_provider.get('redirect_uri')
|
||||||
|
print request.url
|
||||||
|
|
||||||
if provider == 'facebook':
|
if provider == 'facebook':
|
||||||
oauth_session = facebook_compliance_fix(oauth_session)
|
oauth_session = facebook_compliance_fix(oauth_session)
|
||||||
|
|
||||||
|
|
||||||
# code error is todo with authorisation response
|
# code error is todo with authorisation response
|
||||||
oauth_session.fetch_token(
|
oauth_session.fetch_token(
|
||||||
oauth_provider.get('token_uri'),
|
oauth_provider.get('token_uri'),
|
||||||
|
@ -221,24 +225,40 @@ def oauth(provider, state=None):
|
||||||
|
|
||||||
# we have matched a user so login and redirect
|
# we have matched a user so login and redirect
|
||||||
if user_details:
|
if user_details:
|
||||||
print user_details
|
|
||||||
# no E-Mail so lets ask the user to set there email before allowing login
|
|
||||||
#~ if not user_details.get('email'):
|
|
||||||
#~ return change_email()
|
|
||||||
login_user(User(user_details.get('user_id')))
|
login_user(User(user_details.get('user_id')))
|
||||||
|
# no E-Mail so lets ask the user to set there email before allowing login
|
||||||
|
if not user_details.get('email'):
|
||||||
|
return redirect('/profile/change_email')
|
||||||
return redirect('/profile')
|
return redirect('/profile')
|
||||||
|
|
||||||
flash('Your new profile has been created, and your now logged in')
|
flash('Your new profile has been created, and your now logged in')
|
||||||
|
|
||||||
print oauth_user
|
print 'current user'
|
||||||
|
print current_user.get_id()
|
||||||
|
if current_user.get_id():
|
||||||
|
# link oauth to users account
|
||||||
|
site_user.create_oauth_login().execute({
|
||||||
|
'user_id': current_user.get_id(),
|
||||||
|
'username': oauth_id or '',
|
||||||
|
'provider': provider_id})
|
||||||
|
return redirect('/profile')
|
||||||
|
|
||||||
|
print oauth_response
|
||||||
|
print '-----'
|
||||||
|
print oauth_response.get('email') or ''
|
||||||
# create new user from oauth information
|
# create new user from oauth information
|
||||||
user_id = site_user.create().execute({
|
|
||||||
'email': oauth_response.get('email') or '',
|
new_user_details = {
|
||||||
'password': 'oauth',
|
'password': 'oauth',
|
||||||
'profile_image': oauth_response.get('picture'),
|
'profile_image': oauth_response.get('picture'),
|
||||||
'username': oauth_id,
|
'username': oauth_id,
|
||||||
'first_name': oauth_response.get('given_name') or '',
|
'first_name': oauth_response.get('given_name') or '',
|
||||||
'last_name': oauth_response.get('family_name') or ''})
|
'last_name': oauth_response.get('family_name') or ''}
|
||||||
|
|
||||||
|
if oauth_response.get('email'):
|
||||||
|
new_user_details['email']= oauth_response.get('email')
|
||||||
|
|
||||||
|
user_id = site_user.create().execute(new_user_details)
|
||||||
|
|
||||||
# register oauth login creation
|
# register oauth login creation
|
||||||
site_user.create_oauth_login().execute({
|
site_user.create_oauth_login().execute({
|
||||||
|
@ -246,12 +266,11 @@ def oauth(provider, state=None):
|
||||||
'username': oauth_id or '',
|
'username': oauth_id or '',
|
||||||
'provider': provider_id})
|
'provider': provider_id})
|
||||||
|
|
||||||
# no E-Mail so lets ask the user to set there email before allowing login
|
|
||||||
if not user_details.get('email'):
|
|
||||||
return change_email()
|
|
||||||
|
|
||||||
login_user(User(user_id))
|
login_user(User(user_id))
|
||||||
site_user.update_last_login().execute({'id': user_id})
|
site_user.update_last_login().execute({'id': user_id})
|
||||||
|
if not user_id:
|
||||||
|
flash('Failed to create user')
|
||||||
|
return redirect('/login')
|
||||||
return redirect('/profile')
|
return redirect('/profile')
|
||||||
|
|
||||||
|
|
||||||
|
@ -362,73 +381,28 @@ def reset_password_submit():
|
||||||
web.template.body.append(web.page.render())
|
web.template.body.append(web.page.render())
|
||||||
return make_response(footer())
|
return make_response(footer())
|
||||||
|
|
||||||
@authorize_pages.route("/profile/email", methods=['GET'])
|
#~ @authorize_pages.route("/login", methods=['GET'])
|
||||||
def change_email():
|
#~ def login_screen():
|
||||||
web.template.create('%s - Change Email' % site_name)
|
#~ web.template.create('Maidstone Hackspace - Login')
|
||||||
header('Members Login')
|
#~ header('Members Login')
|
||||||
web.page.create('Set your E-Mail address')
|
#~ web.page.create('Member Login')
|
||||||
|
#~ web.page.section(
|
||||||
|
#~ web.login_box.create().enable_oauth('google').enable_oauth('facebook').enable_oauth('github').render()
|
||||||
|
#~ )
|
||||||
|
#~ web.template.body.append(web.page.render())
|
||||||
|
#~ return make_response(footer())
|
||||||
|
|
||||||
web.form.create('Set E-Mail address for account', '/profile/email')
|
|
||||||
web.form.append(name='email', label='Valid Email', placeholder='ralf@maidstone-hackspace.org.uk', value='')
|
|
||||||
|
|
||||||
flash('An E-Mail has been sent to you please check and confirm you identity.')
|
@authorize_pages.route("/login/failure", methods=['GET'])
|
||||||
sendmail().send(
|
def login_Failure():
|
||||||
from_address='no-reply@maidstone-hackspace.org.uk',
|
web.template.create('%s - Login' % site_name)
|
||||||
to_address='oly@leela',
|
header('Login Failure')
|
||||||
subject="%s - Confirm E-Mail Address" % site_name,
|
web.page.create('Login Failure')
|
||||||
body='generate link here')
|
|
||||||
|
|
||||||
web.page.section(web.form.render())
|
|
||||||
web.template.body.append(web.page.render())
|
|
||||||
return make_response(footer())
|
|
||||||
|
|
||||||
@authorize_pages.route("/login", methods=['GET'])
|
|
||||||
def login_screen():
|
|
||||||
web.template.create('Maidstone Hackspace - Login')
|
|
||||||
header('Members Login')
|
|
||||||
web.page.create('Member Login')
|
|
||||||
web.page.section(
|
|
||||||
web.login_box.create().enable_oauth('google').enable_oauth('facebook').enable_oauth('github').render()
|
|
||||||
)
|
|
||||||
#~ web.template.body.append(web.messages.render())
|
#~ web.template.body.append(web.messages.render())
|
||||||
web.template.body.append(web.page.render())
|
web.template.body.append(web.page.render())
|
||||||
return make_response(footer())
|
return make_response(footer())
|
||||||
|
|
||||||
|
|
||||||
@authorize_pages.route("/login", methods=['POST'])
|
|
||||||
def login_screen_submit():
|
|
||||||
"""handle the login form submit"""
|
|
||||||
# try to find user by username
|
|
||||||
user_details = site_user.get_by_username({
|
|
||||||
'email': request.form.get('username')}).get()
|
|
||||||
|
|
||||||
#not found so lets bail to the login screen
|
|
||||||
if not user_details:
|
|
||||||
flash('Failed to login with that username and password, please retry.')
|
|
||||||
return login_screen()
|
|
||||||
|
|
||||||
# no E-Mail so lets ask the user to set there email before allowing login
|
|
||||||
if not user_details.get('email'):
|
|
||||||
return change_email()
|
|
||||||
|
|
||||||
|
|
||||||
#now lets verify the users password, and bail if its wrong
|
|
||||||
pw_hash = generate_password_hash(request.form.get('password'))
|
|
||||||
if check_password_hash(pw_hash, user_details.get('password')):
|
|
||||||
flash('Failed to login with that username and password, please retry.')
|
|
||||||
return login_screen()
|
|
||||||
|
|
||||||
#login user and redirect to profile
|
|
||||||
login_user(
|
|
||||||
User(user_details.get('user_id'))
|
|
||||||
)
|
|
||||||
flash('You have successfully logged in !')
|
|
||||||
#~ session['username'] = user_details.get('username', 'anonymous')
|
|
||||||
#~ session['user_id'] = str(user_details.get('user_id'))
|
|
||||||
site_user.update_last_login().execute(user_details)
|
|
||||||
return redirect('/profile')
|
|
||||||
|
|
||||||
|
|
||||||
@authorize_pages.route("/logout")
|
@authorize_pages.route("/logout")
|
||||||
def logout():
|
def logout():
|
||||||
logout_user()
|
logout_user()
|
||||||
|
|
|
@ -57,7 +57,7 @@ with web.template as setup:
|
||||||
setup.persistent_header('<link rel="stylesheet" id="navigationCss" href="/static/css/sprite-content-white.css" media="" type="text/css" />')
|
setup.persistent_header('<link rel="stylesheet" id="navigationCss" href="/static/css/sprite-content-white.css" media="" type="text/css" />')
|
||||||
|
|
||||||
#javascript, using jquery and angular
|
#javascript, using jquery and angular
|
||||||
setup.persistent_header('<script type="text/javascript" src="/static/js/jquery-2.1.4.min.js"></script>')
|
setup.persistent_header('<script type="text/javascript" src="/static/js/jquery-2.2.3.min.js"></script>')
|
||||||
setup.persistent_header('<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.js"></script>')
|
setup.persistent_header('<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.js"></script>')
|
||||||
setup.persistent_header('<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular-animate.js"></script>')
|
setup.persistent_header('<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular-animate.js"></script>')
|
||||||
setup.persistent_header('<script type="text/javascript" src="/static/js/default.js"></script>')
|
setup.persistent_header('<script type="text/javascript" src="/static/js/default.js"></script>')
|
||||||
|
|
|
@ -14,6 +14,7 @@ nav_for_authenticated_user = (
|
||||||
)
|
)
|
||||||
|
|
||||||
banner_images = [
|
banner_images = [
|
||||||
|
('/static/images/banners/indiegogo.png', 'https://www.indiegogo.com/projects/maidstone-hackspace/', 'Visit our campaign page', ''),
|
||||||
('/static/images/banners/hackspace-banner.png', '', '', ''),
|
('/static/images/banners/hackspace-banner.png', '', '', ''),
|
||||||
('/static/images/banners/audio_board.jpg', 'Audio board', 'Audio board', ''),
|
('/static/images/banners/audio_board.jpg', 'Audio board', 'Audio board', ''),
|
||||||
('/static/images/banners/microscope.jpg', '', 'Microscope', ''),
|
('/static/images/banners/microscope.jpg', '', 'Microscope', ''),
|
||||||
|
|
|
@ -12,8 +12,8 @@ query_builder.query_path = os.path.abspath('./data/sql/')
|
||||||
class create_basic_user(insert_data):
|
class create_basic_user(insert_data):
|
||||||
"""not able to actually log in but registered on the system"""
|
"""not able to actually log in but registered on the system"""
|
||||||
table = 'users'
|
table = 'users'
|
||||||
required = {'email', 'first_name', 'last_name'}
|
required = {'first_name', 'last_name'}
|
||||||
columns = {'email','first_name', 'last_name'}
|
columns = {'first_name', 'last_name'}
|
||||||
|
|
||||||
def calculated_data(self):
|
def calculated_data(self):
|
||||||
return {'created': time.strftime('%Y-%m-%d %H:%M:%S')}
|
return {'created': time.strftime('%Y-%m-%d %H:%M:%S')}
|
||||||
|
@ -24,8 +24,8 @@ class create_basic_user(insert_data):
|
||||||
|
|
||||||
class create(insert_data):
|
class create(insert_data):
|
||||||
table = 'users'
|
table = 'users'
|
||||||
required = {'email', 'password', 'username', 'first_name', 'last_name', 'created'}
|
required = {'password', 'username', 'first_name', 'last_name', 'created'}
|
||||||
columns = {'email', 'password', 'username', 'first_name', 'last_name', 'created'}
|
columns = {'password', 'username', 'first_name', 'last_name', 'created'}
|
||||||
columns_optional = {'profile_image'}
|
columns_optional = {'profile_image'}
|
||||||
|
|
||||||
def calculated_data(self):
|
def calculated_data(self):
|
||||||
|
@ -41,6 +41,12 @@ class update_last_login(update_data):
|
||||||
required = {'id'}
|
required = {'id'}
|
||||||
columns_where = {'id'}
|
columns_where = {'id'}
|
||||||
|
|
||||||
|
class update_user_email(update_data):
|
||||||
|
debug = True
|
||||||
|
query_str = "update `users` set `email`=%(email)s"
|
||||||
|
required = {'id', 'email'}
|
||||||
|
columns_where = {'id'}
|
||||||
|
|
||||||
class update_membership_status(update_data):
|
class update_membership_status(update_data):
|
||||||
debug = True
|
debug = True
|
||||||
query_str = "update `users` set `status`=%(status)s where id=%(user_id)s"
|
query_str = "update `users` set `status`=%(status)s where id=%(user_id)s"
|
||||||
|
@ -127,27 +133,22 @@ class create_oauth_login(insert_data):
|
||||||
debug = True
|
debug = True
|
||||||
table = 'user_oauth'
|
table = 'user_oauth'
|
||||||
required = {'username', 'provider', 'user_id'}
|
required = {'username', 'provider', 'user_id'}
|
||||||
columns = {'username', 'provider', 'user_id'}
|
columns = {'username', 'provider', 'user_id', 'registered'}
|
||||||
|
|
||||||
#~ def calculated_data(self):
|
def calculated_data(self):
|
||||||
#~ return {'registered': time.strftime('%Y-%m-%d %H:%M:%S')}
|
return {'registered': time.strftime('%Y-%m-%d %H:%M:%S')}
|
||||||
|
|
||||||
def set(self, data):
|
|
||||||
data['registered'] = time.strftime('%Y-%m-%d %H:%M:%S')
|
|
||||||
super(create_oauth_login, self).set(data)
|
|
||||||
|
|
||||||
class update_oauth_login(update_data):
|
class update_oauth_login(update_data):
|
||||||
table = 'user_oauth'
|
table = 'user_oauth'
|
||||||
|
columns = {'username', 'provider', 'last_login'}
|
||||||
required = {'username', 'provider'}
|
required = {'username', 'provider'}
|
||||||
query_file = 'get_user_by_oauth_username.sql'
|
query_file = 'get_user_by_oauth_username.sql'
|
||||||
columns_where = {'username', 'provider'}
|
columns_where = {'username', 'provider'}
|
||||||
|
|
||||||
def calculated_data(self):
|
def calculated_data(self):
|
||||||
return {'registered': time.strftime('%Y-%m-%d %H:%M:%S')}
|
return {
|
||||||
|
'last_login': time.strftime('%Y-%m-%d %H:%M:%S')
|
||||||
def set(self, data):
|
}
|
||||||
data['registered'] = time.strftime('%Y-%m-%d %H:%M:%S')
|
|
||||||
super(update_oauth_login, self).set(data)
|
|
||||||
|
|
||||||
class fetch_oauth_login(select_data):
|
class fetch_oauth_login(select_data):
|
||||||
required = {'username', 'provider'}
|
required = {'username', 'provider'}
|
||||||
|
|
|
@ -28,6 +28,8 @@ def examples():
|
||||||
#finish of the page
|
#finish of the page
|
||||||
return footer()
|
return footer()
|
||||||
|
|
||||||
|
def generate_rss():
|
||||||
|
pass
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
parser = argparse.ArgumentParser(description='Generate static pages')
|
parser = argparse.ArgumentParser(description='Generate static pages')
|
||||||
|
|
|
@ -13,17 +13,20 @@ from pages import chat
|
||||||
from pages import blog
|
from pages import blog
|
||||||
from pages import members
|
from pages import members
|
||||||
|
|
||||||
|
from pages.core.login_pages import login_pages
|
||||||
from pages.donate import donate_pages
|
from pages.donate import donate_pages
|
||||||
from pages.google_groups import google_groups_pages
|
from pages.google_groups import google_groups_pages
|
||||||
from pages.equipment import equipment_pages
|
from pages.equipment import equipment_pages
|
||||||
from pages.profile import profile_pages
|
from pages.profile import profile_pages
|
||||||
from authorize import authorize_pages, login_manager
|
from authorize import authorize_pages, login_manager
|
||||||
|
|
||||||
|
|
||||||
web_app = Flask(__name__, static_folder='static')
|
web_app = Flask(__name__, static_folder='static')
|
||||||
web_app.config['PROPAGATE_EXCEPTIONS'] = True
|
web_app.config['PROPAGATE_EXCEPTIONS'] = True
|
||||||
web_app.secret_key = settings.flask_secret_key
|
web_app.secret_key = settings.flask_secret_key
|
||||||
login_manager.init_app(web_app)
|
login_manager.init_app(web_app)
|
||||||
|
|
||||||
|
web_app.register_blueprint(login_pages)
|
||||||
web_app.register_blueprint(authorize_pages)
|
web_app.register_blueprint(authorize_pages)
|
||||||
web_app.register_blueprint(equipment_pages)
|
web_app.register_blueprint(equipment_pages)
|
||||||
web_app.register_blueprint(profile_pages)
|
web_app.register_blueprint(profile_pages)
|
||||||
|
|
|
@ -52,10 +52,13 @@ class payment:
|
||||||
"description": reference}]})
|
"description": reference}]})
|
||||||
|
|
||||||
payment_response = payment.create()
|
payment_response = payment.create()
|
||||||
|
print 'payment create'
|
||||||
if payment_response:
|
if payment_response:
|
||||||
|
print payment_response
|
||||||
for link in payment.links:
|
for link in payment.links:
|
||||||
if link.method == "REDIRECT":
|
if link.method == "REDIRECT":
|
||||||
redirect_url = str(link.href)
|
redirect_url = str(link.href)
|
||||||
|
print redirect_url
|
||||||
return str(redirect_url)
|
return str(redirect_url)
|
||||||
else:
|
else:
|
||||||
print("Error while creating payment:")
|
print("Error while creating payment:")
|
||||||
|
@ -125,6 +128,7 @@ class payment:
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.provider == 'paypal':
|
if self.provider == 'paypal':
|
||||||
|
print 'subscribe_confirm'
|
||||||
payment_token = args.get('token', '')
|
payment_token = args.get('token', '')
|
||||||
billing_agreement_response = paypal.BillingAgreement.execute(payment_token)
|
billing_agreement_response = paypal.BillingAgreement.execute(payment_token)
|
||||||
amount = 0
|
amount = 0
|
||||||
|
@ -171,7 +175,6 @@ class payment:
|
||||||
|
|
||||||
|
|
||||||
def subscribe(self, amount, name, redirect_success, redirect_failure, interval_unit='month', interval_length='1'):
|
def subscribe(self, amount, name, redirect_success, redirect_failure, interval_unit='month', interval_length='1'):
|
||||||
print '%s/profile/gocardless' % app_domain
|
|
||||||
if self.provider == 'gocardless':
|
if self.provider == 'gocardless':
|
||||||
return gocardless.client.new_subscription_url(
|
return gocardless.client.new_subscription_url(
|
||||||
amount=amount,
|
amount=amount,
|
||||||
|
@ -239,8 +242,12 @@ class payment:
|
||||||
|
|
||||||
def confirm(self, args):
|
def confirm(self, args):
|
||||||
confirm_details = {}
|
confirm_details = {}
|
||||||
|
confirm_details['successfull'] = False
|
||||||
print '---------------------'
|
print '---------------------'
|
||||||
print args
|
print args
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
if self.provider == 'paypal':
|
if self.provider == 'paypal':
|
||||||
print args.get('paymentId')
|
print args.get('paymentId')
|
||||||
|
@ -257,9 +264,15 @@ class payment:
|
||||||
confirm_details['created'] = payment.create_time
|
confirm_details['created'] = payment.create_time
|
||||||
confirm_details['reference'] = payment.id
|
confirm_details['reference'] = payment.id
|
||||||
pprint(confirm_details)
|
pprint(confirm_details)
|
||||||
return confirm_details
|
|
||||||
|
|
||||||
|
|
||||||
|
if payment.execute({"payer_id": args.get('PayerID')}): # return True or False
|
||||||
|
confirm_details['successfull'] = True
|
||||||
|
print("Payment[%s] execute successfully" % (args.get('paymentId')))
|
||||||
|
else:
|
||||||
|
print(payment.error)
|
||||||
|
return confirm_details
|
||||||
|
|
||||||
if self.provider == 'gocardless':
|
if self.provider == 'gocardless':
|
||||||
bill_id = args.get('resource_id')
|
bill_id = args.get('resource_id')
|
||||||
gocardless.client.confirm_resource(args)
|
gocardless.client.confirm_resource(args)
|
||||||
|
@ -272,5 +285,6 @@ class payment:
|
||||||
#~ confirm_details['amount_minus_fees'] = bill.amount_minus_fees
|
#~ confirm_details['amount_minus_fees'] = bill.amount_minus_fees
|
||||||
confirm_details['created'] = bill.created_at
|
confirm_details['created'] = bill.created_at
|
||||||
confirm_details['reference'] = bill_id
|
confirm_details['reference'] = bill_id
|
||||||
|
confirm_details['successfull'] = True
|
||||||
return confirm_details
|
return confirm_details
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -31,7 +31,7 @@ with web.template as setup:
|
||||||
setup.persistent_header('<link rel="stylesheet" id="navigationCss" href="/static/css/sprite-content-white.css" media="" type="text/css" />')
|
setup.persistent_header('<link rel="stylesheet" id="navigationCss" href="/static/css/sprite-content-white.css" media="" type="text/css" />')
|
||||||
|
|
||||||
|
|
||||||
setup.persistent_header('<script type="text/javascript" src="/static/js/jquery-2.1.4.min.js"></script>')
|
setup.persistent_header('<script type="text/javascript" src="/static/js/jquery-2.2.3.min.js"></script>')
|
||||||
setup.persistent_header('<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.js"></script>')
|
setup.persistent_header('<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.js"></script>')
|
||||||
setup.persistent_header('<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular-animate.js"></script>')
|
setup.persistent_header('<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular-animate.js"></script>')
|
||||||
setup.persistent_header('<script type="text/javascript" src="/static/js/default.js"></script>')
|
setup.persistent_header('<script type="text/javascript" src="/static/js/default.js"></script>')
|
||||||
|
@ -62,12 +62,20 @@ def header(title, description='Maidstone Hackspace is a shared space where artis
|
||||||
web.menu.append('Login', '/login')
|
web.menu.append('Login', '/login')
|
||||||
web.template.body.append(web.menu.render())
|
web.template.body.append(web.menu.render())
|
||||||
|
|
||||||
def footer():
|
# lets create the footer
|
||||||
web.footer_content.create().append(
|
web.footer_content.create().append(
|
||||||
web.google_groups_signup.create(' and make yourself known','maidstone-hackspace').set_id('mailing-list-signup').render())
|
web.google_groups_signup.create(' and make yourself known','maidstone-hackspace').set_id('mailing-list-signup').render())
|
||||||
web.template.body.append(web.footer_content.render())
|
web.template.footer.append(web.footer_content.render())
|
||||||
web.google_analytics.create('maidstone-hackspace.org.uk', 'UA-63373181-1')
|
web.google_analytics.create('maidstone-hackspace.org.uk', 'UA-63373181-1')
|
||||||
web.template.body.append(web.google_analytics.render())
|
web.template.footer.append(web.google_analytics.render())
|
||||||
|
|
||||||
|
# this will be obsoleted
|
||||||
|
def footer():
|
||||||
|
#~ web.footer_content.create().append(
|
||||||
|
#~ web.google_groups_signup.create(' and make yourself known','maidstone-hackspace').set_id('mailing-list-signup').render())
|
||||||
|
#~ web.template.body.append(web.footer_content.render())
|
||||||
|
#~ web.google_analytics.create('maidstone-hackspace.org.uk', 'UA-63373181-1')
|
||||||
|
#~ web.template.body.append(web.google_analytics.render())
|
||||||
return web.render()
|
return web.render()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ def index():
|
||||||
web.page.append(web.form.render())
|
web.page.append(web.form.render())
|
||||||
|
|
||||||
web.template.body.append(web.page.render())
|
web.template.body.append(web.page.render())
|
||||||
return footer()
|
return web.render()
|
||||||
|
|
||||||
|
|
||||||
@donate_pages.route("/donate/populate", methods=['GET'])
|
@donate_pages.route("/donate/populate", methods=['GET'])
|
||||||
|
@ -103,7 +103,7 @@ def populate_by_name():
|
||||||
if matched_user:
|
if matched_user:
|
||||||
badges.assign_badge().execute({'badge_id': badge_lookup.get('backer'), 'user_id': matched_user})
|
badges.assign_badge().execute({'badge_id': badge_lookup.get('backer'), 'user_id': matched_user})
|
||||||
|
|
||||||
return footer()
|
return web.render()
|
||||||
|
|
||||||
|
|
||||||
@donate_pages.route("/donate/submit", methods=['POST'])
|
@donate_pages.route("/donate/submit", methods=['POST'])
|
||||||
|
@ -112,8 +112,10 @@ def submit_donation():
|
||||||
provider='paypal',
|
provider='paypal',
|
||||||
style='payment')
|
style='payment')
|
||||||
|
|
||||||
|
# convert donation amount to 2 decimal places, paypal seems to require this else it errors
|
||||||
|
donation_amount = '{0:.2f}'.format(float(request.form.get('amount')))
|
||||||
url = provider.make_donation(
|
url = provider.make_donation(
|
||||||
amount=request.form.get('amount'),
|
amount=donation_amount,
|
||||||
reference=request.form.get('reference', ''),
|
reference=request.form.get('reference', ''),
|
||||||
redirect_success='%s/donate/success' % app_domain,
|
redirect_success='%s/donate/success' % app_domain,
|
||||||
redirect_failure='%s/donate/failure' % app_domain
|
redirect_failure='%s/donate/failure' % app_domain
|
||||||
|
@ -123,8 +125,7 @@ def submit_donation():
|
||||||
|
|
||||||
|
|
||||||
@donate_pages.route("/donate/success", methods=['GET'])
|
@donate_pages.route("/donate/success", methods=['GET'])
|
||||||
def success_donation():
|
def donation_successfull():
|
||||||
# confirm the payment
|
|
||||||
|
|
||||||
provider = payment(
|
provider = payment(
|
||||||
provider='paypal',
|
provider='paypal',
|
||||||
|
@ -157,4 +158,18 @@ def success_donation():
|
||||||
"""Thanks your payment has been recieved.""")
|
"""Thanks your payment has been recieved.""")
|
||||||
web.page.section(web.paragraph.render())
|
web.page.section(web.paragraph.render())
|
||||||
web.template.body.append(web.page.render())
|
web.template.body.append(web.page.render())
|
||||||
return footer()
|
return web.render()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@donate_pages.route("/donate/failure", methods=['GET'])
|
||||||
|
def donation_failed():
|
||||||
|
web.template.create('Maidstone Hackspace')
|
||||||
|
header('Maidstone Hackspace Donations')
|
||||||
|
web.page.create('Looks like something went wrong.')
|
||||||
|
web.paragraph.create(
|
||||||
|
"""Sorry looks like something went wrong while trying to take this payment.""")
|
||||||
|
web.page.section(web.paragraph.render())
|
||||||
|
web.template.body.append(web.page.render())
|
||||||
|
return web.render()
|
||||||
|
|
|
@ -34,9 +34,11 @@ def index():
|
||||||
count_users += 1
|
count_users += 1
|
||||||
if item.get('status') is 1:
|
if item.get('status') is 1:
|
||||||
count_members += 1
|
count_members += 1
|
||||||
print count_members
|
|
||||||
web.page.section('Members %d' % count_members)
|
web.info_box.create('Current Users')
|
||||||
web.page.section('Users %d' % count_users)
|
web.info_box.append('Members %d<br />' % count_members)
|
||||||
|
web.info_box.append('Users %d<br />' % count_users)
|
||||||
|
web.page.section(web.info_box.render())
|
||||||
|
|
||||||
web.container.create(web.member_tiles.render()).set_classes('members')
|
web.container.create(web.member_tiles.render()).set_classes('members')
|
||||||
web.page.section(web.container.render())
|
web.page.section(web.container.render())
|
||||||
|
|
|
@ -11,20 +11,13 @@ from data.site_user import get_user_details, update_membership, update_membershi
|
||||||
from data.profile import update_description, create_description, fetch_users
|
from data.profile import update_description, create_description, fetch_users
|
||||||
from data import badges
|
from data import badges
|
||||||
from data import members
|
from data import members
|
||||||
#~ from config.settings import gocardless_environment, gocardless_credentials
|
|
||||||
from config.settings import app_domain
|
from config.settings import app_domain
|
||||||
|
|
||||||
from libs.payments import payment
|
from libs.payments import payment
|
||||||
from config.settings import *
|
from config.settings import *
|
||||||
|
|
||||||
#~ import gocardless
|
|
||||||
#~ gocardless.environment = gocardless_environment
|
|
||||||
#~ gocardless.set_details(**gocardless_credentials)
|
|
||||||
|
|
||||||
profile_pages = Blueprint('profile_pages', __name__, template_folder='templates')
|
profile_pages = Blueprint('profile_pages', __name__, template_folder='templates')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@profile_pages.route("/profile", methods=['GET'])
|
@profile_pages.route("/profile", methods=['GET'])
|
||||||
@login_required
|
@login_required
|
||||||
def index():
|
def index():
|
||||||
|
@ -49,8 +42,6 @@ def index():
|
||||||
web.columns.append(web.paragraph.render())
|
web.columns.append(web.paragraph.render())
|
||||||
|
|
||||||
# membership form
|
# membership form
|
||||||
#~ if user.get('status') != 1:
|
|
||||||
print user
|
|
||||||
web.columns.append(
|
web.columns.append(
|
||||||
web.member_card.create(
|
web.member_card.create(
|
||||||
reference=str(user.get('user_id')).zfill(5),
|
reference=str(user.get('user_id')).zfill(5),
|
||||||
|
@ -66,6 +57,13 @@ def index():
|
||||||
'/profile/details'
|
'/profile/details'
|
||||||
).set_classes('ajaxPopup').render())
|
).set_classes('ajaxPopup').render())
|
||||||
|
|
||||||
|
web.paragraph.append(
|
||||||
|
web.link.create(
|
||||||
|
'Link a provider to your account like google, by logging in while logged into your account',
|
||||||
|
'Link login provider',
|
||||||
|
'/login'
|
||||||
|
).render())
|
||||||
|
|
||||||
|
|
||||||
web.columns.append(web.paragraph.render())
|
web.columns.append(web.paragraph.render())
|
||||||
|
|
||||||
|
@ -186,8 +184,6 @@ def membership_signup(provider):
|
||||||
'amount': payment_details.get('amount'),
|
'amount': payment_details.get('amount'),
|
||||||
'subscription_reference': payment_details.get('reference')})
|
'subscription_reference': payment_details.get('reference')})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
web.page.section(web.paragraph.render())
|
web.page.section(web.paragraph.render())
|
||||||
web.template.body.append(web.page.render())
|
web.template.body.append(web.page.render())
|
||||||
return footer()
|
return footer()
|
||||||
|
@ -205,9 +201,6 @@ def update_profiles():
|
||||||
|
|
||||||
return web.form.render()
|
return web.form.render()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@profile_pages.route("/profile/details", methods=['GET'])
|
@profile_pages.route("/profile/details", methods=['GET'])
|
||||||
@login_required
|
@login_required
|
||||||
def edit_profile():
|
def edit_profile():
|
||||||
|
@ -221,7 +214,6 @@ def edit_profile():
|
||||||
web.form.append(name='skills', label='skills', placeholder='python, arduino, knitting', value=user_details.get('skills') or '')
|
web.form.append(name='skills', label='skills', placeholder='python, arduino, knitting', value=user_details.get('skills') or '')
|
||||||
return web.form.render()
|
return web.form.render()
|
||||||
|
|
||||||
|
|
||||||
@profile_pages.route("/profile/update", methods=['POST'])
|
@profile_pages.route("/profile/update", methods=['POST'])
|
||||||
@login_required
|
@login_required
|
||||||
def update_profile():
|
def update_profile():
|
||||||
|
|
File diff suppressed because one or more lines are too long
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -126,6 +126,7 @@ height:48px;width:48px; -webkit-animation:spin 2s linear infinite ;-moz-animatio
|
||||||
.menu li:hover {}
|
.menu li:hover {}
|
||||||
|
|
||||||
.page {width:980px;margin:auto;margin-top:155px;padding-bottom:48px;background-color:#0087A8;}
|
.page {width:980px;margin:auto;margin-top:155px;padding-bottom:48px;background-color:#0087A8;}
|
||||||
|
.page .pageSection {margin-left: 20px;}
|
||||||
.page .messages{color:#fff;border:10px solid #0087A8;background-color:#00232D; font-weight:bold;}
|
.page .messages{color:#fff;border:10px solid #0087A8;background-color:#00232D; font-weight:bold;}
|
||||||
.page .messages li{padding:10px;}
|
.page .messages li{padding:10px;}
|
||||||
|
|
||||||
|
@ -135,7 +136,7 @@ height:48px;width:48px; -webkit-animation:spin 2s linear infinite ;-moz-animatio
|
||||||
.google-groups-signup input{margin-top:20px;width:282px;}
|
.google-groups-signup input{margin-top:20px;width:282px;}
|
||||||
.google-groups-signup a{color:#fff;width:282px;}
|
.google-groups-signup a{color:#fff;width:282px;}
|
||||||
|
|
||||||
.banner-slide {position:absolute;width:700px;margin:20px;}
|
.banner-slide {position:absolute;width:700px;margin: 20px 20px 20px 0px;}
|
||||||
.banner-slide ul{position:relative;overflow:hidden;width:700px;height:300px;margin:0px;}
|
.banner-slide ul{position:relative;overflow:hidden;width:700px;height:300px;margin:0px;}
|
||||||
.banner-slide li{position:absolute;left:0px;top:0px;list-style-type:none;padding:0px;margin:0px;}
|
.banner-slide li{position:absolute;left:0px;top:0px;list-style-type:none;padding:0px;margin:0px;}
|
||||||
.banner-slide .button{background-color: #0087A8;border-radius:50%;opacity:0.4;}
|
.banner-slide .button{background-color: #0087A8;border-radius:50%;opacity:0.4;}
|
||||||
|
@ -209,10 +210,10 @@ height:48px;width:48px; -webkit-animation:spin 2s linear infinite ;-moz-animatio
|
||||||
#login_box label {display:block;margin: 20px 0px 20px;}
|
#login_box label {display:block;margin: 20px 0px 20px;}
|
||||||
#login_box input {margin: 20px 0px 0px;float:none;width:100%;}
|
#login_box input {margin: 20px 0px 0px;float:none;width:100%;}
|
||||||
#login_box button {margin: 20px 0px 0px;float:left;width:100%;}
|
#login_box button {margin: 20px 0px 0px;float:left;width:100%;}
|
||||||
#login_box .providers {margin: 20px 0px 20px;height:48px;}
|
#login_box .providers {margin: 20px 0px 20px;height:48px;height:35px;}
|
||||||
#login_box .providers a {float:left;}
|
#login_box .providers a {float:left;margin-right:30px;}
|
||||||
|
|
||||||
|
|
||||||
|
.members .stats {}
|
||||||
.members .tile {width:220px;float:left;}
|
.members .tile {width:220px;float:left;}
|
||||||
.members .tile-img{margin:10px;width:200px;}
|
.members .tile-img{margin:10px;width:200px;}
|
||||||
.members .badge{width:32px;height:32px;margin:0px;margin-top:5px;}
|
.members .badge{width:32px;height:32px;margin:0px;margin-top:5px;}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
from dateutil import parser
|
||||||
from scaffold.core.widget import base_widget_extended
|
from scaffold.core.widget import base_widget_extended
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import time
|
import time
|
||||||
|
@ -7,19 +8,21 @@ class control(base_widget_extended):
|
||||||
contents = []
|
contents = []
|
||||||
def create(self, title="Events", calendar_id=None, api_key=None):
|
def create(self, title="Events", calendar_id=None, api_key=None):
|
||||||
super(control, self).create()
|
super(control, self).create()
|
||||||
url = 'https://www.googleapis.com/calendar/v3/calendars/%s/events?singleEvents=true&maxResults=2&timeMin=%s&key=%s' % (
|
date_now = datetime.now().strftime('%Y-%m-%dT%H:%M:%S+00:00')
|
||||||
|
date_now = datetime.now().strftime('%Y-%m-%dT%H:%M:%S+00:00')
|
||||||
|
url = 'https://www.googleapis.com/calendar/v3/calendars/%s/events?singleEvents=True&orderBy=startTime&maxResults=2&timeMin=%s&key=%s' % (
|
||||||
calendar_id,
|
calendar_id,
|
||||||
datetime.now().strftime('%Y-%m-%dT%H:%M:%S-00:00'),
|
datetime.now().strftime('%Y-%m-%dT%H:%M:%S-00:00'),
|
||||||
api_key)
|
api_key)
|
||||||
date_now = datetime.now().strftime('%Y-%m-%dT%H:%M:%S-00:00')
|
|
||||||
response = requests.get('https://www.googleapis.com/calendar/v3/calendars/contact@maidstone-hackspace.org.uk/events?singleEvents=true&maxResults=2&timeMin=%s&key=AIzaSyA98JvRDmplA9lVLZeKwrs1f2k17resLy0' % date_now)
|
response = requests.get(url)
|
||||||
calendar_data = response.json()
|
calendar_data = response.json()
|
||||||
self.contents = []
|
self.contents = []
|
||||||
|
|
||||||
# loop over calendar results, and format for display
|
# loop over calendar results, and format for display
|
||||||
for event in calendar_data.get('items'):
|
for event in calendar_data.get('items'):
|
||||||
str_datetime = time.strptime(event.get('start').get('dateTime'), '%Y-%m-%dT%H:%M:%SZ')
|
str_datetime = parser.parse(event.get('start').get('dateTime'))
|
||||||
formatted_date = time.strftime('%d %b %Y %H:%M', str_datetime)
|
formatted_date = str_datetime.strftime('%d %b %Y %H:%M')
|
||||||
description = event.get('description') + '<br />' if event.get('description') else ''
|
description = event.get('description') + '<br />' if event.get('description') else ''
|
||||||
location = '<a target="_blank" href="https://www.google.co.uk/maps/search/%s">%s</a>' % (
|
location = '<a target="_blank" href="https://www.google.co.uk/maps/search/%s">%s</a>' % (
|
||||||
event.get('location'), event.get('location')) if event.get('location') else ''
|
event.get('location'), event.get('location')) if event.get('location') else ''
|
||||||
|
|
|
@ -16,8 +16,10 @@ class control(base_widget):
|
||||||
htm += '<p>Please login with one of the oauth provider below, which is more secure and does not store passwords on our system.</p>'
|
htm += '<p>Please login with one of the oauth provider below, which is more secure and does not store passwords on our system.</p>'
|
||||||
if self.oauth_enabled:
|
if self.oauth_enabled:
|
||||||
htm += '<div class="providers">'
|
htm += '<div class="providers">'
|
||||||
|
#~ if 'google' in self.oauth_enabled:
|
||||||
|
#~ htm += '<a title="Login with Google" href="/oauth/google/login"><img src="/static/images/oauth/google.png" /></a> '
|
||||||
if 'google' in self.oauth_enabled:
|
if 'google' in self.oauth_enabled:
|
||||||
htm += '<a title="Login with Google" href="/oauth/google/login"><img src="/static/images/oauth/google.png" /></a> '
|
htm += '<a title="Login with Google" class="but row" href="/oauth/google/login">Login with Google</a> '
|
||||||
if 'facebook' in self.oauth_enabled:
|
if 'facebook' in self.oauth_enabled:
|
||||||
htm += '<a title="Login with facebook" class="but row" href="/oauth/facebook/login">Login with Facebook</a> '
|
htm += '<a title="Login with facebook" class="but row" href="/oauth/facebook/login">Login with Facebook</a> '
|
||||||
if 'github' in self.oauth_enabled:
|
if 'github' in self.oauth_enabled:
|
||||||
|
|
Loading…
Reference in New Issue