def get(self,id): singleitem = Account().query.filter_by(id=current_user.account_id).first() if singleitem: return jsonify({'status': 1,'data':singleitem.get_settings()}) else: current_app.logger.debug("No Settings Entry in Settings table!! %s "%(request.url)) return jsonify({'status': 0,'msg':'No Settings Entry Found'})
def get(self,id): client_list = [] if not id: #get all APs status if not current_app.config['NO_UNIFI']: account = Account().query.filter_by(id=current_user.account_id).first() settings = account.get_settings() if not settings: current_app.logger.debug("No Settings Entry in User table!! %s "%(request.url)) return jsonify({'status': 0,'msg':'Error while loading settings'}) else: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],version='v4',site_id='default') if current_user.type =='admin': sites = Wifisite.query.filter_by(account_id=current_user.account_id).all() elif current_user.type =='client': sites = Wifisite.query.filter_by(client_id=current_user.id).all() if sites: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],version='v4',site_id='default') for site in sites: site_clients = c.get_clients(site_id=site.unifi_id) for site_client in site_clients: if site_client.get('is_guest'): client_list.append(guest_status_generate(site_client,site.name)) else: client_list = [['SITE1','11:22:33:44:55:66','11:22:33:44:55:66',"40",'00:41','<span class="label label-success">Authorized</span>'],['SITE1','11:22:33:44:55:66','11:22:33:44:55:66',"40",'00:41','<span class="label label-success">Authorized</span>'],['SITE1','11:22:33:44:55:66','11:22:33:44:55:66',"40",'00:41','<span class="label label-success">Authorized</span>']] else: if not current_app.config['NO_UNIFI']: account = Account().query.filter_by(id=current_user.account_id).first() settings = account.get_settings() wifisite = Wifisite.query.filter_by(id=id).first() if not settings: current_app.logger.debug("No Settings Entry in User table!! %s "%(request.url)) return jsonify({'status': 0,'msg':'Error while loading settings'}) if current_user.type =='admin': wifisite = Wifisite.query.filter(and_(Wifisite.id==id,Wifisite.account_id==current_user.account_id)).first() elif current_user.type =='client': wifisite = Wifisite.query.filter(and_(Wifisite.id==id,Wifisite.client_id==current_user.id)).first() if wifisite: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],version='v4',site_id='default') site_clients = c.get_clients(site_id=wifisite.unifi_id) for site_client in site_clients: if site_client.get('is_guest'): client_list.append(guest_status_generate(site_client,wifisite.name)) else: client_list = [['SITE1','11:22:33:44:55:66','11:22:33:44:55:66',"40",'00:41','<span class="label label-success">Authorized</span>'],['SITE1','11:22:33:44:55:66','11:22:33:44:55:66',"40",'00:41','<span class="label label-success">Authorized</span>'],['SITE1','11:22:33:44:55:66','11:22:33:44:55:66',"40",'00:41','<span class="label label-success">Authorized</span>']] return jsonify({'status': 1,'data':client_list})
def get(self,id): ap_list = [] if not id: #get all APs status if not current_app.config['NO_UNIFI']: account = Account().query.filter_by(id=current_user.account_id).first() settings = account.get_settings() if not settings: current_app.logger.debug("No Settings Entry in User table!! %s "%(request.url)) return jsonify({'status': 0,'msg':'Error while loading settings'}) else: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],version='v4',site_id='default') if current_user.type =='admin': sites = Wifisite.query.filter_by(account_id=current_user.account_id).all() elif current_user.type =='client': sites = Wifisite.query.filter_by(client_id=current_user.id).all() if sites: for site in sites: site_aps = c.get_aps(site_id=site.unifi_id) for site_ap in site_aps: ap_list.append([site_ap.get('mac'),site_ap.get('name'),site.name,ap_status_generate(site_ap.get('state'))]) else: ap_list = [['11:22:33:44:55:66',"AP1",'SITE1','<span class="label label-success">AP Active</span>'],['11:22:33:44:55:66',"AP4",'SITE4',ap_status_generate(2)],['11:22:33:44:55:66',"AP1",'SIT31',ap_status_generate(1)],['11:22:33:44:55:66',"AP1",'SITE1',ap_status_generate(1)]] else: if not current_app.config['NO_UNIFI']: account = Account().query.filter_by(id=current_user.account_id).first() settings = account.get_settings() if current_user.type =='admin': wifisite = Wifisite.query.filter(and_(Wifisite.id==id,Wifisite.account_id==current_user.account_id)).first() elif current_user.type =='client': wifisite = Wifisite.query.filter(and_(Wifisite.id==id,Wifisite.client_id==current_user.id)).first() if not settings: current_app.logger.debug("No Settings Entry in User table!! %s "%(request.url)) return jsonify({'status': 0,'msg':'Error while loading settings'}) if wifisite: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],version='v4',site_id='default') site_aps = c.get_aps(site_id=wifisite.unifi_id) for site_ap in site_aps: ap_list.append([site_ap.get('mac'),site_ap.get('name'),wifisite.name,ap_status_generate(site_ap.get('state'))]) else: ap_list = [['11:22:33:44:55:66',"AP1",'SITE1',ap_status_generate(1)],['11:22:33:44:55:66',"AP4",'SITE4',ap_status_generate(2)],['11:22:33:44:55:66',"AP1",'SIT31',ap_status_generate(1)],['11:22:33:44:55:66',"AP1",'SITE1',ap_status_generate(1)]] return jsonify({'status': 1,'data':ap_list})
def temp_authorize_guest(track_id): '''Function for giving temporary internet access for a client This function send API commands to controller, return ok ''' guest_track = Guesttrack.query.filter_by(track_id=track_id).first() if not guest_track: current_app.logger.error( "Called temp_authorize_guest with wrong track ID:%s" % track_id) return jsonify({'status': 0, 'msg': "Error"}) #validate session associated with this track ID guest_session = Guestsession.query.filter_by( id=guest_track.session_id).first() if not guest_session or guest_session.state != SESSION_TEMP_AUTH: current_app.logger.error( "Called temp_authorize_guest with wrong Session from track ID:%s" % track_id) return jsonify({'status': 0, 'msg': "Error"}) current_app.logger.debug( 'Wifiguest Log - Site ID:%s temp_authorize_guest for track ID:%s' % (guest_track.site_id, guest_track.id)) #prevent misuse if guest_session.temp_login >= 10 and guest_session.demo != 1: current_app.logger.info( 'Wifiguest Log - Site ID:%s temp_authorize_guest max tries reached for track ID:%s' % (guest_track.site_id, guest_track.id)) return jsonify({ 'status': 0, 'msg': "You have already used up temporary logins for today" }) else: guest_session.temp_login += 1 db.session.commit() #get details from track ID and authorize if not current_app.config['NO_UNIFI']: account = Account().query.filter_by( id=guest_session.site.account_id).first() settings = account.get_settings() try: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'], '8443', 'v4', guest_track.site.unifi_id) c.authorize_guest(guest_track.device_mac, 5, ap_mac=guest_track.ap_mac) except: current_app.logger.exception( 'Exception occured while trying to authorize User') return jsonify({'status': 0, 'msg': "Error!!"}) return jsonify({'status': 1, 'msg': "DONE"}) else: return jsonify({'status': 1, 'msg': "DEBUG enabled"})
def get(self, id): singleitem = Account().query.filter_by( id=current_user.account_id).first() if singleitem: return jsonify({'status': 1, 'data': singleitem.get_settings()}) else: current_app.logger.debug( "No Settings Entry in Settings table!! %s " % (request.url)) return jsonify({'status': 0, 'msg': 'No Settings Entry Found'})
def fb_ips(): with app.app_context(): from unifispot.superadmin.models import Account from unifispot.guest.newcontroller import Controller account = Account().query.first() settings = account.get_settings() site_id = 'ieu6ek9y' site_code = '572a12afe4b078cda06e7e41' portal_ip = '139.59.192.71' portal_subnet = '139.59.192.71/32' portal_hostname = 'urbanespot.com' c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],'8443','v4',site_id) c.set_guest_access(site_id,site_code,portal_ip,portal_subnet,portal_hostname)
def fb_ips(): with app.app_context(): from unifispot.superadmin.models import Account from unifispot.guest.newcontroller import Controller account = Account().query.first() settings = account.get_settings() site_id = '' site_code = '' portal_ip = '' portal_subnet = '' portal_hostname = '' c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],'8443','v4',site_id) c.set_guest_access(site_id,site_code,portal_ip,portal_subnet,portal_hostname)
def authorize_guest(track_id): '''Function called after respective auth mechanisms are completed This function send API commands to controller, redirect user to correct URL ''' # #Validate track id and get all the needed variables guest_track = Guesttrack.query.filter_by(track_id=track_id).first() if not guest_track: current_app.logger.error("Called authorize_guest with wrong track ID:%s"%track_id) abort(404) #validate session associated with this track ID guest_session = Guestsession.query.filter_by(id=guest_track.session_id).first() if not guest_session: current_app.logger.error("Called authorize_guest with wrong Session from track ID:%s"%track_id) abort(404) #Check if the session is authorized if not guest_session.state == SESSION_AUTHORIZED or guest_session.expiry < arrow.utcnow().naive: current_app.logger.error("Called authorize_guest with wrong Non Authorized session with track ID:%s"%track_id) abort(404) current_app.logger.debug('Wifiguest Log - Site ID:%s authorize_guest with trackid :%s'%(guest_track.site_id,guest_track.id)) #Send unifi API commands if the user has completed login duration = guest_session.duration if guest_session.duration else 60 if not current_app.config['NO_UNIFI'] : #code to send auth command to controller account = Account().query.filter_by(id=guest_session.site.account_id).first() settings = account.get_settings() try: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],'8443','v4',guest_track.site.unifi_id) c.authorize_guest(guest_track.device_mac,duration,ap_mac=guest_track.ap_mac) except: current_app.logger.exception('Wifiguest Log - Site ID:%s authorize_guest exception with trackid :%s'%(guest_track.site_id,guest_track.id)) abort(500) #update session expiry to now + authorized time guest_session.expiry = arrow.utcnow().replace(minutes=duration + 10).naive db.session.commit() #Code to handle guest after successful login #if guest_track.site.redirect_method == REDIRECT_ORIG_URL and guest_track.orig_url: #return redirect(format_url(guest_track.orig_url),code=302) #elif guest_track.site.redirect_url: #redirect User to default URL if configured # return redirect(format_url(guest_track.site.redirect_url),code=302) #else: #redirect user to google.com return redirect(format_url("www.google.com"),code=302)
def fb_ips(): with app.app_context(): from unifispot.superadmin.models import Account from unifispot.guest.newcontroller import Controller account = Account().query.first() settings = account.get_settings() site_id = '' site_code = '' portal_ip = '' portal_subnet = '' portal_hostname = '' c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'], '8443', 'v4', site_id) c.set_guest_access(site_id, site_code, portal_ip, portal_subnet, portal_hostname)
def celery_session_monitor(*args, **kwargs): current_app.logger.info('-----------Running celery_session_monitor-----------------------') sites = Wifisite.query.all() for site in sites: if site.enable_session_limit or site.voucher_login_en() : current_app.logger.info('celery_session_monitor processing Site:%s'%site.name) account = Account().query.filter_by(id=site.account_id).first() settings = account.get_settings() try: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],'8443','v4',site.unifi_id) #get all STAs stas = c.get_clients() for sta in stas: if sta.get('is_guest') and sta.get('authorized'): rx_bytes = int(sta.get('rx_bytes')) tx_bytes = int(sta.get('tx_bytes')) total_data = rx_bytes + tx_bytes data_mb = int(math.ceil((total_data/1024000.0))) mac = sta.get('mac') guest_session = Guestsession.query.filter_by(site_id=site.id,mac=mac).first() if not guest_session: current_app.logger.debug('MAC:%s in site:%s have no session'%(mac,site.name)) continue current_app.logger.debug('MAC:%s in site:%s seems to have used \ data:%s Mb'%(mac,site.name,data_mb)) if guest_session.state == GUESTRACK_VOUCHER_AUTH: #if voucher authorized check for balance data in voucher current_app.logger.debug('MAC:%s in site:%s seems to have authorized via Voucher '%(mac,site.name)) voucher = Voucher.query.filter_by(site_id=site.id,device_id=guest_session.device_id).first() if not voucher: current_app.logger.error('MAC:%s in site:%s no_voucher found '%(mac,site.name)) continue if voucher.bytes_t and data_mb > voucher.data_available(): current_app.logger.debug('MAC:%s in site:%s seems to have exceeded voucher:%s limit \ hence disconnecting'%(mac,site.name,voucher.id)) #if not voucher authorized check if device exceeded session limit if session limit is enabled else: if site.enable_session_limit and data_mb > int(site.daily_data_limit) : current_app.logger.debug('MAC:%s in site:%s seems to have exceeded data \ hence disconnecting'%(mac,site.name)) c.unauthorize_guest(mac) except: current_app.logger.exception('Exception while monitoring site:%s'%site.name)
def populate(self): self.timezone.choices = [ (tz_name, tz_formated) for tz_offset, tz_name, tz_formated in zones.get_timezones() ] self.template.choices = [('template1', 'Template1'), ('template2', 'Template2')] self.reports_type.choices = [(CLIENT_REPORT_NONE, 'No Reporting'), (CLIENT_REPORT_WEEKLY, 'Weekly Reports'), (CLIENT_REPORT_MONTHLY, 'Monthly Reports') ] self.client_id.choices = [] self.api_export.choices = [(API_END_POINT_NONE, 'None'), (API_END_POINT_MAIL_CHIMP, 'MailChimp')] self.unifi_id.choices = [] for user in Client.query.filter_by( account_id=current_user.account_id).all(): self.client_id.choices.append((user.id, user.displayname)) if not current_app.config['NO_UNIFI']: account = Account().query.filter_by( id=current_user.account_id).first() settings = account.get_settings() try: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'], version='v4', site_id='default') for site in c.get_sites(): self.unifi_id.choices.append( (site.get('name'), site.get('desc'))) except: flash( "Error connecting to Unifi Controller,please check Host/Credentials", 'danger') else: self.unifi_id.choices = [('site1', 'SITE1'), ('site2', 'SITE2'), ('site3', 'SITE3')]
def populate(self): self.timezone.choices = [ (tz_name,tz_formated)for tz_offset, tz_name, tz_formated in zones.get_timezones() ] self.template.choices = [('template1','Template1'),('template2','Template2') ] self.reports_type.choices = [(CLIENT_REPORT_NONE,'No Reporting'),(CLIENT_REPORT_WEEKLY,'Weekly Reports'),(CLIENT_REPORT_MONTHLY,'Monthly Reports')] self.client_id.choices = [] self.api_export.choices = [(API_END_POINT_NONE,'None'),(API_END_POINT_MAIL_CHIMP,'MailChimp')] self.unifi_id.choices = [] for user in Client.query.filter_by(account_id=current_user.account_id).all(): self.client_id.choices.append((user.id,user.displayname)) if not current_app.config['NO_UNIFI']: account = Account().query.filter_by(id=current_user.account_id).first() settings = account.get_settings() try: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],version='v4',site_id='default') for site in c.get_sites(): self.unifi_id.choices.append((site.get('name'),site.get('desc'))) except: flash("Error connecting to Unifi Controller,please check Host/Credentials",'danger') else: self.unifi_id.choices = [('site1','SITE1'),('site2','SITE2'),('site3','SITE3')]
def temp_authorize_guest(track_id): '''Function for giving temporary internet access for a client This function send API commands to controller, return ok ''' guest_track = Guesttrack.query.filter_by(track_id=track_id).first() if not guest_track : current_app.logger.error("Called temp_authorize_guest with wrong track ID:%s"%track_id) return jsonify({'status':0,'msg': "Error"}) #validate session associated with this track ID guest_session = Guestsession.query.filter_by(id=guest_track.session_id).first() if not guest_session or guest_session.state != SESSION_TEMP_AUTH: current_app.logger.error("Called temp_authorize_guest with wrong Session from track ID:%s"%track_id) return jsonify({'status':0,'msg': "Error"}) current_app.logger.debug('Wifiguest Log - Site ID:%s temp_authorize_guest for track ID:%s'%(guest_track.site_id,guest_track.id)) #prevent misuse if guest_session.temp_login >= 10 and guest_session.demo != 1 : current_app.logger.info('Wifiguest Log - Site ID:%s temp_authorize_guest max tries reached for track ID:%s'%(guest_track.site_id,guest_track.id)) return jsonify({'status':0,'msg': "You have already used up temporary logins for today"}) else: guest_session.temp_login += 1 db.session.commit() #get details from track ID and authorize if not current_app.config['NO_UNIFI'] : account = Account().query.filter_by(id=guest_session.site.account_id).first() settings = account.get_settings() try: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],'8443','v4',guest_track.site.unifi_id) c.authorize_guest(guest_track.device_mac,5,ap_mac=guest_track.ap_mac) except: current_app.logger.exception('Exception occured while trying to authorize User') return jsonify({'status':0,'msg': "Error!!"}) return jsonify({'status':1,'msg': "DONE"}) else: return jsonify({'status':1,'msg': "DEBUG enabled"})
def get(self, id): ap_list = [] if not id: #get all APs status if not current_app.config['NO_UNIFI']: account = Account().query.filter_by( id=current_user.account_id).first() settings = account.get_settings() if not settings: current_app.logger.debug( "No Settings Entry in User table!! %s " % (request.url)) return jsonify({ 'status': 0, 'msg': 'Error while loading settings' }) else: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'], version='v4', site_id='default') if current_user.type == 'admin': sites = Wifisite.query.filter_by( account_id=current_user.account_id).all() elif current_user.type == 'client': sites = Wifisite.query.filter_by( client_id=current_user.id).all() if sites: for site in sites: site_aps = c.get_aps(site_id=site.unifi_id) for site_ap in site_aps: ap_list.append([ site_ap.get('mac'), site_ap.get('name'), site.name, ap_status_generate(site_ap.get('state')) ]) else: ap_list = [[ '11:22:33:44:55:66', "AP1", 'SITE1', '<span class="label label-success">AP Active</span>' ], [ '11:22:33:44:55:66', "AP4", 'SITE4', ap_status_generate(2) ], [ '11:22:33:44:55:66', "AP1", 'SIT31', ap_status_generate(1) ], [ '11:22:33:44:55:66', "AP1", 'SITE1', ap_status_generate(1) ]] else: if not current_app.config['NO_UNIFI']: account = Account().query.filter_by( id=current_user.account_id).first() settings = account.get_settings() if current_user.type == 'admin': wifisite = Wifisite.query.filter( and_(Wifisite.id == id, Wifisite.account_id == current_user.account_id)).first() elif current_user.type == 'client': wifisite = Wifisite.query.filter( and_(Wifisite.id == id, Wifisite.client_id == current_user.id)).first() if not settings: current_app.logger.debug( "No Settings Entry in User table!! %s " % (request.url)) return jsonify({ 'status': 0, 'msg': 'Error while loading settings' }) if wifisite: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'], version='v4', site_id='default') site_aps = c.get_aps(site_id=wifisite.unifi_id) for site_ap in site_aps: ap_list.append([ site_ap.get('mac'), site_ap.get('name'), wifisite.name, ap_status_generate(site_ap.get('state')) ]) else: ap_list = [[ '11:22:33:44:55:66', "AP1", 'SITE1', ap_status_generate(1) ], [ '11:22:33:44:55:66', "AP4", 'SITE4', ap_status_generate(2) ], [ '11:22:33:44:55:66', "AP1", 'SIT31', ap_status_generate(1) ], [ '11:22:33:44:55:66', "AP1", 'SITE1', ap_status_generate(1) ]] return jsonify({'status': 1, 'data': ap_list})
def get(self, id): client_list = [] if not id: #get all APs status if not current_app.config['NO_UNIFI']: account = Account().query.filter_by( id=current_user.account_id).first() settings = account.get_settings() if not settings: current_app.logger.debug( "No Settings Entry in User table!! %s " % (request.url)) return jsonify({ 'status': 0, 'msg': 'Error while loading settings' }) if current_user.type == 'admin': sites = Wifisite.query.filter_by( account_id=current_user.account_id).all() elif current_user.type == 'client': sites = Wifisite.query.filter_by( client_id=current_user.id).all() if sites: try: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'], version='v4', site_id='default', port=settings['unifi_port']) except: msg = 'Exception while trying to do Unifi Login check controller ip/username/password' current_app.logger.exception(msg) return jsonify({'status': 1, 'data': [], 'error': msg}) for site in sites: try: site_clients = c.get_clients(site_id=site.unifi_id) for site_client in site_clients: if site_client.get('is_guest'): client_list.append( guest_status_generate( site_client, site.name)) except: msg = 'Exception while fetching Clients for site:%s check siteid' % site.name current_app.logger.exception(msg) return jsonify({ 'status': 1, 'data': [], 'error': msg }) else: client_list = [ [ 'SITE1', '11:22:33:44:55:66', '11:22:33:44:55:66', "40", '00:41', '<span class="label label-success">Authorized</span>' ], [ 'SITE1', '11:22:33:44:55:66', '11:22:33:44:55:66', "40", '00:41', '<span class="label label-success">Authorized</span>' ], [ 'SITE1', '11:22:33:44:55:66', '11:22:33:44:55:66', "40", '00:41', '<span class="label label-success">Authorized</span>' ] ] else: if not current_app.config['NO_UNIFI']: account = Account().query.filter_by( id=current_user.account_id).first() settings = account.get_settings() wifisite = Wifisite.query.filter_by(id=id).first() if not settings: current_app.logger.debug( "No Settings Entry in User table!! %s " % (request.url)) return jsonify({ 'status': 0, 'msg': 'Error while loading settings' }) if current_user.type == 'admin': wifisite = Wifisite.query.filter( and_(Wifisite.id == id, Wifisite.account_id == current_user.account_id)).first() elif current_user.type == 'client': wifisite = Wifisite.query.filter( and_(Wifisite.id == id, Wifisite.client_id == current_user.id)).first() if wifisite: try: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'], version='v4', site_id='default', port=settings['unifi_port']) except: msg = 'Exception while trying to do Unifi Login check controller ip/username/password' current_app.logger.exception(msg) return jsonify({'status': 1, 'data': [], 'error': msg}) try: site_clients = c.get_clients(site_id=wifisite.unifi_id) for site_client in site_clients: if site_client.get('is_guest'): client_list.append( guest_status_generate( site_client, wifisite.name)) except: msg = 'Exception while fetching Clients for site:%s check siteid' % wifisite.name current_app.logger.exception(msg) return jsonify({'status': 1, 'data': [], 'error': msg}) else: client_list = [ [ 'SITE1', '11:22:33:44:55:66', '11:22:33:44:55:66', "40", '00:41', '<span class="label label-success">Authorized</span>' ], [ 'SITE1', '11:22:33:44:55:66', '11:22:33:44:55:66', "40", '00:41', '<span class="label label-success">Authorized</span>' ], [ 'SITE1', '11:22:33:44:55:66', '11:22:33:44:55:66', "40", '00:41', '<span class="label label-success">Authorized</span>' ] ] return jsonify({'status': 1, 'data': client_list})
def authorize_guest(track_id): '''Function called after respective auth mechanisms are completed This function send API commands to controller, redirect user to correct URL ''' # #Validate track id and get all the needed variables guest_track = Guesttrack.query.filter_by(track_id=track_id).first() if not guest_track: current_app.logger.error( "Called authorize_guest with wrong track ID:%s" % track_id) abort(404) #validate session associated with this track ID guest_session = Guestsession.query.filter_by( id=guest_track.session_id).first() if not guest_session: current_app.logger.error( "Called authorize_guest with wrong Session from track ID:%s" % track_id) abort(404) #Check if the session is authorized if not guest_session.state == SESSION_AUTHORIZED or guest_session.expiry < arrow.utcnow( ).naive: current_app.logger.error( "Called authorize_guest with wrong Non Authorized session with track ID:%s" % track_id) abort(404) current_app.logger.debug( 'Wifiguest Log - Site ID:%s authorize_guest with trackid :%s' % (guest_track.site_id, guest_track.id)) #Send unifi API commands if the user has completed login duration = guest_session.duration if guest_session.duration else 60 if not current_app.config['NO_UNIFI']: #code to send auth command to controller account = Account().query.filter_by( id=guest_session.site.account_id).first() settings = account.get_settings() try: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'], '8443', 'v4', guest_track.site.unifi_id) c.authorize_guest(guest_track.device_mac, duration, ap_mac=guest_track.ap_mac) except: current_app.logger.exception( 'Wifiguest Log - Site ID:%s authorize_guest exception with trackid :%s' % (guest_track.site_id, guest_track.id)) abort(500) #update session expiry to now + authorized time guest_session.expiry = arrow.utcnow().replace(minutes=duration + 10).naive db.session.commit() #Code to handle guest after successful login landing_site = Wifisite.query.filter_by(id=guest_track.site_id).first() landing_page = Landingpage.query.filter_by( id=landing_site.default_landing).first() return render_template('guest/%s/show_message.html' % landing_site.template, landing_site=landing_site, landing_page=landing_page)
def temp_authorize_guest(track_id): '''Function for giving temporary internet access for a client, if TEMP_LOGIN_ENABLED set to True This function send API commands to controller, return ok ''' if not current_app.config['TEMP_LOGIN_ENABLED']: return jsonify({'status':1,'msg': "TEMP Login Disabled"}) #can't use validate_track as return values needed to be json objects guest_track = Guesttrack.query.filter_by(track_id=track_id).first() if not guest_track : current_app.logger.error("Called temp_authorize_guest with wrong track ID:%s"%track_id) return jsonify({'status':0,'msg': "Error"}) if not guest_track.is_temp_authorized(): current_app.logger.error("Called temp_authorize_guest with not authorized track ID:%s"%track_id) return jsonify({'status':0,'msg': "Error"}) landing_site = Wifisite.query.filter_by(id=guest_track.site_id).first() guest_device = Device.query.filter(and_(Device.site_id==landing_site.id,Device.mac==guest_track.device_mac)).first() current_app.logger.debug('Wifiguest Log - Site ID:%s temp_authorize_guest for MAC:%s'%(guest_track.site_id,guest_track.device_mac)) #prevent misuse if guest_device.get_monthly_usage() >= landing_site.monthly_data_limit: current_app.logger.debug('Wifiguest Log - Site ID:%s guest_device MAC:%s exceeded the monthly data limit:%s'%(landing_site.id,guest_device.mac,landing_site.monthly_data_limit)) return jsonify({'status':0,'msg': "Looks like you have exceed your monthly free bandwidth"}) #get all guest_tracks in last 5hrs last5hrs = arrow.utcnow().replace(hours=-5).naive tracks = Guesttrack.query.filter(and_(Guesttrack.site_id==guest_track.site_id,Guesttrack.device_mac==guest_track.device_mac, Guesttrack.timestamp>=last5hrs)).all() total_attemps = 0 for track in tracks: total_attemps += track.temp_login if total_attemps >= 5 and guest_track.demo != 1 : current_app.logger.info('Wifiguest Log - Site ID:%s temp_authorize_guest max tries reached for MAC:%s'%(guest_track.site_id,guest_track.device_mac)) return jsonify({'status':0,'msg': "You have already used up temporary logins for today"}) else: guest_track.temp_login += 1 db.session.commit() #create a new session guest_session = Guestsession(site=landing_site,device=guest_device) guest_session.state = guest_track.state guest_session.mac = guest_device.mac guest_session.guesttracks.append(guest_track) db.session.add(guest_session) guest_track.session_id = guest_session.id db.session.commit() #get details from track ID and authorize if not current_app.config['NO_UNIFI'] : account = Account().query.filter_by(id=guest_session.site.account_id).first() settings = account.get_settings() try: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],'8443','v4',guest_track.site.unifi_id) c.authorize_guest(guest_track.device_mac,5,ap_mac=guest_track.ap_mac) except: current_app.logger.exception('Exception occured while trying to authorize User') return jsonify({'status':0,'msg': "Error!!"}) return jsonify({'status':1,'msg': "DONE"}) else: return jsonify({'status':1,'msg': "DEBUG enabled"})
def authorize_guest(track_id,guest_track,landing_site,guest_device): '''Function called after respective auth mechanisms are completed This function send API commands to controller, redirect user to correct URL ''' #validate guest_track if not guest_track.is_authorized(): current_app.logger.error('Wifiguest Log - Site ID:%s guest_device MAC:%s tried to \ %s without being authorized'%(landing_site.id,guest_track.device_mac,request.url)) abort(404) if guest_track.state == GUESTRACK_VOUCHER_AUTH: voucher = Voucher.query.filter(and_(Voucher.device_id==guest_device.id,Voucher.site_id==landing_site.id)).first() if not voucher: current_app.logger.error('Wifiguest Log - Site ID:%s guest_device MAC:%s tried to \ %s with GUESTRACK_VOUCHER_AUTH but no proper voucher '%(landing_site.id,guest_track.device_mac,request.url)) abort(404) duration = guest_track.duration else: duration = landing_site.session_timelimit or 60 #create a new session guest_session = Guestsession(site=landing_site,device=guest_device) guest_session.state = guest_track.state guest_session.mac = guest_device.mac guest_session.guesttracks.append(guest_track) db.session.add(guest_session) guest_track.session_id = guest_session.id if guest_track.state == GUESTRACK_VOUCHER_AUTH: voucher.sessions.append(guest_session) guest_session.voucher_id = voucher.id db.session.commit() if not current_app.config['NO_UNIFI'] : #code to send auth command to controller account = Account().query.filter_by(id=guest_session.site.account_id).first() settings = account.get_settings() try: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'],'8443','v4',guest_track.site.unifi_id) c.authorize_guest(guest_track.device_mac,duration,ap_mac=guest_track.ap_mac) except: current_app.logger.exception('Wifiguest Log - Site ID:%s guest_device MAC:%s tried to \ %s with but exception while connecting to controller '%(landing_site.id,guest_track.device_mac,request.url)) abort(500) #time.sleep(5) #Code to handle guest after successful login #if guest_track.site.redirect_method == REDIRECT_ORIG_URL and guest_track.orig_url: #return redirect(format_url(guest_track.orig_url),code=302) #elif guest_track.site.redirect_url: #redirect User to default URL if configured # return redirect(format_url(guest_track.site.redirect_url),code=302) #else: #redirect user to google.com redirect_url = landing_site.redirect_url or 'http://www.unifispot.com' landing_page = Landingpage.query.filter_by(id=landing_site.default_landing).first() return render_template('guest/%s/show_message.html'%landing_site.template,landing_site=landing_site,landing_page=landing_page,redirect_url=redirect_url)
def celery_session_monitor(*args, **kwargs): current_app.logger.info( '-----------Running celery_session_monitor-----------------------') sites = Wifisite.query.all() for site in sites: if site.enable_session_limit or site.voucher_login_en(): current_app.logger.info( 'celery_session_monitor processing Site:%s' % site.name) account = Account().query.filter_by(id=site.account_id).first() settings = account.get_settings() try: c = Controller(settings['unifi_server'], settings['unifi_user'], settings['unifi_pass'], '8443', 'v4', site.unifi_id) #get all STAs stas = c.get_clients() for sta in stas: if sta.get('is_guest') and sta.get('authorized'): rx_bytes = int(sta.get('rx_bytes')) tx_bytes = int(sta.get('tx_bytes')) total_data = rx_bytes + tx_bytes data_mb = int(math.ceil((total_data / 1024000.0))) mac = sta.get('mac') guest_session = Guestsession.query.filter_by( site_id=site.id, mac=mac).first() if not guest_session: current_app.logger.debug( 'MAC:%s in site:%s have no session' % (mac, site.name)) continue current_app.logger.debug( 'MAC:%s in site:%s seems to have used \ data:%s Mb' % (mac, site.name, data_mb)) if guest_session.state == GUESTRACK_VOUCHER_AUTH: #if voucher authorized check for balance data in voucher current_app.logger.debug( 'MAC:%s in site:%s seems to have authorized via Voucher ' % (mac, site.name)) voucher = Voucher.query.filter_by( site_id=site.id, device_id=guest_session.device_id).first() if not voucher: current_app.logger.error( 'MAC:%s in site:%s no_voucher found ' % (mac, site.name)) continue if data_mb > voucher.data_available(): current_app.logger.debug( 'MAC:%s in site:%s seems to have exceeded voucher:%s limit \ hence disconnecting' % (mac, site.name, voucher.id)) #if not voucher authorized check if device exceeded session limit if session limit is enabled else: if site.enable_session_limit and data_mb > int( site.daily_data_limit): current_app.logger.debug( 'MAC:%s in site:%s seems to have exceeded data \ hence disconnecting' % (mac, site.name)) c.unauthorize_guest(mac) except: current_app.logger.exception( 'Exception while monitoring site:%s' % site.name)