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')]
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
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')
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
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)
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)
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
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
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
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)
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)
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)
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)
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)
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)
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 })
class VoucherFilesForm(Form): logofile = FileField(_l('Logo File')) def populate(self): pass
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')
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
class FbOverrideForm(Form): password = PasswordField(_l('Password'), validators=[Required()])
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')]
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')]
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
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()