Exemplo n.º 1
0
 def populate(self):
     self.session_limit_control.choices = [(0, _l('No Limit')),
                                           (1, _l('Daily')),
                                           (2, _l('Monthly'))]
     self.relogin_policy.choices = [('always', 'Always'),
                                    ('onetime', 'One Time'),
                                    ('monthly', 'Monthly')]
Exemplo n.º 2
0
class AccountForm(Form):
    unifi_server = TextField(_l('Controller IP'), validators=[Required()])
    unifi_user = TextField(_l('Controller Username'), validators=[Required()])
    unifi_pass = PasswordField(_l('Controller Password'),
                               validators=[Required()])
    unifi_port = TextField(_l('Controller Port'), validators=[Required()])
    unifi_version = SelectField(_('Controller API version'),
                                choices=[('v4', 'V4/V5')])

    def populate(self):
        pass
Exemplo n.º 3
0
class AdminManage(FlaskView):
    decorators = [login_required, admin_required]

    @classy_menu_item('.manage.admin',
                      _l('Admins'),
                      order=0,
                      visible_when=admin_menu)
    @classy_menu_item('.manage',
                      _l('Manage'),
                      order=1,
                      icon='fa-cogs',
                      visible_when=admin_menu)
    def index(self):
        return render_template('core/admins.html')
Exemplo n.º 4
0
class VoucherForm(Form):  
    duration_val    = IntegerField(_l("Duration"),validators = [DataRequired()])
    batchid         = IntegerField(_l("Batch ID"),[DataRequired(),NumberRange(min=1000,
                            max=9999,message=_l('Batch ID should be a 4 digit number'))])
    notes           = TextField(_l("Note"))
    number          = IntegerField(_l("Create"),validators = [DataRequired()])
    bytes_t         = IntegerField(_l("Total Data in Mb"))
    duration_type   = SelectField(_l("Select"),coerce=int,
                            choices=[(1,'Minutes'),(2,'Hours'),(3,'Days')] )  
    num_devices     = IntegerField(_l("Devices Allowed"),validators = [DataRequired()])  
    speed_dl        = IntegerField(_l("Download Speed"))
    speed_ul        = IntegerField(_l("Upload Speed"))
    def populate(self):
        pass        
Exemplo n.º 5
0
class VoucherDesignView(FlaskView):
    @classy_menu_item('.voucher.design',
                      _l('Design'),
                      order=1,
                      visible_when=site_menu)
    def index(self, siteid):
        decorators = [login_required, validate_site_ownership]

        voucherdesignform = VoucherDesignForm()
        voucherdesignform.populate()

        voucherfilesform = VoucherFilesForm()
        fakevoucher = Voucher(bytes_t=100,
                              voucher='1234567890',
                              duration_type=1,
                              duration_val=1,
                              speed_dl=256,
                              speed_ul=100)
        voucherdesign = Voucherdesign.query.filter_by(siteid=siteid).first()

        return render_template('voucher_designer.html',
                               voucherdesignform=voucherdesignform,
                               siteid=siteid,
                               voucherfilesform=voucherfilesform,
                               fakevoucher=fakevoucher,
                               voucherdesign=voucherdesign)
