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 install -y libssl-dev libffi-dev && \
|
||||
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 && \
|
||||
add-apt-repository -y ppa:oly/ppa && \
|
||||
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
|
||||
|
||||
email = contact-buyer@maidstone-hackspace.org.uk
|
||||
password = mhackspace
|
||||
password = Mhackspace
|
||||
|
||||
To test the gocardless integration you can use these card details
|
||||
|
||||
sortcode = 200000
|
||||
account number = 55779911
|
||||
|
||||
|
||||
|
||||
Run locally with uwsgi on port 9090
|
||||
|
||||
uwsgi --plugins python --http-socket :9090 -w wsgi
|
||||
|
|
|
@ -5,3 +5,4 @@ pytz
|
|||
pip install -e bzr+lp:scaffold#egg=scaffold
|
||||
python-requests-oauthlib
|
||||
paypalrestsdk
|
||||
dateutil
|
||||
|
|
|
@ -9,7 +9,7 @@ from flask import redirect, abort
|
|||
from flask import make_response
|
||||
from flask import request
|
||||
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.compliance_fixes import facebook_compliance_fix
|
||||
|
||||
|
@ -51,6 +51,7 @@ def todict(data):
|
|||
class User(UserMixin):
|
||||
def __init__(self, user_id, active=True):
|
||||
print user_id
|
||||
self.id = None
|
||||
user_details = site_user.get_user_details({'id': user_id}).get()
|
||||
self.active = False
|
||||
print 'user'
|
||||
|
@ -77,6 +78,7 @@ class User(UserMixin):
|
|||
|
||||
@login_manager.user_loader
|
||||
def load_user(userid):
|
||||
"""Flask user loader hook, internal to flask login"""
|
||||
return User(userid)
|
||||
|
||||
|
||||
|
@ -98,9 +100,9 @@ def load_token(request):
|
|||
return user
|
||||
return None
|
||||
|
||||
def auth_required():
|
||||
if not session.get('user_id'):
|
||||
redirect(domain + '/login', 301)
|
||||
#~ def auth_required():
|
||||
#~ if not session.get('user_id'):
|
||||
#~ redirect(domain + '/login', 301)
|
||||
|
||||
@authorize_pages.route("/register", methods=['GET'])
|
||||
def register_form():
|
||||
|
@ -145,10 +147,11 @@ def register_submit():
|
|||
web.template.body.append(web.page.render())
|
||||
return make_response(footer())
|
||||
|
||||
@authorize_pages.route("/oauth/<provider>/<state>", 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>/<start_oauth_login>", 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_provider = oauth_conf.get(provider)
|
||||
oauth_access_type = ''
|
||||
|
@ -159,8 +162,8 @@ def oauth(provider, state=None):
|
|||
oauth_approval_prompt = "force"
|
||||
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1'
|
||||
|
||||
oauth_provider.get('redirect_uri')
|
||||
if state:
|
||||
if start_oauth_login:
|
||||
print oauth_provider.get('redirect_uri')
|
||||
oauth_session = OAuth2Session(
|
||||
oauth_provider.get('client_id'),
|
||||
scope=oauth_provider.get('scope'),
|
||||
|
@ -169,9 +172,6 @@ def oauth(provider, state=None):
|
|||
if provider == 'facebook':
|
||||
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(
|
||||
oauth_provider.get('auth_uri'),
|
||||
access_type=oauth_access_type,
|
||||
|
@ -184,14 +184,18 @@ def oauth(provider, state=None):
|
|||
return redirect(authorization_url)
|
||||
|
||||
# allready authorised so lets handle the callback
|
||||
oauth_provider.get('redirect_uri')
|
||||
oauth_session = OAuth2Session(
|
||||
oauth_provider.get('client_id'),
|
||||
state=session['oauth_state'],
|
||||
redirect_uri=oauth_provider.get('redirect_uri'))
|
||||
|
||||
print '----------'
|
||||
print oauth_provider.get('redirect_uri')
|
||||
print request.url
|
||||
|
||||
if provider == 'facebook':
|
||||
oauth_session = facebook_compliance_fix(oauth_session)
|
||||
|
||||
|
||||
# code error is todo with authorisation response
|
||||
oauth_session.fetch_token(
|
||||
|
@ -212,33 +216,49 @@ def oauth(provider, state=None):
|
|||
oauth_user = site_user.fetch_oauth_login({
|
||||
'username': oauth_id or '',
|
||||
'provider': provider_id
|
||||
}).get()
|
||||
}).get()
|
||||
|
||||
if oauth_user:
|
||||
user_details = site_user.get_user_details({
|
||||
'id': oauth_user.get('user_id')
|
||||
}).get()
|
||||
|
||||
|
||||
# we have matched a user so login and redirect
|
||||
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')))
|
||||
# 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')
|
||||
|
||||
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
|
||||
user_id = site_user.create().execute({
|
||||
'email': oauth_response.get('email') or '',
|
||||
|
||||
new_user_details = {
|
||||
'password': 'oauth',
|
||||
'profile_image': oauth_response.get('picture'),
|
||||
'username': oauth_id,
|
||||
'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
|
||||
site_user.create_oauth_login().execute({
|
||||
|
@ -246,12 +266,11 @@ def oauth(provider, state=None):
|
|||
'username': oauth_id or '',
|
||||
'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))
|
||||
site_user.update_last_login().execute({'id': user_id})
|
||||
if not user_id:
|
||||
flash('Failed to create user')
|
||||
return redirect('/login')
|
||||
return redirect('/profile')
|
||||
|
||||
|
||||
|
@ -362,73 +381,28 @@ def reset_password_submit():
|
|||
web.template.body.append(web.page.render())
|
||||
return make_response(footer())
|
||||
|
||||
@authorize_pages.route("/profile/email", methods=['GET'])
|
||||
def change_email():
|
||||
web.template.create('%s - Change Email' % site_name)
|
||||
header('Members Login')
|
||||
web.page.create('Set your E-Mail address')
|
||||
|
||||
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='')
|
||||
#~ @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.page.render())
|
||||
#~ return make_response(footer())
|
||||
|
||||
flash('An E-Mail has been sent to you please check and confirm you identity.')
|
||||
sendmail().send(
|
||||
from_address='no-reply@maidstone-hackspace.org.uk',
|
||||
to_address='oly@leela',
|
||||
subject="%s - Confirm E-Mail Address" % site_name,
|
||||
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()
|
||||
)
|
||||
@authorize_pages.route("/login/failure", methods=['GET'])
|
||||
def login_Failure():
|
||||
web.template.create('%s - Login' % site_name)
|
||||
header('Login Failure')
|
||||
web.page.create('Login Failure')
|
||||
#~ web.template.body.append(web.messages.render())
|
||||
web.template.body.append(web.page.render())
|
||||
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")
|
||||
def logout():
|
||||
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" />')
|
||||
|
||||
#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-animate.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 = [
|
||||
('/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/audio_board.jpg', 'Audio board', 'Audio board', ''),
|
||||
('/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):
|
||||
"""not able to actually log in but registered on the system"""
|
||||
table = 'users'
|
||||
required = {'email', 'first_name', 'last_name'}
|
||||
columns = {'email','first_name', 'last_name'}
|
||||
required = {'first_name', 'last_name'}
|
||||
columns = {'first_name', 'last_name'}
|
||||
|
||||
def calculated_data(self):
|
||||
return {'created': time.strftime('%Y-%m-%d %H:%M:%S')}
|
||||
|
@ -24,8 +24,8 @@ class create_basic_user(insert_data):
|
|||
|
||||
class create(insert_data):
|
||||
table = 'users'
|
||||
required = {'email', 'password', 'username', 'first_name', 'last_name', 'created'}
|
||||
columns = {'email', 'password', 'username', 'first_name', 'last_name', 'created'}
|
||||
required = {'password', 'username', 'first_name', 'last_name', 'created'}
|
||||
columns = {'password', 'username', 'first_name', 'last_name', 'created'}
|
||||
columns_optional = {'profile_image'}
|
||||
|
||||
def calculated_data(self):
|
||||
|
@ -41,6 +41,12 @@ class update_last_login(update_data):
|
|||
required = {'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):
|
||||
debug = True
|
||||
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
|
||||
table = 'user_oauth'
|
||||
required = {'username', 'provider', 'user_id'}
|
||||
columns = {'username', 'provider', 'user_id'}
|
||||
columns = {'username', 'provider', 'user_id', 'registered'}
|
||||
|
||||
#~ def calculated_data(self):
|
||||
#~ 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)
|
||||
def calculated_data(self):
|
||||
return {'registered': time.strftime('%Y-%m-%d %H:%M:%S')}
|
||||
|
||||
class update_oauth_login(update_data):
|
||||
table = 'user_oauth'
|
||||
columns = {'username', 'provider', 'last_login'}
|
||||
required = {'username', 'provider'}
|
||||
query_file = 'get_user_by_oauth_username.sql'
|
||||
columns_where = {'username', 'provider'}
|
||||
|
||||
def calculated_data(self):
|
||||
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(update_oauth_login, self).set(data)
|
||||
return {
|
||||
'last_login': time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
}
|
||||
|
||||
class fetch_oauth_login(select_data):
|
||||
required = {'username', 'provider'}
|
||||
|
|
|
@ -28,6 +28,8 @@ def examples():
|
|||
#finish of the page
|
||||
return footer()
|
||||
|
||||
def generate_rss():
|
||||
pass
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = argparse.ArgumentParser(description='Generate static pages')
|
||||
|
|
|
@ -13,17 +13,20 @@ from pages import chat
|
|||
from pages import blog
|
||||
from pages import members
|
||||
|
||||
from pages.core.login_pages import login_pages
|
||||
from pages.donate import donate_pages
|
||||
from pages.google_groups import google_groups_pages
|
||||
from pages.equipment import equipment_pages
|
||||
from pages.profile import profile_pages
|
||||
from authorize import authorize_pages, login_manager
|
||||
|
||||
|
||||
web_app = Flask(__name__, static_folder='static')
|
||||
web_app.config['PROPAGATE_EXCEPTIONS'] = True
|
||||
web_app.secret_key = settings.flask_secret_key
|
||||
login_manager.init_app(web_app)
|
||||
|
||||
web_app.register_blueprint(login_pages)
|
||||
web_app.register_blueprint(authorize_pages)
|
||||
web_app.register_blueprint(equipment_pages)
|
||||
web_app.register_blueprint(profile_pages)
|
||||
|
|
|
@ -52,10 +52,13 @@ class payment:
|
|||
"description": reference}]})
|
||||
|
||||
payment_response = payment.create()
|
||||
print 'payment create'
|
||||
if payment_response:
|
||||
print payment_response
|
||||
for link in payment.links:
|
||||
if link.method == "REDIRECT":
|
||||
redirect_url = str(link.href)
|
||||
print redirect_url
|
||||
return str(redirect_url)
|
||||
else:
|
||||
print("Error while creating payment:")
|
||||
|
@ -125,6 +128,7 @@ class payment:
|
|||
}
|
||||
|
||||
if self.provider == 'paypal':
|
||||
print 'subscribe_confirm'
|
||||
payment_token = args.get('token', '')
|
||||
billing_agreement_response = paypal.BillingAgreement.execute(payment_token)
|
||||
amount = 0
|
||||
|
@ -171,7 +175,6 @@ class payment:
|
|||
|
||||
|
||||
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':
|
||||
return gocardless.client.new_subscription_url(
|
||||
amount=amount,
|
||||
|
@ -239,8 +242,12 @@ class payment:
|
|||
|
||||
def confirm(self, args):
|
||||
confirm_details = {}
|
||||
confirm_details['successfull'] = False
|
||||
print '---------------------'
|
||||
print args
|
||||
|
||||
|
||||
|
||||
from pprint import pprint
|
||||
if self.provider == 'paypal':
|
||||
print args.get('paymentId')
|
||||
|
@ -249,7 +256,7 @@ class payment:
|
|||
pprint(payment)
|
||||
print pprint(payment)
|
||||
print payment
|
||||
|
||||
|
||||
confirm_details['name'] = payment['payer']['payer_info'].first_name + ' ' + payment['payer']['payer_info'].last_name
|
||||
confirm_details['user'] = payment['payer']['payer_info'].email
|
||||
confirm_details['status'] = payment.state
|
||||
|
@ -257,9 +264,15 @@ class payment:
|
|||
confirm_details['created'] = payment.create_time
|
||||
confirm_details['reference'] = payment.id
|
||||
pprint(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':
|
||||
bill_id = args.get('resource_id')
|
||||
gocardless.client.confirm_resource(args)
|
||||
|
@ -272,5 +285,6 @@ class payment:
|
|||
#~ confirm_details['amount_minus_fees'] = bill.amount_minus_fees
|
||||
confirm_details['created'] = bill.created_at
|
||||
confirm_details['reference'] = bill_id
|
||||
confirm_details['successfull'] = True
|
||||
return confirm_details
|
||||
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('<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-animate.js"></script>')
|
||||
setup.persistent_header('<script type="text/javascript" src="/static/js/default.js"></script>')
|
||||
|
@ -61,13 +61,21 @@ def header(title, description='Maidstone Hackspace is a shared space where artis
|
|||
else:
|
||||
web.menu.append('Login', '/login')
|
||||
web.template.body.append(web.menu.render())
|
||||
|
||||
def footer():
|
||||
|
||||
# lets create the 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.template.footer.append(web.footer_content.render())
|
||||
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()
|
||||
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ def index():
|
|||
web.page.append(web.form.render())
|
||||
|
||||
web.template.body.append(web.page.render())
|
||||
return footer()
|
||||
return web.render()
|
||||
|
||||
|
||||
@donate_pages.route("/donate/populate", methods=['GET'])
|
||||
|
@ -103,7 +103,7 @@ def populate_by_name():
|
|||
if 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'])
|
||||
|
@ -112,8 +112,10 @@ def submit_donation():
|
|||
provider='paypal',
|
||||
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(
|
||||
amount=request.form.get('amount'),
|
||||
amount=donation_amount,
|
||||
reference=request.form.get('reference', ''),
|
||||
redirect_success='%s/donate/success' % app_domain,
|
||||
redirect_failure='%s/donate/failure' % app_domain
|
||||
|
@ -123,8 +125,7 @@ def submit_donation():
|
|||
|
||||
|
||||
@donate_pages.route("/donate/success", methods=['GET'])
|
||||
def success_donation():
|
||||
# confirm the payment
|
||||
def donation_successfull():
|
||||
|
||||
provider = payment(
|
||||
provider='paypal',
|
||||
|
@ -157,4 +158,18 @@ def success_donation():
|
|||
"""Thanks your payment has been recieved.""")
|
||||
web.page.section(web.paragraph.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,10 +34,12 @@ def index():
|
|||
count_users += 1
|
||||
if item.get('status') is 1:
|
||||
count_members += 1
|
||||
print count_members
|
||||
web.page.section('Members %d' % count_members)
|
||||
web.page.section('Users %d' % count_users)
|
||||
|
||||
web.info_box.create('Current 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.page.section(web.container.render())
|
||||
web.template.body.append(web.page.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 import badges
|
||||
from data import members
|
||||
#~ from config.settings import gocardless_environment, gocardless_credentials
|
||||
from config.settings import app_domain
|
||||
|
||||
from libs.payments import payment
|
||||
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.route("/profile", methods=['GET'])
|
||||
@login_required
|
||||
def index():
|
||||
|
@ -49,8 +42,6 @@ def index():
|
|||
web.columns.append(web.paragraph.render())
|
||||
|
||||
# membership form
|
||||
#~ if user.get('status') != 1:
|
||||
print user
|
||||
web.columns.append(
|
||||
web.member_card.create(
|
||||
reference=str(user.get('user_id')).zfill(5),
|
||||
|
@ -66,6 +57,13 @@ def index():
|
|||
'/profile/details'
|
||||
).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())
|
||||
|
||||
|
@ -186,8 +184,6 @@ def membership_signup(provider):
|
|||
'amount': payment_details.get('amount'),
|
||||
'subscription_reference': payment_details.get('reference')})
|
||||
|
||||
|
||||
|
||||
web.page.section(web.paragraph.render())
|
||||
web.template.body.append(web.page.render())
|
||||
return footer()
|
||||
|
@ -205,9 +201,6 @@ def update_profiles():
|
|||
|
||||
return web.form.render()
|
||||
|
||||
|
||||
|
||||
|
||||
@profile_pages.route("/profile/details", methods=['GET'])
|
||||
@login_required
|
||||
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 '')
|
||||
return web.form.render()
|
||||
|
||||
|
||||
@profile_pages.route("/profile/update", methods=['POST'])
|
||||
@login_required
|
||||
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 {}
|
||||
|
||||
.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 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 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 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;}
|
||||
|
@ -209,11 +210,11 @@ height:48px;width:48px; -webkit-animation:spin 2s linear infinite ;-moz-animatio
|
|||
#login_box label {display:block;margin: 20px 0px 20px;}
|
||||
#login_box input {margin: 20px 0px 0px;float:none;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 a {float:left;}
|
||||
#login_box .providers {margin: 20px 0px 20px;height:48px;height:35px;}
|
||||
#login_box .providers a {float:left;margin-right:30px;}
|
||||
|
||||
|
||||
.members .tile{ width:220px;float:left;}
|
||||
.members .stats {}
|
||||
.members .tile {width:220px;float:left;}
|
||||
.members .tile-img{margin:10px;width:200px;}
|
||||
.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 datetime import datetime
|
||||
import time
|
||||
|
@ -7,19 +8,21 @@ class control(base_widget_extended):
|
|||
contents = []
|
||||
def create(self, title="Events", calendar_id=None, api_key=None):
|
||||
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,
|
||||
datetime.now().strftime('%Y-%m-%dT%H:%M:%S-00:00'),
|
||||
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()
|
||||
self.contents = []
|
||||
|
||||
# loop over calendar results, and format for display
|
||||
for event in calendar_data.get('items'):
|
||||
str_datetime = time.strptime(event.get('start').get('dateTime'), '%Y-%m-%dT%H:%M:%SZ')
|
||||
formatted_date = time.strftime('%d %b %Y %H:%M', str_datetime)
|
||||
str_datetime = parser.parse(event.get('start').get('dateTime'))
|
||||
formatted_date = str_datetime.strftime('%d %b %Y %H:%M')
|
||||
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>' % (
|
||||
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>'
|
||||
if self.oauth_enabled:
|
||||
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:
|
||||
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:
|
||||
htm += '<a title="Login with facebook" class="but row" href="/oauth/facebook/login">Login with Facebook</a> '
|
||||
if 'github' in self.oauth_enabled:
|
||||
|
|
Loading…
Reference in New Issue