Пример #1
0
def enable_sms_preauth():
    with app.app_context():
        from unifispot.superadmin.models import Account 
        from unifispot.guest.newcontroller import Controller       
        account = Account().query.first()
        account.en_sms_preauth = 1
        db.session.commit()
Пример #2
0
 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'})
Пример #3
0
def enable_sms_preauth():
    with app.app_context():
        from unifispot.superadmin.models import Account
        from unifispot.guest.newcontroller import Controller
        account = Account().query.first()
        account.en_sms_preauth = 1
        db.session.commit()
Пример #4
0
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"})
Пример #5
0
 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'})
Пример #6
0
 def post(self,id): 
     singleitem = Account().query.filter_by(id=current_user.account_id).first()
     form1 = self.get_form_obj()
     form1.populate()
     if  form1.validate_on_submit(): 
         singleitem.populate_settings(form1)
         try:
             db.session.commit()
         except IntegrityError:
             return jsonify({'status': 0,'msg':'Value already exists in the database'})
         return jsonify({'status': 1})
     else:
         return jsonify({'status':0,'msg': get_errors(form1)})
Пример #7
0
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)
Пример #8
0
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)
Пример #9
0
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)
Пример #10
0
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)
Пример #11
0
def init_data():
    with app.app_context():
        from sqlalchemy.exc import OperationalError
        from flask_security.utils import encrypt_password
        from unifispot.models import User
        from unifispot.superadmin.models import Account
        from unifispot.admin.models import Admin
        try:
            account = Account.query.filter_by(id=1).first()
        except:
            app.logger.debug(
                "No Account table Entry found,could be running migration ")
        else:
            if not account:
                #create default admin user
                enc_pass = encrypt_password('password')
                account = Account()
                db.session.add(account)
                admin_user = Admin(email='*****@*****.**',
                                   password=enc_pass,
                                   displayname="Admin User",
                                   active=1)
                admin_user.account = account
                db.session.add(admin_user)
                db.session.commit()
Пример #12
0
    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})
Пример #13
0
    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})
Пример #14
0
 def post(self, id):
     singleitem = Account().query.filter_by(
         id=current_user.account_id).first()
     form1 = self.get_form_obj()
     form1.populate()
     if form1.validate_on_submit():
         singleitem.populate_settings(form1)
         try:
             db.session.commit()
         except IntegrityError:
             return jsonify({
                 'status': 0,
                 'msg': 'Value already exists in the database'
             })
         return jsonify({'status': 1})
     else:
         return jsonify({'status': 0, 'msg': get_errors(form1)})
Пример #15
0
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)                
Пример #16
0
    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')]
Пример #17
0
    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')]
Пример #18
0
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"})
Пример #19
0
    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})
Пример #20
0
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)
Пример #21
0
 def get_modal_obj(self):
     return Account()
Пример #22
0
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"})
Пример #23
0
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)
Пример #24
0
def init_data(session):

    account1 = Account(name='Account1')
    account2 = Account(name='Account2')
    account3 = Account(name='Account3')
    account4 = Account(name='Account4')
    account5 = Account(name='Account5')
    session.add(account1)
    session.add(account2)
    session.add(account3)
    session.add(account4)
    session.add(account5)
    ##----------------Add users which will be used always---------
    enc_pass        = encrypt_password('zaqxswcdevfr1')
    admin_user1      = Admin(email='*****@*****.**',password=enc_pass,displayname= "Admin1",active=1)
    admin_user2      = Admin(email='*****@*****.**',password=enc_pass,displayname= "Admin2",active=1)
    admin_user3      = Admin(email='*****@*****.**',password=enc_pass,displayname= "TEST Admin1",active=1)
    admin_user4      = Admin(email='*****@*****.**',password=enc_pass,displayname= "TEST Admin2",active=1)
    admin_user5      = Admin(email='*****@*****.**',password=enc_pass,displayname= "TEST Admin3",active=1)
    admin_user6      = Admin(email='*****@*****.**',password=enc_pass,displayname= "TEST Admin4",active=1)
    session.add(admin_user1)
    session.add(admin_user2)
    session.add(admin_user3)
    session.add(admin_user4)
    session.add(admin_user5)
    session.add(admin_user6)
    admin_user1.account = account1
    admin_user2.account = account1
    admin_user3.account = account2
    admin_user4.account = account2
    admin_user5.account = account2
    admin_user6.account = account2

    enc_pass        = encrypt_password('zaqxswcdevfr1')
    client_user1      = Client(email='*****@*****.**',password=enc_pass,displayname= "client1",active=1)
    client_user2      = Client(email='*****@*****.**',password=enc_pass,displayname= "client2",active=1)
    client_user3      = Client(email='*****@*****.**',password=enc_pass,displayname= "client2",active=1)
    session.add(client_user1)
    session.add(client_user2)
    session.add(client_user3)
    client_user1.account = account1
    client_user2.account = account2
    client_user3.account = account1



    #
    #------------site1 will be configured with some basic settings for the landing page--
    #Used to test social landing
    site1           = Wifisite(name='Client1 Site1',unifi_id='site1',auth_fb_like=1,timezone="Europe/Copenhagen",auth_method= AUTH_TYPE_ALL)    
    site2           = Wifisite(name='Client1 Site2',unifi_id='site2',timezone="Europe/Copenhagen",auth_method= AUTH_TYPE_ALL)
    site3           = Wifisite(name='Client2 Site1',unifi_id='site3',timezone="Europe/Copenhagen",auth_method= AUTH_TYPE_ALL)
    session.add(site1)
    session.add(site2)
    session.add(site3)
    site1.account   = account1
    site2.account   = account1
    site3.account   = account2
    site1.client    = client_user1
    site2.client    = client_user1
    site3.client    = client_user2
    session.commit()
    
    
     
    landing1        = Landingpage()   
    landing1.site           = site1
    site1.landingpages.append(landing1) 
    session.add(landing1)
    session.commit()    
    site1.default_landing = landing1.id    
    landing2        = Landingpage()
    landing2.site   = site2
    session.add(landing2)
    session.commit()
    site2.landingpages.append(landing2)
    session.add(landing2)
    site2.default_landing = landing2.id 
    session.commit()

    landing3        = Landingpage()
    landing3.site   = site3
    session.add(landing3)
    session.commit()  
    site3.landingpages.append(landing3)
    session.add(landing3)
    site3.default_landing = landing3.id 
    session.commit()    
