Пример #1
0
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)   
Пример #2
0
 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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
    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)
Пример #6
0
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)