Exemplo n.º 6
0
        def decorated_function(*args, **kwargs):
            wifisite = kwargs.get('wifisite')
            guesttrack = kwargs.get('guesttrack')
            guestdevice = kwargs.get('guestdevice')
            loginconfig = kwargs.get(lconfigstr)
            #get the function name used
            fname = f.func_name
            #get and validated emailauth
            loginauth = AuthModel.query.filter_by(
                siteid=wifisite.id, deviceid=guestdevice.id).first()
            if not loginauth:
                guestlog_debug(
                    'in :%s empty %s, creating default one' %
                    (fname, AuthModel), wifisite, guesttrack)
                loginauth = AuthModel(siteid=wifisite.id,
                                      deviceid=guestdevice.id,
                                      account_id=wifisite.account_id)
                loginauth.save()
            elif loginauth.is_blocked():
                flash(_l("Looks like you have been blocked from using WiFi"),
                      'danger')
                landingpage = Landingpage.query.filter_by(
                    siteid=wifisite.id).first()
                return render_template('guest/%s/base_landing.html'%wifisite.template,\
                        wifisite=wifisite,landingpage=landingpage,trackid=guesttrack.trackid)
            elif loginauth.login_completed(loginconfig) and \
                        guest_auto_relogin_allowed(loginauth,loginconfig):
                if loginconfig.is_limited():
                    #email auth from a previous session,
                    #check if its valid still
                    starttime = loginconfig.get_limit_starttime()

                    expired_url = url_for(
                        'unifispot.modules.%s.guest_override' % modname,
                        trackid=guesttrack.trackid)

                    if not validate_loginauth_usage(wifisite, guesttrack,
                                                    loginconfig, loginauth,
                                                    starttime):
                        return redirect(expired_url)
                else:
                    loginauth.time_limit = 480
                    loginauth.data_limit = 1000

                loginauth.state = LOGINAUTH_REPEATED
                loginauth.reset()
                loginauth.save()
                #update guesttrack
                guesttrack.state = GUESTTRACK_POSTLOGIN
                guesttrack.loginauthid = loginauth.id
                guesttrack.updatestat(logintypestr, 1)
                guesttrack.updatestat('relogin', 1)
                guesttrack.save()

                guestlog_debug('%s guest   relogin ' % modname, wifisite,
                               guesttrack)
                return redirect_guest(wifisite, guesttrack)

            kwargs['loginauth'] = loginauth
            return f(*args, **kwargs)
Exemplo n.º 7
0
    class F(Form):
        name = TextField(_l('Name'), validators=[Required()])
        timezone = SelectField(_l('Site Timezone'), choices=[])
        client_id = SelectField(_l('Select Client'),
                                coerce=int,
                                choices=[],
                                default=0)
        backend_type = SelectField(_l('Select Site Type'),
                                   choices=[('unifi', "UniFi")],
                                   default='unifi')

        def populate(self, wifisite=None):
            from unifispot.core.models import Client
            clients = Client.query.filter_by(
                account_id=current_user.account_id).all()
            self.client_id.choices = []
            for client in clients:
                self.client_id.choices.append((client.id, client.displayname))

            self.timezone.choices = [
                (tz_name, tz_formated)
                for tz_offset, tz_name, tz_formated in zones.get_timezones()
            ]

            if not baseform:
                self.sitekey.choices = []
                #populate sitekey with available options if specific id is specified
                if wifisite and wifisite.backend_type:
                    #try to get available sitekeys
                    try:
                        module_path = current_app.config.get(
                            'MODULE_PATH', 'modules')
                        backend_module = ".".join([
                            current_app.name, module_path,
                            wifisite.backend_type, 'main'
                        ])
                        backend = importlib.import_module(backend_module)
                        sitekeys = getattr(backend, 'get_sitekeys')(wifisite)
                    except:
                        flash(
                            _l('Error while getting sitelist. \
                                        Please check Controller settings'),
                            'danger')
                        logger.exception("Exception while trying to get sitekeys for :%s"\
                                        %wifisite.id)
                    else:
                        self.sitekey.choices = sitekeys
Exemplo n.º 8
0
 def validate(self):
     rv = Form.validate(self)
     if not rv:
         return False
     if self.password and (self.password.data != self.repassword.data):
         self.password.errors.append(_l("Entered passwords didn't match"))
         return False
     return True
Exemplo n.º 9
0
class UserForm(Form):
    email = TextField(_l('Email'), validators=[Required()])
    displayname = TextField(_l('Name'), validators=[Required()])
    password = PasswordField(_l('Password'))
    repassword = PasswordField(_l('Confirm Password'))

    def populate(self):
        pass

    def validate(self):
        rv = Form.validate(self)
        if not rv:
            return False
        if self.password and (self.password.data != self.repassword.data):
            self.password.errors.append(_l("Entered passwords didn't match"))
            return False
        return True
