def guest_login(trackid,guesttrack,wifisite,guestdevice,phoneconfig,loginauth): ''' Function to called if the site is configured with phone login ''' #show the configured landing page phone_form = generate_phoneform(phoneconfig) if phone_form.validate_on_submit(): #assign a guest based on form newguest = assign_guest_entry(wifisite,guesttrack,form=phone_form) #create new auth loginauth.populate_auth_details(phoneconfig) loginauth.reset() loginauth.state = LOGINAUTH_FIRST loginauth.save() #update guesttrack guesttrack.state = GUESTTRACK_POSTLOGIN guesttrack.loginauthid = loginauth.id guesttrack.updatestat('auth_phone',1) #update guestdevice guestdevice.guestid = newguest.id guestdevice.save() #update guest newguest.demo = guesttrack.demo newguest.devices.append(guestdevice) newguest.save() guestlog_debug('phone_login new guest track ID:%s'%newguest.id,wifisite,guesttrack) return redirect_guest(wifisite,guesttrack) landingpage = Landingpage.query.filter_by(siteid=wifisite.id).first() return render_template('guest/%s/phone_landing.html'%wifisite.template,\ wifisite=wifisite,landingpage=landingpage,phone_form=phone_form, trackid=trackid)
def decorated_function(*args, **kwargs): wifisite = kwargs.get('wifisite') guesttrack = kwargs.get('guesttrack') guestdevice = kwargs.get('guestdevice') #get the function name used fname = f.func_name #check if site is configured for emaillogin if not wifisite.check_login_en('auth_voucher'): guestlog_warn( 'trying to access voucher login for \ non configured site', wifisite, guesttrack) abort(404) #get and validated emailconfig voucherconfig = Voucherconfig.query.filter_by( siteid=wifisite.id).first() if not voucherconfig: guestlog_warn('empty voucherconfig, aborting', wifisite, guesttrack) abort(404) kwargs['voucherconfig'] = voucherconfig #get paymentauth for this device voucherauth = Voucherauth.query.filter_by( siteid=wifisite.id, deviceid=guestdevice.id).first() if not voucherauth: guestlog_debug( 'in %s empty Paymentauth,creating default one' % fname, wifisite, guesttrack) voucherauth = Voucherauth(siteid=wifisite.id, deviceid=guestdevice.id, account_id=wifisite.account_id) voucherauth.save() kwargs['voucherauth'] = voucherauth return f(*args, **kwargs)
def guest_login(trackid, guesttrack, wifisite, guestdevice, voucherconfig, voucherauth, voucherid=None): ''' Function to called if the site is configured with payment login ''' #show the configured landing page voucher_form = generate_voucherform(voucherconfig) if voucher_form.validate_on_submit(): voucher = Voucher.query.filter( and_(Voucher.siteid == wifisite.id, Voucher.voucher == voucher_form.voucher.data)).first() if voucher: #check and update validity of paymentaccount (status, msg) = voucher.check_and_update_validity(voucherauth) if status: #assign a guest based on form newguest = assign_guest_entry(wifisite, guesttrack, form=voucher_form) #update guesttrack guesttrack.state = GUESTTRACK_POSTLOGIN guesttrack.loginauthid = voucherauth.id guesttrack.updatestat('auth_voucher', 1) guesttrack.save() #update guestdevice guestdevice.guestid = newguest.id guestdevice.save() #update guest newguest.demo = guesttrack.demo newguest.devices.append(guestdevice) newguest.save() guestlog_debug('voucher_login new guest track ID:%s'%\ newguest.id,wifisite,guesttrack) return redirect_guest(wifisite, guesttrack) else: flash(msg, 'danger') guestlog_warn('in voucher.guest_login limit expired', wifisite, guesttrack) else: #transaction failed! display msg flash(_l('Wrong voucher entry'), 'danger') guestlog_warn('in voucher.guest_login wrong voucher id', wifisite, guesttrack) landingpage = Landingpage.query.filter_by(siteid=wifisite.id).first() return render_template('guest/%s/voucher_landing.html'%wifisite.template,\ wifisite=wifisite,landingpage=landingpage,voucher_form=voucher_form, trackid=trackid)
def fb_like(trackid, guesttrack, wifisite, guestdevice, fbconfig, loginauth): auth_like = None auth_post = None if request.method == 'POST': auth_like = request.form['authlike'] if auth_like == '1': #quick hack to test for liking and posting, guest has skipped the liking, allow #internet for now and ask next time pass elif auth_like == '2': #user has liked the page mark track and guest as liked guest = Guest.query.get(guestdevice.guestid) if not guest: guestlog_warn("no guest associated with guestdevice", wifisite, guesttrack) return redirect_guest(wifisite, guesttrack) guest.fbliked = 1 guest.save() loginauth.fbliked = 1 loginauth.save() guesttrack.updatestat('fbliked', 1) else: #show page asking guest to like landingpage = Landingpage.query.filter_by(siteid=wifisite.id).first() fb_page = fbconfig.fb_page fb_appid = fbconfig.fb_appid guestlog_debug('show ask for like page', wifisite, guesttrack) return render_template("guest/%s/fb_like.html" % wifisite.template, landingpage=landingpage, fb_appid=fb_appid, trackid=trackid, fb_page=fb_page) #redirect guest to auth page loginauth.populate_auth_details(fbconfig) loginauth.reset() loginauth.reset_lastlogin() loginauth.state = LOGINAUTH_FIRST loginauth.save() #neither configured, authorize guest guesttrack.state = GUESTTRACK_POSTLOGIN guesttrack.loginauthid = loginauth.id guesttrack.updatestat('auth_facebook', 1) return redirect_guest(wifisite, guesttrack)
def decorated_function(*args, **kwargs): voucherauth = kwargs.get('voucherauth') guesttrack = kwargs.get('guesttrack') wifisite = kwargs.get('wifisite') if voucherauth.is_not_demo() and \ voucherauth.voucherid and \ voucherauth.time_available() and \ voucherauth.data_available(): #update guesttrack guesttrack.state = GUESTTRACK_POSTRELOGIN guesttrack.loginauthid = voucherauth.id guesttrack.updatestat('auth_voucher',1) guesttrack.updatestat('relogin',1) guesttrack.save() guestlog_debug('voucher_login relogin track ', wifisite,guesttrack) return redirect_guest(wifisite,guesttrack) return f(*args, **kwargs)
def fb_checkin(trackid, guesttrack, wifisite, guestdevice, fbconfig, loginauth): '''End point for guest to checkin ''' code = request.args.get('code') access_token = None fb_appid = fbconfig.fb_appid fb_app_secret = fbconfig.fb_app_secret fb_page = fbconfig.fb_page redirect_uri = url_for('unifispot.modules.facebook.fb_checkin', trackid=trackid, _external=True) if code: #URL called after OAuth try: at = GraphAPI().get_access_token_from_code(code, redirect_uri,\ fb_appid, fb_app_secret) access_token = at['access_token'] graph = GraphAPI(access_token) permissions = graph.get_connections("me", "permissions") except: guestlog_exception( 'fb_checkin exception while getting access_token \ redirecting to fb_checkin ', wifisite, guesttrack) #send back to page return redirect(redirect_uri, code=302) else: try: graph = GraphAPI(loginauth.fbtoken) permissions = graph.get_connections("me", "permissions") except: guestlog_exception( 'fb_checkin exception while getting permissions \ redirecting to fb_checkin ', wifisite, guesttrack) return redirect_guest(wifisite, guesttrack) #check if the user has granted publish_permissions publish_permission = False for perm in permissions['data']: if perm.get('permission') == 'publish_actions' and\ perm.get('status') == 'granted': publish_permission = True if not publish_permission: guestlog_warn( 'fb_checkin called without guest giving publish_permission redo Oauth\ fbauth', wifisite, guesttrack) params = { 'client_id': fb_appid, 'redirect_uri': redirect_uri, 'scope': 'publish_actions ' } url = 'https://www.facebook.com/dialog/oauth?' + urllib.urlencode( params) return redirect(url, code=302) checkinform = CheckinForm() if checkinform.validate_on_submit(): #try to do checkin try: page_info = graph.get_object( fb_page, fields='description,name,location,picture') graph.put_wall_post(message=checkinform.message.data, attachment={'place': page_info['id']}) except Exception as e: if 'Duplicate status message' in str(e): guestlog_warn( 'duplicate message exception while doing checkin, \ ask guest to enter some message', wifisite, guesttrack) flash(_('Please enter some message'), 'danger') else: guestlog_exception('exception while doing checkin', wifisite, guesttrack) else: #mark fbauth with checkedin guesttrack.updatestat('fbcheckedin', 1) guest = Guest.query.get(guestdevice.guestid) if not guest: guestlog_warn("no guest associated with guestdevice", wifisite, guesttrack) return redirect_guest(wifisite, guesttrack) guest.fbcheckedin = 1 guest.save() #check if guest needs to be redirected to asklike #page if fbconfig.auth_fb_like and guest.fbliked != 1: return redirect( url_for('unifispot.modules.facebook.fb_like', trackid=trackid)) else: #redirect guest to auth page loginauth.populate_auth_details(fbconfig) loginauth.reset() loginauth.reset_lastlogin() loginauth.state = LOGINAUTH_FIRST loginauth.save() #neither configured, authorize guest guesttrack.state = GUESTTRACK_POSTLOGIN guesttrack.loginauthid = loginauth.id guesttrack.updatestat('auth_facebook', 1) return redirect_guest(wifisite, guesttrack) guestlog_debug('show ask for checkin page', wifisite, guesttrack) landingpage = Landingpage.query.filter_by(siteid=wifisite.id).first() page_info = graph.get_object(fb_page, fields='location,name') loc = page_info['location'] location = ' %s - %s %s %s' % (page_info.get( 'name', ''), loc.get('street', ''), loc.get( 'city', ''), loc.get('country', '')) return render_template("guest/%s/fb_checkin.html" % wifisite.template, landingpage=landingpage, app_id=fb_appid, trackid=trackid, fb_page=fb_page, location=location, checkinform=checkinform)