示例#1
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'})
示例#2
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})
示例#3
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})
示例#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
文件: manage.py 项目: crypex/poppet
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)
示例#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 = ''
        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)
示例#8
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)
示例#9
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)
示例#10
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)                
示例#11
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')]
示例#12
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')]
示例#13
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"})
示例#14
0
文件: apis.py 项目: vlf1991/poppet-1
    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})
示例#15
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})
示例#16
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)
示例#17
0
文件: views.py 项目: crypex/poppet
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"})
示例#18
0
文件: views.py 项目: crypex/poppet
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)
示例#19
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)