Пример #25
0
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)
Пример #26
0
def demo_init():
    with app.app_context():
        from sqlalchemy.exc import OperationalError
        from flask_security.utils import encrypt_password
        from unifispot.models import User
        from unifispot.superadmin.models import Account
        from unifispot.admin.models import Admin
        from unifispot.client.models import Client, Wifisite, Landingpage, Voucherdesign
        from unifispot.guest.models import Guest
        import arrow
        from random import randint
        from unifispot.analytics.models import Sitestat
        from unifispot.base.utils.helper import get_random_integers
        from faker import Factory
        fake = Factory.create()

        try:
            account = Account.query.filter_by(id=1).first()
        except:
            app.logger.debug(
                "No Account table Entry found,could be running migration ")
        else:
            if not account:
                #create default admin user
                enc_pass = encrypt_password('password')
                account = Account()
                db.session.add(account)
                admin_user = Admin(email='*****@*****.**',
                                   password=enc_pass,
                                   displayname="Admin User1",
                                   active=1)
                admin_user2 = Admin(email='*****@*****.**',
                                    password=enc_pass,
                                    displayname="Admin User2",
                                    active=1)
                admin_user3 = Admin(email='*****@*****.**',
                                    password=enc_pass,
                                    displayname="Admin User3",
                                    active=1)
                admin_user.account = account
                admin_user2.account = account
                admin_user3.account = account
                db.session.add(admin_user)
                db.session.add(admin_user2)
                db.session.add(admin_user3)
                client_user1 = Client(email='*****@*****.**',
                                      password=enc_pass,
                                      displayname="client1",
                                      active=1)
                db.session.add(client_user1)
                client_user1.account = account
                site1 = Wifisite(name='Client1 Site1',
                                 unifi_id='site1',
                                 auth_fb_like=1,
                                 timezone="Europe/Copenhagen",
                                 auth_method=AUTH_TYPE_ALL,
                                 smsauth=1)
                db.session.add(site1)
                site1.account = account
                site1.client = client_user1
                landing1 = Landingpage()
                landing1.site = site1
                site1.landingpages.append(landing1)
                db.session.add(landing1)
                db.session.commit()
                site1.default_landing = landing1.id
                design1 = Voucherdesign()
                design1.site = site1
                db.session.add(design1)
                db.session.commit()
                site2 = Wifisite(name='Client1 Site2',
                                 unifi_id='site1',
                                 auth_fb_like=1,
                                 timezone="Europe/Copenhagen",
                                 auth_method=AUTH_TYPE_ALL,
                                 smsauth=1)
                db.session.add(site2)
                site2.account = account
                site2.client = client_user1
                landing2 = Landingpage()
                landing2.site = site2
                site1.landingpages.append(landing2)
                db.session.add(landing2)
                db.session.commit()
                design2 = Voucherdesign()
                design2.site = site2
                db.session.add(design2)
                site1.default_landing = landing2.id
                db.session.commit()
                ##-----------------------Stats for site1
                now = arrow.now()
                month_start = now.floor('month')
                days = (now.ceil('month') - month_start).days
                for i in range(days):
                    day_key = month_start.replace(days=i).floor('day').naive
                    daystat = Sitestat(site_id=site1.id, date=day_key)
                    num_visits = randint(10, 50)
                    num_logins = randint(5, num_visits)
                    num_newlogins = randint(5, num_logins)
                    logins = get_random_integers(4, num_logins)
                    daystat.num_visits = num_visits
                    daystat.num_likes = randint(1, 10)
                    daystat.num_checkins = randint(1, 10)
                    daystat.num_newlogins = num_newlogins
                    daystat.num_repeats = num_logins - num_newlogins
                    daystat.num_emails = logins[0]
                    daystat.num_fb = logins[1]
                    daystat.num_vouchers = logins[2]
                    daystat.num_phones = logins[3]
                    db.session.add(daystat)
                db.session.commit()
                ##-----------------------Stats for site2
                for i in range(days):
                    day_key = month_start.replace(days=i).floor('day').naive
                    daystat = Sitestat(site_id=site2.id, date=day_key)
                    num_visits = randint(10, 50)
                    num_logins = randint(5, num_visits)
                    num_newlogins = randint(5, num_logins)
                    logins = get_random_integers(4, num_logins)
                    daystat.num_visits = num_visits
                    daystat.num_likes = randint(1, 10)
                    daystat.num_checkins = randint(1, 10)
                    daystat.num_newlogins = num_newlogins
                    daystat.num_repeats = num_logins - num_newlogins
                    daystat.num_emails = logins[0]
                    daystat.num_fb = logins[1]
                    daystat.num_vouchers = logins[2]
                    daystat.num_phones = logins[3]
                    db.session.add(daystat)
                db.session.commit()
                ##------------------guests for site1
                for i in range(100):
                    db.session.add(
                        Guest(firstname=fake.first_name(),
                              lastname=fake.last_name(),
                              email=fake.email()))
                db.session.commit()
Пример #27
0
    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})