Exemplo n.º 10
0
class AccountManage(FlaskView):
    decorators = [login_required, admin_required]

    @classy_menu_item('.manage.settings',
                      _l('Settings'),
                      visible_when=admin_menu)
    def index(self):
        settingsform = AccountForm()
        return render_template('core/settings.html', settingsform=settingsform)
Exemplo n.º 11
0
class VoucherView(FlaskView):
    @classy_menu_item('.voucher.vouchers',
                      _l('View'),
                      order=0,
                      visible_when=site_menu)
    @classy_menu_item('.voucher',
                      _l('Voucher'),
                      order=7,
                      icon='fa-money',
                      visible_when=site_menu)
    def index(self, siteid):
        decorators = [login_required, validate_site_ownership]

        voucherform = VoucherForm()
        voucherform.populate()

        return render_template('vouchers.html',
                               voucherform=voucherform,
                               siteid=siteid)
Exemplo n.º 12
0
class SiteDashboard(FlaskView):
    decorators = [login_required]

    @classy_menu_item('.sitedash',
                      _l('Dashboard'),
                      icon='fa-home',
                      visible_when=site_menu,
                      order=0)
    def index(self, siteid):
        return render_template('core/site-dashboard.html', siteid=siteid)
Exemplo n.º 13
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)
Exemplo n.º 14
0
class WifisiteManage(FlaskView):
    decorators = [login_required, admin_required, validate_site_ownership]

    @classy_menu_item('.settings',
                      _l('Settings'),
                      icon='fa-cogs',
                      visible_when=admin_site_menu,
                      order=1)
    def index(self, siteid):
        wifisite = Wifisite.query.get(siteid)
        siteform = get_wifisite_form()
        siteform.populate(wifisite)
        return render_template('core/site-settings.html',
                               siteid=siteid,
                               siteform=siteform)
Exemplo n.º 15
0
class LandingpageManage(FlaskView):
    decorators = [login_required, validate_site_ownership]

    @classy_menu_item('.landingpage',
                      _l('Landingpage'),
                      icon='fa-desktop',
                      visible_when=site_menu,
                      order=2)
    def index(self, siteid):
        landingform = LandingPageForm()
        landingform.populate()
        simplelandingpageform = SimpleLandingPageForm()
        simplelandingpageform.populate()
        landingfilesform = LandingFilesForm()
        landingfilesform.populate()
        wifisite = Wifisite.query.get(siteid)
        return render_template('core/site-landing.html',
                               siteid=siteid,
                               landingform=landingform,
                               simplelandingpageform=simplelandingpageform,
                               landingfilesform=landingfilesform,
                               wifisite=wifisite)
Exemplo n.º 16
0
    def index(self):
        '''Returns a list of { 'id':siteid ,'name':sitename,'url':dashbordurl} dicts,

            used for site list drop down
        '''
        try:
            data = []
            if current_user.type == 'admin':
                sites = self.get_modal_obj().query.filter_by(
                    account_id=current_user.account_id).all()
            else:
                sites = self.get_modal_obj().query.filter_by(
                    account_id=current_user.account_id,
                    client_id=current_user.id).all()
            for site in sites:
                data.append({
                    'id':
                    site.id,
                    'name':
                    site.name,
                    'url':
                    url_for('SiteDashboard:index', siteid=site.id)
                })
        except:
            logger.exception("Exception while trying to get site list")
            return jsonify({
                'status': 0,
                'data': '',
                'msg': _l('Error in getting site list')
            })
        else:
            return jsonify({
                'status': 1,
                'data': data,
                'msg': '',
                'sites_available': 1
            })
Exemplo n.º 17
0
class VoucherFilesForm(Form):
    logofile        = FileField(_l('Logo File'))
    def populate(self):
        pass        
Exemplo n.º 18
0
class ClientManage(FlaskView):
    decorators = [login_required, admin_required]

    @classy_menu_item('.manage.client', _l('Clients'), visible_when=admin_menu)
    def index(self):
        return render_template('core/clients.html')
Exemplo n.º 19
0
class VoucherConfigForm(Form):
    enable_email        = BooleanField(_l('Email'),default=1)
    enable_firstname    = BooleanField(_l('First Name'),default=1)
    enable_lastname     = BooleanField(_l('Last Name'),default=1)
    enable_dob          = BooleanField(_l('DOB'),default=1)
    enable_extra1       = BooleanField(_l('Extra1'),default=1)    
    enable_extra2       = BooleanField(_l('Extra2'),default=1)    
    mandate_email       = BooleanField(_l('Email'),default=1)
    mandate_firstname   = BooleanField(_l('First Name'),default=1)
    mandate_lastname    = BooleanField(_l('Last Name'),default=1)
    mandate_dob         = BooleanField(_l('DOB'),default=1)
    mandate_extra1      = BooleanField(_l('Extra1'),default=1)    
    mandate_extra2      = BooleanField(_l('Extra2'),default=1) 
    labelfor_email      = TextField(_l('Email Field'))
    labelfor_firstname  = TextField(_l('Firstname Field'))
    labelfor_lastname   = TextField(_l('Lastname Field'))
    labelfor_dob        = TextField(_l('DOB Field'))
    labelfor_extra1     = TextField(_l('Extra Field1'))
    labelfor_extra2     = TextField(_l('Extra Field2'))


    def populate(self):
        pass
Exemplo n.º 20
0
class FbOverrideForm(Form):
    password = PasswordField(_l('Password'), validators=[Required()])
Exemplo n.º 21
0
class FbConfigForm(Form):
    data_limit = IntegerField(_l('Data Limit(Mb)', default=0))
    time_limit = IntegerField(_l('Time Limit(Min)', default=0))
    speed_ul = IntegerField(_l('Ul Speed Limit(Kbps)', default=0))
    speed_dl = IntegerField(_l('DL Speed Limit(Kbps)', default=0))
    auth_fb_like = BooleanField(_l('Ask for Like', default=1))
    auth_fb_post = BooleanField(_l('Ask for Checkin', default=1))
    fb_appid = TextField(_l('FB APP ID'))
    fb_app_secret = TextField(_l('FB APP Secret'))
    fb_page = TextField(_l('FB Page'))
    session_limit_control = SelectField(_l('Restrict Sessions'),
                                        coerce=int,
                                        choices=[])
    session_overridepass = TextField(_l('Override Password'))
    relogin_policy = SelectField(_l('Guest has to login'), choices=[])

    def populate(self):
        self.session_limit_control.choices = [(0, 'Never'), (1, 'Daily'),
                                              (2, 'Monthly')]
        self.relogin_policy.choices = [('always', 'Always'),
                                       ('onetime', 'One Time'),
                                       ('monthly', 'Monthly')]
Exemplo n.º 22
0
class PhoneConfigForm(Form):
    enable_phonenumber = BooleanField(_l('Phone'), default=1)
    enable_firstname = BooleanField(_l('First Name'), default=1)
    enable_lastname = BooleanField(_l('Last Name'), default=1)
    enable_dob = BooleanField(_l('DOB'), default=1)
    enable_extra1 = BooleanField(_l('Extra1'), default=1)
    enable_extra2 = BooleanField(_l('Extra2'), default=1)
    mandate_phonenumber = BooleanField(_l('Phone'), default=1)
    mandate_firstname = BooleanField(_l('First Name'), default=1)
    mandate_lastname = BooleanField(_l('Last Name'), default=1)
    mandate_dob = BooleanField(_l('DOB'), default=1)
    mandate_extra1 = BooleanField(_l('Extra1'), default=1)
    mandate_extra2 = BooleanField(_l('Extra2'), default=1)
    labelfor_phonenumber = TextField(_l('Phone Number'))
    labelfor_firstname = TextField(_l('Firstname Field'))
    labelfor_lastname = TextField(_l('Lastname Field'))
    labelfor_dob = TextField(_l('DOB Field'))
    labelfor_extra1 = TextField(_l('Extra Field1'))
    labelfor_extra2 = TextField(_l('Extra Field2'))
    data_limit = IntegerField(_l('Data Limit(Mb)'), default=0)
    time_limit = IntegerField(_l('Time Limit(Min)'), default=0)
    speed_ul = IntegerField(_l('Ul Speed Limit(Kbps)'), default=0)
    speed_dl = IntegerField(_l('DL Speed Limit(Kbps)'), default=0)
    session_limit_control = SelectField(_l('Restrict Sessions'),
                                        coerce=int,
                                        choices=[])
    session_overridepass = TextField(_l('Override Password'))
    relogin_policy = SelectField(_l('Guest has to login'), choices=[])

    def populate(self):
        self.session_limit_control.choices = [(0, _l('No Limit')),
                                              (1, _l('Daily')),
                                              (2, _l('Monthly'))]
        self.relogin_policy.choices = [('always', 'Always'),
                                       ('onetime', 'One Time'),
                                       ('monthly', 'Monthly')]
Exemplo n.º 23
0
class VoucherDesignForm(Form):
    site_id         = HiddenField(_l('Site ID'))
    logofile        = HiddenField(_l('Header File'))   
    bgcolor         = TextField(_l('Background Color'))
    txtcolor        = TextField(_l('Text Color'))
    bordercolor     = TextField(_l('Border Color'))
    showlogo        = BooleanField(_l('Show Logo'),default=1)     
    shownotes       = BooleanField(_l('Show Notes'),default=1)
    showqr          = BooleanField(_l('Show QRcode'),default=1)
    showduration    = BooleanField(_l('Show Duration'),default=1)
    showdata        = BooleanField(_l('Show Data Limit'),default=1)
    showspeed       = BooleanField(_l('Show Speed Limit'),default=1)
    def populate(self):
        pass    
Exemplo n.º 24
0
def get_wifisite_form(baseform=False):
    class F(Form):
        name = TextField(_l('Name'), validators=[Required()])
        timezone = SelectField(_l('Site Timezone'), choices=[])
        client_id = SelectField(_l('Select Client'),
                                coerce=int,
                                choices=[],
                                default=0)
        backend_type = SelectField(_l('Select Site Type'),
                                   choices=[('unifi', "UniFi")],
                                   default='unifi')

        def populate(self, wifisite=None):
            from unifispot.core.models import Client
            clients = Client.query.filter_by(
                account_id=current_user.account_id).all()
            self.client_id.choices = []
            for client in clients:
                self.client_id.choices.append((client.id, client.displayname))

            self.timezone.choices = [
                (tz_name, tz_formated)
                for tz_offset, tz_name, tz_formated in zones.get_timezones()
            ]

            if not baseform:
                self.sitekey.choices = []
                #populate sitekey with available options if specific id is specified
                if wifisite and wifisite.backend_type:
                    #try to get available sitekeys
                    try:
                        module_path = current_app.config.get(
                            'MODULE_PATH', 'modules')
                        backend_module = ".".join([
                            current_app.name, module_path,
                            wifisite.backend_type, 'main'
                        ])
                        backend = importlib.import_module(backend_module)
                        sitekeys = getattr(backend, 'get_sitekeys')(wifisite)
                    except:
                        flash(
                            _l('Error while getting sitelist. \
                                        Please check Controller settings'),
                            'danger')
                        logger.exception("Exception while trying to get sitekeys for :%s"\
                                        %wifisite.id)
                    else:
                        self.sitekey.choices = sitekeys

    if not baseform:
        setattr(
            F, 'redirect_url',
            TextField(_l('Redirect Guest to URL'),
                      default='http://www.unifispot.com'))
        setattr(F, 'reports_list',
                TextField(_l('Additional Report Recipients')))
        setattr(
            F, 'reports_type',
            SelectField(_l('Select Reports Frequency'),
                        choices=[('none', 'No Reporting'),
                                 ('weekly', 'Weekly Reports'),
                                 ('monthly', 'Monthly Reports')]))

        setattr(F, 'sitekey', SelectField(_l('Site ID'), choices=[]))
        setattr(F, 'unifi_id', TextField(_l('UniFi Site')))
        for lmethod in current_app.config['GUESTLOGIN_MODULES']:
            fieldname = 'auth_%s' % lmethod
            fieldlabel = _l('%s Login' % lmethod.title())
            setattr(F, fieldname, TextField(fieldlabel))

    return F()