Пример #1
0
    def check_authentication(self,email,passcode):
        TAG='check_authentication'
        if email is not None and passcode is not None:
            from db.helpers.user import UserDBHelper
            user_helper = UserDBHelper()
            users = user_helper.get_user_with_email(email)

            if type(users)==dict:
                user = users
                from db.helpers.enrollment import EnrollmentDBHelper
                enrollment_helper = EnrollmentDBHelper()
                enrollment_filter = {C.ENROLLMENT_TABLE_USER:user['id']}
                enrollments= enrollment_helper.get_enrollments(
                    enrollment_filter, status=False)
                if enrollments is not None:
                    for enrollment in enrollments:
                        if str(enrollment[C.ENROLLMENT_TABLE_PASSWORD]) == str(passcode):
                            self.log.i(TAG, 'Passcodes match')
                            return enrollment
                        else:
                            self.log.i(TAG, 'Invalid passcode email combination')
                    return None
                else:
                    self.log.e(TAG, 'No entry found in user table corresponding to email '+email)
                    return None
            else:
                self.log.e(TAG, 'No user with email address '+email+ ' found')
                return None
        else:
            return None
Пример #2
0
    def check_authentication(self, email, passcode):
        TAG = 'check_authentication'
        if email is not None and passcode is not None:
            from db.helpers.user import UserDBHelper
            user_helper = UserDBHelper()
            users = user_helper.get_user_with_email(email)

            if isinstance(users, dict):
                user = users
                from db.helpers.enrollment import EnrollmentDBHelper
                enrollment_helper = EnrollmentDBHelper()
                enrollment_filter = {C.ENROLLMENT_TABLE_USER: user['id']}
                enrollments = enrollment_helper.get_enrollments(
                    enrollment_filter, status=False)
                if enrollments is not None:
                    for enrollment in enrollments:
                        if str(enrollment[C.ENROLLMENT_TABLE_PASSWORD]) == str(
                                passcode):
                            self.log.i(TAG, 'Passcodes match')
                            return enrollment
                        else:
                            self.log.i(TAG,
                                       'Invalid passcode email combination')
                    return None
                else:
                    self.log.e(TAG,
                               'No entry found in user table corresponding \
                               to email ' + email)
                    return None
            else:
                self.log.e(TAG, 'No user with email address ' + email + '\
                           found')
                return None
        else:
            return None
Пример #3
0
    def run(self):
        log = Logger('UserPutHandlerThread')
        TAG = 'PUT'

        input_dict = json.loads(self.request.request.body)
        print input_dict

        self.user_id = input_dict.get('user_id')
        if self.user_id is None:
            log.e(TAG, 'No user id sent aborting update')
            opJson = json.dumps({'pass': False, 'message': 'No user id sent'})
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        else:

            user = UserDBHelper()
            user_dict = {c.USER_TABLE_NAME: str(input_dict.get('user_name')),
                        c.USER_TABLE_TEAM: str(input_dict.get('user_team')),
                        c.USER_TABLE_ROLE: str(input_dict.get('user_role'))}
            result = user.update_user(str(self.user_id), user_dict)
            if result is False:
                log.e(TAG, 'Not able to update the Users details')
                opJson = json.dumps({'pass': False,
                    'message': 'Not able to update the Email at DB'})
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)
            else:
                log.i(TAG, 'Users details Update successfully')
                opJson = json.dumps({'pass': True,
                     'message': 'Email updated for user.'})
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #4
0
    def run(self):
        # Return All the users in the User table
        self.log = Logger('DashboardEnrollmentStatusGetHandlerThread')
        # TAG = 'run'

        # ToDo : replace this with dynamic company id from cookies.
        company_id = self.company_id

        return_dict = {}
        user = UserDBHelper()
        violation = ViolationsDBHelper()
        enrollment = EnrollmentDBHelper()

        violation_count = violation.get_violation_count(company_id=company_id)
        not_enrolled_count = enrollment.get_enrollment_status_count(
            company_id=company_id, status=False)
        enrolled_count = enrollment.get_enrollment_status_count(
            company_id=company_id, status=True)

        print "\n printing enrolled count", not_enrolled_count
        user_count = user.get_users_count(company_id=company_id)

        user_info_dict = {}
        user_info_dict['Violations'] = violation_count
        user_info_dict['Not Enrolled'] = not_enrolled_count
        user_info_dict['Enrolled'] = enrolled_count
        user_info_dict['Total Users'] = user_count
        return_dict['UserInformation'] = user_info_dict

        opJson = json.dumps({'message': 'Everything seems to be working ...',
                             'data': return_dict, 'pass': True})
        #self.request.add_header('Access-Control-Allow-Origin', '*')
        self.request.set_header('Content-Type', 'application/json')
        self.request.write(opJson)
        tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #5
0
    def run(self):
        log = Logger('UserPolicyPutHandlerThread')
        TAG = 'run'
        # Flag to track status of policy
        status = False

        if self.data and self.company_id:
            # do stuff here
            user = UserDBHelper()
            url_data = self.data.split('/')
            request_data = json.loads(self.request.request.body)
            user_id = url_data[0]
            plugin_name = url_data[1]
            command_handler_json = {'to': 'user', 'id': str(user_id),
                                    'company_id': self.company_id}
            user_detail = user.get_user(str(user_id),
                                     company_id=self.company_id)

            if user_detail:

                user_policy_id = user_detail.get('policy_id')

                if plugin_name != 'actions':
                    status = put_individual_plugin(user_policy_id, plugin_name,
                                                                request_data)
                else:
                    status = True
                    command_handler_json['action'] = request_data.get('action')
                    command_handler_json['passcode'] = request_data.get('lock_key')
                if status:
                    print "\nprinting the json output will be send to command\
                          handler\n", command_handler_json
                    create_command_handler_task.delay(command_handler_json)
                    request_data['_id'] = user_policy_id
                    request_data['object_type'] = 'User'
                    request_data['name'] = user_detail[c.USER_TABLE_NAME]
                    opJson = json.dumps({'data':request_data, 'pass': True,
                                         'count':1, 'message': 'Everything fine'})
                    self.request.write(opJson)
                    tornado.ioloop.IOLoop.instance().add_callback(self.callback)

                else:
                    opJson = json.dumps({'pass': False, 'count': 0,
                        'message': 'Update operation at policy table failed'})
                    self.request.write(opJson)
                    tornado.ioloop.IOLoop.instance().add_callback(self.callback)
            else:
                log.e(TAG, 'No valid user id is sent in request')
                opJson = json.dumps({'pass': False,
                       'message': 'No valid user id is sent in request'})
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        else:
            log.e(TAG, 'UnAuthorized Access for user policy ')
            self.request.set_status(401)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #6
0
    def run(self):
        # Return All the users in the User table
        log = Logger('UserDeleteHandlerThread')
        tag = 'DELETE'

        if self.data is None:
            log.e(tag, 'No user registered in table for this user_id')
            opJson = json.dumps(
                {'pass': False,
                    'message': 'No user registered in table for this user_id'})
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        user = UserDBHelper()
        device = DeviceDBHelper()
        enrollment = EnrollmentDBHelper()
        print 'print data here \n ... \n ', self.data

        user_list = user.get_user(str(self.data), company_id=self.company_id)
        if user_list is None:
            log.e(tag, 'No user registered in table for this user_id')
            opJson = json.dumps(
                {'pass': False,
                    'message': 'No user registered in table for this user_id'})
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        else:
            user_deleted = user.delete_user(str(user_list.get('id')))
            if not user_deleted:
                log.e(tag, 'Not able to delete from user table')
                opJson = json.dumps(
                    {'pass': False,
                        'message': 'Not able to delete from user table'})
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)
            else:

                devices = device.get_devices_of_user(str(self.data))
                if devices is not None and len(devices) > 0:
                    for each_device in devices:
                        device_id = each_device.get('id')
                        device.delete_device(str(device_id))
                        enrollment_list = enrollment.get_enrollments({
                            'device_id': device_id})
                        for enroll in enrollment_list:
                            enrollment_id = enroll.get('id')
                            enrollment.update_enrollment(
                                str(enrollment_id), {
                                    'device_id': "null", 'is_enrolled': False})
                log.i(tag, 'User delelted')
                opJson = json.dumps({'pass': True,
                                     'message': 'User Successfully deleted'})
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #7
0
    def run(self):
        log = Logger('UserPutHandlerThread')
        TAG = 'PUT'

        input_dict = json.loads(self.request.request.body)
        print input_dict

        self.user_id = input_dict.get('user_id')
        if self.user_id is None:
            log.e(TAG, 'No user id sent aborting update')
            opJson = json.dumps({'pass': False, 'message': 'No user id sent'})
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        else:

            user = UserDBHelper()
            user_dict = {
                c.USER_TABLE_NAME: str(input_dict.get('user_name')),
                c.USER_TABLE_TEAM: str(input_dict.get('user_team')),
                c.USER_TABLE_ROLE: str(input_dict.get('user_role'))
            }
            result = user.update_user(str(self.user_id), user_dict)
            if result is False:
                log.e(TAG, 'Not able to update the Users details')
                opJson = json.dumps({
                    'pass':
                    False,
                    'message':
                    'Not able to update the Email at DB'
                })
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)
            else:
                log.i(TAG, 'Users details Update successfully')
                opJson = json.dumps({
                    'pass': True,
                    'message': 'Email updated for user.'
                })
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #8
0
    def run(self):
        # Return All the users in the User table
        self.log = Logger('DashboardEnrollmentStatusGetHandlerThread')
        # TAG = 'run'

        # ToDo : replace this with dynamic company id from cookies.
        company_id = self.company_id

        return_dict = {}
        user = UserDBHelper()
        violation = ViolationsDBHelper()
        enrollment = EnrollmentDBHelper()

        violation_count = violation.get_violation_count(company_id=company_id)
        not_enrolled_count = enrollment.get_enrollment_status_count(
            company_id=company_id, status=False)
        enrolled_count = enrollment.get_enrollment_status_count(
            company_id=company_id, status=True)

        print "\n printing enrolled count", not_enrolled_count
        user_count = user.get_users_count(company_id=company_id)

        user_info_dict = {}
        user_info_dict['Violations'] = violation_count
        user_info_dict['Not Enrolled'] = not_enrolled_count
        user_info_dict['Enrolled'] = enrolled_count
        user_info_dict['Total Users'] = user_count
        return_dict['UserInformation'] = user_info_dict

        opJson = json.dumps({
            'message': 'Everything seems to be working ...',
            'data': return_dict,
            'pass': True
        })
        #self.request.add_header('Access-Control-Allow-Origin', '*')
        self.request.set_header('Content-Type', 'application/json')
        self.request.write(opJson)
        tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #9
0
    def run(self):
        self.log = Logger('UpdateTokenThread')
        TAG = 'run'
        print 'In UpdateTokenThread\'s POST'

        #Get the parameters which are to be used
        password = str(self.request.get_argument('password',None))
        user_email = str(self.request.get_argument('email', None))
        token = str(self.request.get_argument('token',None))
        print password
        print user_email
        print token

        token = token.replace('<', '')
        token = token.replace('>', '')
        token = token.replace(' ', '')
        result_dict = {}

        user = UserDBHelper()

        user_detail_dict = user.get_user_with_email(user_email)
        print 'user_dict = ' + str(user_detail_dict)
        if user_detail_dict is None:
            self.log.e(TAG, 'No user corresponding to the email = ' + str(user_email))
            result_dict['pass'] = False
            result_dict['is_enrolled'] = False
            opJson = json.dumps(result_dict)
            self.request.set_header ('Content-Type', 'application/json')
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)
        else:
            
            company = CompanyDBHelper()

            user_id = str(user_detail_dict[C.USER_TABLE_ID])
            user_name = str(user_detail_dict[C.USER_TABLE_NAME])
            company_id = str(user_detail_dict[C.USER_TABLE_COMPANY])

            company_detail_dict = company.get_company(company_id)
            company_name = str(company_detail_dict[C.COMPANY_TABLE_NAME])
            
            enrollment = EnrollmentDBHelper()
            filter_dict = {
                           C.ENROLLMENT_TABLE_USER : str(user_id),
                           C.ENROLLMENT_TABLE_PASSWORD : str(password)
                           }
            enrollment_list = enrollment.get_enrollments(filter_dict)
            print 'enrollment_list = ' + str(enrollment_list)
            if enrollment_list is None:
                self.log.e(TAG, 'No enrollment corresponding to the email = ' + str(user_email) + ' and password = '******'pass'] = False
                result_dict['is_enrolled'] = False
                opJson = json.dumps(result_dict)
                self.request.set_header ('Content-Type', 'application/json')
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)
            else:
                
                device_id = enrollment_list[0][C.ENROLLMENT_TABLE_DEVICE]
                user_data = {'name': user_name, 'company': company_name}
                result_dict['data'] = user_data

                if device_id is None:
                    self.log.e(TAG, 'No device ID in enrollment table\
                             corresponding to the email = ' + \
                             str(user_email) + ' and password = '******'pass'] = True
                    result_dict['is_enrolled'] = False
                    opJson = json.dumps(result_dict)
                    self.request.set_header ('Content-Type', 'application/json')
                    self.request.write(opJson)
                    tornado.ioloop.IOLoop.instance().add_callback(self.callback)
                else:
                    
                    device_detail = DeviceDetailsDBHelper()
                    updated = device_detail.update_device_details(str(device_id), {C.DEVICE_DETAILS_TABLE_MESSAGE_TOKEN : str(token)})
                    
                    if not updated:
                        self.log.e(TAG, 'Not able to update Message Token in Device Details Table DeviceID = ' + str(device_id))
                        result_dict['pass'] = False
                        result_dict['is_enrolled'] = True
                        opJson = json.dumps(result_dict)
                        self.request.set_header ('Content-Type', 'application/json')
                        self.request.write(opJson)
                        tornado.ioloop.IOLoop.instance().add_callback(self.callback)
                    else:
                        self.log.i(TAG, 'Device Messge Token updated successfully DeviceID = ' + str(device_id))
                        result_dict['pass'] = True
                        result_dict['is_enrolled'] = True
                        opJson = json.dumps(result_dict)
                        self.request.set_header ('Content-Type', 'application/json')
                        self.request.write(opJson)
                        tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #10
0
    def run(self):
        self.log = Logger('UpdateTokenThread')
        TAG = 'run'
        print 'In UpdateTokenThread\'s POST'

        # Get the parameters which are to be used
        password = str(self.request.get_argument('password', None))
        user_email = str(self.request.get_argument('email', None))
        token = str(self.request.get_argument('token', None))
        print password
        print user_email
        print token

        token = token.replace('<', '')
        token = token.replace('>', '')
        token = token.replace(' ', '')
        result_dict = {}

        user = UserDBHelper()

        user_detail_dict = user.get_user_with_email(user_email)
        print 'user_dict = ' + str(user_detail_dict)
        if user_detail_dict is None:
            self.log.e(
                TAG,
                'No user corresponding to the email = ' +
                str(user_email))
            result_dict['pass'] = False
            result_dict['is_enrolled'] = False
            opJson = json.dumps(result_dict)
            self.request.set_header('Content-Type', 'application/json')
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)
        else:

            company = CompanyDBHelper()

            user_id = str(user_detail_dict[C.USER_TABLE_ID])
            user_name = str(user_detail_dict[C.USER_TABLE_NAME])
            company_id = str(user_detail_dict[C.USER_TABLE_COMPANY])

            company_detail_dict = company.get_company(company_id)
            company_name = str(company_detail_dict[C.COMPANY_TABLE_NAME])

            enrollment = EnrollmentDBHelper()
            filter_dict = {
                C.ENROLLMENT_TABLE_USER: str(user_id),
                C.ENROLLMENT_TABLE_PASSWORD: str(password)
            }
            enrollment_list = enrollment.get_enrollments(filter_dict)
            print 'enrollment_list = ' + str(enrollment_list)
            if enrollment_list is None:
                self.log.e(
                    TAG,
                    'No enrollment corresponding to the email = ' +
                    str(user_email) +
                    ' and password = '******'pass'] = False
                result_dict['is_enrolled'] = False
                opJson = json.dumps(result_dict)
                self.request.set_header('Content-Type', 'application/json')
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)
            else:

                device_id = enrollment_list[0][C.ENROLLMENT_TABLE_DEVICE]
                user_data = {'name': user_name, 'company': company_name}
                result_dict['data'] = user_data

                if device_id is None:
                    self.log.e(TAG, 'No device ID in enrollment table\
                             corresponding to the email = ' +
                               str(user_email) + ' and password = '******'pass'] = True
                    result_dict['is_enrolled'] = False
                    opJson = json.dumps(result_dict)
                    self.request.set_header('Content-Type', 'application/json')
                    self.request.write(opJson)
                    tornado.ioloop.IOLoop.instance().add_callback(
                        self.callback)
                else:

                    device_detail = DeviceDetailsDBHelper()
                    updated = device_detail.update_device_details(
                        str(device_id), {
                            C.DEVICE_DETAILS_TABLE_MESSAGE_TOKEN: str(token)})

                    if not updated:
                        self.log.e(
                            TAG,
                            'Not able to update Message Token in \
Device Details Table DeviceID = ' + str(device_id))
                        result_dict['pass'] = False
                        result_dict['is_enrolled'] = True
                        opJson = json.dumps(result_dict)
                        self.request.set_header(
                            'Content-Type',
                            'application/json')
                        self.request.write(opJson)
                        tornado.ioloop.IOLoop.instance().add_callback(
                            self.callback)
                    else:
                        self.log.i(
                            TAG,
                            'Device Messge Token updated successfully \
DeviceID = ' + str(device_id))
                        result_dict['pass'] = True
                        result_dict['is_enrolled'] = True
                        opJson = json.dumps(result_dict)
                        self.request.set_header(
                            'Content-Type',
                            'application/json')
                        self.request.write(opJson)
                        tornado.ioloop.IOLoop.instance().add_callback(
                            self.callback)
Пример #11
0
    def run(self):
        log = Logger('RoleGetHandlerThread')
        TAG = 'GET'

        page = self.request.get_argument('offset', None)
        count = self.request.get_argument('count', None)
        sort_by = self.request.get_argument('sort_by', None)
        print page
        print count
        print sort_by

        if self.data and self.company_id:
            role = RoleDBHelper()
            roles = role.get_role(str(self.data), company_id=self.company_id)
            outer_dict = {}
            outer_array = []
            if roles is None:
                log.e(TAG, 'No role found corresponding to the role id ' + \
                      str(self.data))
                opJson = json.dumps({'pass': False, 'message':'No role found \
                            corresponding to the role id ' + str(self.data)})
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)
            else:
                self.role_name = roles[c.ROLE_TABLE_NAME]

                user = UserDBHelper()
                filter_dict = {
                               c.USER_TABLE_ROLE: str(roles.get('id'))
                               }
                user_list = user.get_users_with_pages(filter_dict, int(page), int(count), str(sort_by))

                inner_array = []
                if user_list is not None:
                    for users in user_list:
                        inner_dict = {}
                        self.user_id = str(users[c.USER_TABLE_ID])
                        self.user_name = str(users[c.USER_TABLE_NAME])
                        self.user_email = str(users[c.USER_TABLE_EMAIL])
                        self.user_team_id = str(users[c.USER_TABLE_TEAM])

                        ## Find out the team for user
                        team = TeamDBHelper()
                        teams = team.get_team(self.user_team_id,
                                [c.TEAM_TABLE_NAME])
                        if teams is None:
                            self.user_team = None
                        else:
                            self.user_team = str(teams[c.TEAM_TABLE_NAME])

                        ## Find out the device for user
                        device = DeviceDBHelper()
                        device_list = device.get_devices_of_user(self.user_id)
                        if device_list is None:
                            self.user_device = None
                        else:
                            devices = device_list[0]
                            self.user_device = str(
                                devices[c.DEVICE_TABLE_UDID])
                            self.user_device_os = str(
                                devices[c.DEVICE_TABLE_OS])

                            # Find out user violations
                            violation = ViolationsDBHelper()
                            violation_count = violation.get_violation_count(
                                     str(devices.get('id')))
                        inner_dict = {
                               'user_id': self.user_id,
                               'user_name': self.user_name,
                               'user_role': self.role_name,
                               'user_team': self.user_team,
                               'user_device': self.user_device,
                               'user_violations': violation_count,
                               'user_device_os': self.user_device_os
                        }
                        inner_array.append(inner_dict)

                outer_dict['name'] = self.role_name
                outer_dict['users'] = inner_array
                outer_dict['roleID'] = self.data
                outer_array.append(outer_dict)

            self.final_dict['pass'] = True
            self.final_dict['roles'] = outer_array

            opJson = json.dumps(self.final_dict)
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        else:
            log.e(TAG, 'UnAuthorized Access for Roles')
            self.request.set_status(401)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #12
0
    def run(self):
        log = Logger('CheckInHandler PUT')
        TAG = 'run'
        # print ' In deviceCheckin PUT Handler\n\n\n'

        # parse the body of PUT
        # First extract the XML
        arguments = cgi.parse_qsl(self.request.request.body)
        intermediate = arguments[0]
        currentxml = intermediate[1]
        final = currentxml[25:-1]
        enrollment_id = str(self.data)
#         print final

        # Actual Parsing
        #tree = ET.ElementTree(ET.fromstring(final))
# tree = ET.parse('temp.xml')   ### For testing only
        node = etree.fromstring(final)
        device_data = []
        for text_of_child in node.itertext():
            if len(text_of_child.strip()) > 0:
                device_data.append(text_of_child.strip())
        device_data = dict(zip(device_data[::2], device_data[1::2]))

        if device_data.get('PushMagic'):
            self.push_magic = str(device_data.get('PushMagic'))

        if device_data.get('Token'):
            self.device_token = str(device_data.get('Token'))
            self.device_token = self.device_token.replace(' ', '+')
            self.device_token = self.device_token.replace('\n', '')
            self.device_token = self.device_token.replace('\t', '')
            # print len(self.device_token)
            # print self.device_token
        if device_data.get('MessageType'):
            message = device_data.get('MessageType')
            if message == 'TokenUpdate':
                self.do_entry = True
            elif message == 'Authenticate':
                self.do_initial_entry = True

        if device_data.get('UnlockToken'):
            self.unlock_token = device_data.get('UnlockToken')
            self.unlock_token = self.unlock_token.replace(' ', '+')
            self.unlock_token = self.unlock_token.replace('\n', '')
            self.unlock_token = self.unlock_token.replace('\t', '')

        if device_data.get('UDID'):
            self.udid = device_data.get('UDID')

        ### Initial Device DB Entries ###
        if self.do_entry:
            enrolled_success = False
            device_id = None
            # fetch info from enrollment table
            enrollment = EnrollmentDBHelper()

            enrollment_dict = enrollment.get_enrollment(enrollment_id)
            # print 'enrollment_dict = ' + str(enrollment_dict)
            if enrollment_dict is None:
                log.e(TAG,
                      'No user ID in Enrollment table. Enrollment ID = '
                      + str(enrollment_id))
                reply = """
                    <html>
                        <body>401</body>
                    </html>
                    """
                self.request.set_status(401)
                self.request.write(reply)
                ioloop.IOLoop.instance().add_callback(self.callback)

            else:

                reply = """
            <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
                         "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                        <plist version="1.0">
                        <dict>
                        </dict>
                        </plist>
                """
                print 'inner write'
                self.request.write(reply)
                ioloop.IOLoop.instance().add_callback(self.callback)

                device = DeviceDBHelper()
                violation = ViolationsDBHelper()
                user_id = str(enrollment_dict[c.ENROLLMENT_TABLE_USER])
                device_id = enrollment_dict.get(c.ENROLLMENT_TABLE_DEVICE)
                devices = device.get_device_with_udid(
                    str(self.udid), status=True)
                # print "\n print devices list if available \n\n",devices
                device_detail = DeviceDetailsDBHelper()
                device_details_dict = {
                    'token': self.device_token,
                    'push_magic': self.push_magic,
                    'unlock_token': self.unlock_token
                }

                if device_id:

                    enrolled_success = True
                    device.update_device(str(device_id),
                                         {c.DEVICE_TABLE_DELETED: False,
                                          c.DEVICE_TABLE_UDID: str(self.udid)})
                    device_detail.update_device_details(str(device_id),
                                                        device_details_dict)
                    print "Device details table updated."

                elif devices:
                    device_id = devices[0][c.DEVICE_TABLE_ID]
                    device.update_device(str(device_id),
                                         {c.DEVICE_TABLE_DELETED: False})
                    device_detail.update_device_details(str(device_id),
                                                        device_details_dict)
                    enrollment.update_enrollment(
                        enrollment_id, {
                            c.ENROLLMENT_TABLE_DEVICE: str(device_id)})
                    enrollment.set_enrolled(enrollment_id)
                    enrolled_success = True

                else:
                    # print 'user_id = ' + user_id
                    device_dict = {c.DEVICE_TABLE_USER: user_id,
                                   c.DEVICE_TABLE_OS: 'ios',
                                   c.DEVICE_TABLE_UDID: str(self.udid),
                                   c.DEVICE_TABLE_DELETED: False}
                    device_id = device.add_device(device_dict)
                    if device_id is None:
                        log.e(TAG,
                              'Not Able to insert in Device table UDID = '
                              + str(self.udid) + 'userID = ' + str(user_id))
                    else:
                        device_details_dict_new = {}
                        device_details_dict_new[
                            c.DEVICE_DETAILS_TABLE_DEVICE] = device_id
                        device_details_dict_new[
                            c.DEVICE_DETAILS_TABLE_EXTRAS] = device_details_dict
                        device_details_id = device_detail.add_device_detail(
                            device_details_dict_new)

                        # print 'device_details_id = ' + str(device_details_id)
                        if device_details_id is None:
                            log.e(TAG, 'Not Able to insert in Device Details \
                                  table UDID = ' +
                                  str(self.udid) +
                                  'userID = ' +
                                  str(user_id) +
                                  'DeviceID = ' +
                                  str(device_id))
                        else:

                            success = enrollment.update_enrollment(
                                enrollment_id,
                                {c.ENROLLMENT_TABLE_DEVICE: str(device_id)})
                            if not success:
                                log.e(TAG,
                                      'enrollment device table not linked')
                            else:
                                success1 = enrollment.set_enrolled(
                                    enrollment_id)

                                if success1:
                                    enrolled_success = True
                                else:
                                    log.e(
                                        TAG,
                                        'EnrolledOn time is not updated in \
the Enrollment Table')

                if device_id and enrolled_success:

                    violation_status = violation.update_violations(
                        str(device_id))
                    user = UserDBHelper()
                    user_info = user.get_user(user_id)
                    if violation_status:
                        log.i(TAG,
                              "Violation table updated for device_id" + str(
                                  device_id))
                    else:
                        log.e(
                            TAG,
                            "Violation table not updated for device_id" +
                            str(device_id))

                    ### Add task to Queue for celery Worker. ###
                    json_data = {'to': 'user', 'action': 'device_information',
                                 'id': user_id}
                    json_data['company_id'] = user_info.get('company_id')

                    create_command_handler_task.delay(json_data)

                    ### Now send polling Signal to device ###
                    wrapper = APNSNotificationWrapper(
                        '/opt/toppatch/assets/ios/PushCert.pem', False)
                    message = APNSNotification()
                    message.appendProperty(APNSProperty("mdm",
                                                        str(self.push_magic)))
                    message.tokenBase64(str(self.device_token))
                    wrapper.append(message)
                    wrapper.notify()

                    print 'Payload Sent'

        elif device_data.get('MessageType') == 'CheckOut':
            reply = """
                    <html>
                        <body>401</body>
                    </html>
                    """
            self.request.set_status(401)
            self.request.write(reply)
            ioloop.IOLoop.instance().add_callback(self.callback)

            violation = ViolationsDBHelper()
            device = DeviceDBHelper()
            enrollment = EnrollmentDBHelper()
            devices = device.get_device_with_udid(self.udid)
            if devices is None:
                log.e(TAG, 'No User ID Associated with Device UDID = '
                           + self.udid)
            else:
                device_id = devices[0][c.DEVICE_TABLE_ID]
                violation_id = violation.add_violation(str(device_id))
                if violation_id is None:
                    log.e(TAG, 'Not able to insert in Violation Table.\
                               DeviceID = ' + str(device_id))
                else:
                    device.delete_device(device_id)
                    enrollment.update_enrollment(
                        str(enrollment_id), {
                            'device_id': "null", 'is_enrolled': False})
                    log.i(TAG, 'Violation added for device id = ' +
                               str(device_id))
                    admin_mailer(device_id, violation_id)

        else:
            reply = """
            <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
             "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                                <plist version="1.0">
                                <dict>
                                </dict>
                                </plist>
            """
            print 'outer write'
            self.request.write(reply)
            ioloop.IOLoop.instance().add_callback(self.callback)
Пример #13
0
    def run(self):
        TAG = 'run'

        print ' In IOSCommandPerformer\'s PUT'
        command = IOSCommandDBHelper()
        invoke_flag = False
        arguments = cgi.parse_qsl(self.request.request.body)
        intermediate = arguments[0]
        currentxml = intermediate[1]
        final = currentxml[25:-1]  # Original Line
        # final = currentxml[20:]  ### For testing only
        # print '\n\n\n here is final xml \n\n', final
        # temp Parsing
        # tree = ET.ElementTree(ET.fromstring(final))  ##Original Line
        # tree = ET.parse('temp.xml')   ### For testing only
        initial_list = []
        initial_dict = {}

        check_out_requested = False
        send_command = False
        store_result = False
        store_error = False
        registered = True
        special_result = False
        acknowledged = False
        update_token = False

        object_root = objectify.fromstring(final)

        begin = object_root.dict

        for child in begin.iterchildren():
            initial_list.append(child.text)

        initial_dict = dict(zip(initial_list[::2], initial_list[1::2]))
        # print '\n\n print here initial dict\n', initial_dict

        if 'UDID' in initial_dict:
            udid = initial_dict.get('UDID')
            device = DeviceDBHelper()
            registered = device.is_udid_registered(str(udid))

        if 'Status' in initial_dict:
            status = initial_dict.get('Status')
            if status == 'Idle':
                send_command = True
            elif status == 'Acknowledged':
                acknowledged = True
            elif status == 'Error':
                store_error = True
                uuid = initial_dict.get('CommandUUID')

        if 'MessageType' in initial_dict:
            message = initial_dict.get('MessageType')
            if message == 'TokenUpdate':
                update_token = True
            elif message == 'CheckOut':
                check_out_requested = True
        push_magic = 'push_magic'
        token = 'Token'
        unlock_token = 'UnlockToken'

        if registered is False:
            reply = """

                    """
            self.request.set_status(401)
            self.request.write(reply)
            ioloop.IOLoop.instance().add_callback(self.callback)

        else:
            device_id = str(device.get_device_with_udid(udid)[0]['id'])
            print 'reached here '
        if acknowledged:
            if 'CommandUUID' in initial_dict:
                uuid = initial_dict.get('CommandUUID')
                # special uuid for device information
                if uuid == '55555555-5555-5555-5555-555555555555' + device_id:
                    info_list = [
                        el.text if el.text else el.tag
                        for el in object_root.iterdescendants()
                    ]
                    info_list.pop(0)
                    final = dict(zip(info_list[::2], info_list[1::2]))
                    store_result = True
                    special_result = True
                # special uuid for installed application list
                elif uuid == ('77777777-7777-7777-7777-777777777777' +
                              device_id):
                    begin = object_root.dict.array
                    apps_list = []
                    for outer_child in begin.iterchildren():
                        temp_list = []
                        for inner_child in outer_child.iterchildren():
                            temp_list.append(inner_child.text)
                        apps_list.append(
                            dict(zip(temp_list[::2], temp_list[1::2])))
                    final = apps_list
                    store_result = True
                    invoke_flag = True
                else:
                    store_result = True

        if send_command:
            if udid is None:
                self.log.e(TAG, 'No UDID is supplied from the device')
            else:

                command_list = command.get_not_executed(str(device_id))
                if command_list is None or len(command_list) == 0:
                    self.log.e(
                        TAG, 'No command to execute fot the device \
                               having ID = ' + str(device_id))
                    reply = " "
                    print 'outer write'
                    self.request.set_status(500)
                    self.request.write(reply)
                    ioloop.IOLoop.instance().add_callback(self.callback)

                else:

                    device_details = DeviceDetailsDBHelper()
                    violate_device = False
                    special_uuid = (
                        '2929292929-29292929-292929-292929-292929' +
                        str(device_id))

                    commands = command_list[0]
                    action = str(commands[c.COMMAND_TABLE_ACTION])
                    command_attributes = commands[c.COMMAND_TABLE_ATTRIBUTE]
                    command_uuid = str(commands[c.COMMAND_TABLE_COMMAND_UUID])

                    if command_uuid == special_uuid:
                        violate_device = True

                    if action is not None and not violate_device:
                        command_xml_thread = IOSCommandCreatorThread(
                            action, command_attributes, command_uuid,
                            device_id)
                        command_xml_thread.start()
                        command_xml_thread.join()
                        final_output = command_xml_thread.command_profile
                        if final_output is not None:
                            self.request.write(final_output)
                        ioloop.IOLoop.instance().add_callback(self.callback)
                        # send polling signal to device for next command
                        device_details_list = (
                            device_details.get_device_details(device_id))

                        json_extras = device_details_list.get(
                            c.DEVICE_DETAILS_TABLE_EXTRAS)

                        self.push_magic = str(json_extras.get('push_magic'))
                        self.device_token = str(json_extras.get('token'))
                        wrapper = APNSNotificationWrapper(
                            '/opt/toppatch/assets/ios/PushCert.pem', False)
                        message = APNSNotification()
                        message.appendProperty(
                            APNSProperty("mdm", self.push_magic))
                        message.tokenBase64(str(self.device_token))
                        wrapper.append(message)
                        wrapper.notify()
                        print 'Payload Sent'

                    elif violate_device:
                        ### Wiping device to Factory Reset ###
                        command_xml_thread = IOSCommandCreatorThread(
                            action, command_attributes, command_uuid,
                            device_id)
                        command_xml_thread.start()
                        command_xml_thread.join()
                        final_output = command_xml_thread.command_profile
                        if final_output is not None:
                            self.request.write(final_output)
                        ioloop.IOLoop.instance().add_callback(self.callback)

                        violation = ViolationsDBHelper()
                        enrollment = EnrollmentDBHelper()
                        violation_id = violation.add_violation(str(device_id))

                        if violation_id is None:
                            self.log.e(
                                TAG, 'Not able to insert in Violation \
Table. DeviceID = ' + str(device_id))
                        else:
                            device.delete_device(device_id)
                            enrollment_list = enrollment.get_enrollments(
                                {'device_id': device_id})
                            for enroll in enrollment_list:
                                enrollment_id = enroll.get('id')
                                enrollment.update_enrollment(
                                    str(enrollment_id), {
                                        'device_id': "null",
                                        'is_enrolled': False
                                    })
                            self.log.i(
                                TAG, 'Violation added for device id = ' +
                                str(device_id) + 'due to remote wipe command')
                    else:
                        reply = " "
                        print 'outer write'
                        self.request.set_status(500)
                        self.request.write(reply)
                        ioloop.IOLoop.instance().add_callback(self.callback)

        elif check_out_requested:
            violation = ViolationsDBHelper()
            device = DeviceDBHelper()

            devices = device.get_device_with_udid(udid)
            if devices is None:
                self.log.e(TAG,
                           'No User ID Associated with Device UDID = ' + udid)
            else:
                device_id = str(devices[0][c.DEVICE_TABLE_ID])
                violation_id = violation.add_violation(device_id)
                if violation_id is None:
                    self.log.e(
                        TAG, 'Not able to insert in Violation Table.\
                               DeviceID = ' + str(device_id))
                else:
                    self.log.i(
                        TAG,
                        'Violation added for device id = ' + str(device_id))

            reply = """

                    """
            self.request.set_status(401)
            self.request.write(reply)
            ioloop.IOLoop.instance().add_callback(self.callback)

        elif store_result or store_error:
            if special_result:
                is_updated = device.update_device(
                    str(device_id),
                    {c.DEVICE_TABLE_OS_VERSION: str(final.get('OSVersion'))})
                if not is_updated:
                    self.log.e(
                        TAG, 'Not able to set the version of the device\
                    udid = ' + str(udid) + " Device id = " + str(device_id))
                else:
                    self.log.i(
                        TAG, 'Version Set for the device udid = ' + str(udid) +
                        " Device id = " + str(device_id))

            if store_error:
                self.log.e(
                    TAG, 'Error in Response for uuid = ' + str(uuid) +
                    ' device_id = ' + str(device_id))
            # print '\n\nfinal dict to be stored as json is \n\n', final
            result_updated = command.update_result(str(uuid), str(device_id),
                                                   final)
            reply = """
                <?xml version="1.0" encoding="UTF-8"?>
                <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
                "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                                <plist version="1.0">
                                <dict>
                                </dict>
                                </plist>
            """
            self.request.write(reply)
            ioloop.IOLoop.instance().add_callback(self.callback)
            if not result_updated:
                self.log.e(
                    TAG, 'Result Not updated for uuid = ' + str(uuid) +
                    ' udid = ' + str(udid))
            else:
                executed = command.toggle_executed(str(uuid), str(device_id),
                                                   True)
                if executed is False:
                    self.log.e(
                        TAG, 'IOSCommand Table executed \
                            field is not updated CommandUUID = ' + str(uuid) +
                        'Device id = ' + str(device_id))

                self.log.i(
                    TAG, 'Result send in DB for uuid = ' + str(uuid) +
                    ' udid = ' + str(udid))

                if invoke_flag:
                    # Queue task to send command to user of app installation
                    user = UserDBHelper()
                    user_id = device.get_device_with_udid(
                        str(udid))[0]['user_id']
                    user_info = user.get_user(str(user_id))
                    json_data = {'to': 'user', 'id': user_id}
                    json_data['company_id'] = user_info.get('company_id')
                    create_command_handler_task.delay(json_data)

        elif update_token:
            device = DeviceDBHelper()
            device_list = device.get_device_with_udid(udid)

            device_id = 'device_id'
            if device_list is not None and len(device_list) != 0:
                for devices in device_list:
                    device_id = devices[c.DEVICE_TABLE_ID]
                    if device_id is None:
                        self.log.e(
                            TAG, 'Device id is not found corresponding \
                                   the udid = ' + str(udid))
                    else:
                        device_details = DeviceDetailsDBHelper()
                        device_details_dict = {
                            c.DEVICE_DETAILS_TABLE_DEVICE_TOKEN: token,
                            c.DEVICE_DETAILS_TABLE_PUSH_MAGIC: push_magic,
                            c.DEVICE_DETAILS_TABLE_UNLOCK_TOKEN: unlock_token
                        }
                        is_updated = device_details.update_device_details(
                            str(device_id), device_details_dict)
                        if not is_updated:
                            self.log.e(
                                TAG, 'Not able to update the device \
                                    details of device_id = ' + str(device_id))
                        else:
                            self.log.i(
                                TAG, 'Device Details successfully \
                                       updated device id = ' + str(device_id))

                        reply = """
                <?xml version="1.0" encoding="UTF-8"?>
                <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
                 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                                <plist version="1.0">
                                <dict>
                                </dict>
                                </plist>
                        """
                        self.request.write(reply)
                        ioloop.IOLoop.instance().add_callback(self.callback)

        else:
            reply = """
                <?xml version="1.0" encoding="UTF-8"?>
                <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
                 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                                <plist version="1.0">
                                <dict>
                                </dict>
                                </plist>
            """
            print 'outer write'
            self.request.write(reply)
            ioloop.IOLoop.instance().add_callback(self.callback)
Пример #14
0
    def run(self):
        #Return All the users in the User table
        log = Logger('UsersGetHandlerThreadWithPage')
        tag = 'run'

        company_id = self.company_id

        final_dict = {}

        user = UserDBHelper()
        team = TeamDBHelper()
        role = RoleDBHelper()
        violation = ViolationsDBHelper()
        device = DeviceDBHelper()

        offset = self.request.get_argument('offset', None)
        count = self.request.get_argument('count', None)
        name_query = self.request.get_argument('name', None)
        team_query = self.request.get_argument('team', None)
        role_query = self.request.get_argument('role', None)
        device_query = self.request.get_argument('device_id', None)
        sort_by = self.request.get_argument('sort_by', True)#Intentionally done
        sort_order = self.request.get_argument('sort', None)
        filter_key = self.request.get_argument('filter_key', None)
        filter_value = self.request.get_argument('filter_value', None)

        if filter_key == 'role':
            role_name = filter_value
            role_id = role.get_role_by_name(str(role_name), company_id)
        else:
            role_name = None
            role_id = None

        if filter_key == 'team':
            team_name = filter_value
            team_id = team.get_team_by_name(str(team_name), company_id)
        else:
            team_name = None
            team_id = None

        if filter_key == 'os':
            os_mapper = {'Android': 'samsung', 'iOS': 'ios'}
            os_type = os_mapper.get(str(filter_value))
        else:
            os_type = None

        if name_query:
            query  = name_query
            query_type = 'name'
        elif role_query:
            query = role_query
            query_type = 'role'
        elif device_query:
            query = device_query
            query_type = 'device'
        elif team_query:
            query = team_query
            query_type = 'team'
        else:
            query = None
            query_type = None

        if offset:
            result_list, total_count = user.get_users_for_user(
                        company_id=company_id, offset=offset, count=count,
                        role_id=role_id, team_id=team_id, query=query,
                        query_type=query_type, os_type=os_type,
                        sort_by=sort_by, sort_order=sort_order,
                        filter_key=filter_key, filter_value=filter_value)

        else:
            result_list, total_count = user.get_users(
                                    {c.USER_TABLE_COMPANY: company_id})

        if result_list:
            for user_dict in result_list:
                device_deleted = False
                device_info = device.get_device_with_udid(user_dict.get(
                                    'user_device'))
                if not device_info:
                    device_info = device.get_device_with_udid(user_dict.get(
                                    'user_device'), status=True)
                    device_deleted = True
                if device_info:
                    device_id = device_info[0].get(c.DEVICE_TABLE_ID)
                else:
                    device_id = None

                if device_deleted:
                    user_dict['user_device'] = None
                    user_dict['user_device_os'] = None

                if device_id:
                    print "printing \n device id", device_id
                    violation_count = violation.get_violation_count(
                          company_id=company_id, device_id=str(device_id))
                else:
                    violation_count = 0
                user_dict['user_violation'] = violation_count

            final_dict['data'] = result_list
            final_dict['count'] = total_count
            final_dict['pass'] = True
            final_dict['message'] = 'Seems like things are working ...'

        else:
            final_dict['pass'] = True
            log.e(tag,'No User in User Table')
            final_dict['message'] = 'Seems like things are not working ...'
            final_dict['count'] = 0

        ## add all the data into dictionary and create output json
        opJson = json.dumps(final_dict)
        self.request.write(opJson)
        tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #15
0
    def merge(self, device_id):
        user_helper = UserDBHelper()
        device_helper = DeviceDBHelper()
        roles_helper = RoleDBHelper()
        teams_helper = TeamDBHelper()
        company_helper = CompanyDBHelper()
        policy_helper = PolicyDBHelper()

        if device_id is not None:
            device_details = device_helper.get_device(device_id)
            if device_details is not None and 'user_id' in device_details:
                user_details = user_helper.get_user(
                    str(device_details['user_id']))
                team_id = user_details['team_id']
                role_id = user_details['role_id']
                company_id = user_details['company_id']

                team_details = teams_helper.get_team(str(team_id))
                role_details = roles_helper.get_role(str(role_id))
                company_details = company_helper.get_company(str(company_id))

                if user_details is not None and 'policy_id' in user_details:
                    policy_id_user = user_details['policy_id']
                else:
                    print 'No user details found'

                if team_details is not None and 'policy_id' in team_details:
                    policy_id_team = team_details['policy_id']
                else:
                    print 'no team details found'

                if role_details is not None and 'policy_id' in role_details:
                    policy_id_role = role_details['policy_id']
                else:
                    print 'no role details found'

                if (company_details is not None
                        and 'policy_id' in company_details):
                    policy_id_company = company_details['policy_id']
                else:
                    print 'no company details found'

                if policy_id_company is not None:
                    print 'company policy id=', policy_id_company
                    policy_company = policy_helper.get_policy(
                        str(policy_id_company))
                else:
                    policy_company = None
                if policy_id_role is not None:
                    print 'role policy id=', policy_id_role
                    policy_role = policy_helper.get_policy(str(policy_id_role))
                else:
                    policy_role = None
                if policy_id_team is not None:
                    print 'team policy id=', policy_id_team
                    policy_team = policy_helper.get_policy(str(policy_id_team))
                else:
                    policy_team = None
                if policy_id_user is not None:
                    print 'user policy id=', policy_id_user
                    policy_user = policy_helper.get_policy(str(policy_id_user))
                else:
                    policy_user = None

                return self.merge_policies(
                    policy_company,
                    policy_role,
                    policy_team,
                    policy_user)
            else:
                print 'Invalid device id'
Пример #16
0
    def run(self):
        #Find all the POST arguments required

        company_id = self.company_id
        company_name = str(self.company_name)

        loader = Loader("/opt/toppatch/mv/media/app/")

        thread1 = {}

        log = Logger('EnrollDevice')
        tag = 'POST'
        request_body = json.loads(self.request.request.body)


        try:
            self.user_email = str(request_body.get('user_email', None))
            self.user_name = str(request_body.get('user_name', None))
            self.team_id = str(request_body.get('team_id', None))
            self.role_id = str(request_body.get('role_id', None))
            self.company_id = str(company_id)
        except:
            self.request.write('Some arguments are not supplied')
            opJson = json.dumps({'pass':False, 'user_name': None,
                                 'link' : None, 'password':None,
                                  'error':'Some argument not supplied'})
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)
            log.e(tag, 'Some arguments not sent in POST request for enrollment')
            return

        if self.user_email is None or self.user_name is None or\
                         self.company_id is None:
            log.e(tag, 'Email or user_name is NULL')
            opJson = json.dumps({'pass':False, 'user_name': None,
                        'link' : None, 'password':None,
                         'error':'user_name or Email or Company is None'})
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)


        if self.user_name == '' or self.user_email == '':
            log.e(tag, 'Email or user_name is empty')
            opJson = json.dumps({'pass':False, 'user_name': None,
                             'link' : None, 'password':None,
                        'error':'email or user_name or company is empty'})
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)


        password = generate_password()

        user = UserDBHelper()
        user_dict = {
                    c.USER_TABLE_NAME: str(self.user_name),
                    c.USER_TABLE_TEAM : str(self.team_id),
                    c.USER_TABLE_ROLE: str(self.role_id),
                    c.USER_TABLE_EMAIL: str(self.user_email),
                    c.USER_TABLE_COMPANY: str(self.company_id)
                   }
        user_id, duplicate = user.add_user_if_not_exists(user_dict)

        if duplicate:
            log.e(tag,'No id from primary key ')
            opJson = json.dumps({'pass':False, 'user_name': self.user_name,
                         'link' : None, 'password':None, 'duplicate': True,
                        'error':'DB has problem'})
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        else:
            enrollment_dict = {
                              c.ENROLLMENT_TABLE_USER: user_id,
                              c.ENROLLMENT_TABLE_PASSWORD: password,
                              c.ENROLLMENT_TABLE_IS_ENROLLED: False
                              }
            enrollment = EnrollmentDBHelper()
            enrollment_id = str(enrollment.add_enrollment(enrollment_dict))

            enrollment_dict = enrollment.get_enrollment(enrollment_id)

            if enrollment_id is not None:
                self.link += enrollment_id

                try:
                    message = loader.load('user_enroll_mail.html').generate(
                           company_name=self.company_name,
                           user_passwd=password, activation_link=self.link)

                    ses_conn.send_email('*****@*****.**',
                                'MDM Enrollment verification', message,
                                 [self.user_email], format='html')
                    print 'No error found'
                    log.i(tag, 'Enrollment request successful')
                    opJson = json.dumps({'pass':True, 'user_name': self.user_name,
                     'link' : 'link', 'password':'******', 'error':None})

                except Exception, err:
                    print 'Mail Sending error exception is :', repr(err)

                    log.e(tag, 'Incorrect EmailID sent')
                    opJson = json.dumps({'pass':False, 'user_name': self.user_name,
                      'link' : None, 'password':None, 'error':'Wrong emailID'})

            else:
Пример #17
0
                self.log.e(TAG, 'Exception: ' + repr(err))
                return None

            if self.cursor.rowcount > 0:
                rows = self.cursor.fetchall()
                return_array = []
                print rows
                for row in rows:
                    temp_dict = dict(zip(zip_list, row))

                    return_array.append(temp_dict)
                return return_array
            else:
                self.log.e(TAG,
                    'Not able to perform select operation on Enrollment table')
                return None


if __name__ == "__main__":
    email = "'*****@*****.**'"
    password ='******'

    from db.helpers.user import UserDBHelper
    user = UserDBHelper()
    f= {C.USER_TABLE_EMAIL:email}
    print user.get_users(f)
#     enrollment = EnrollmentDBHelper()
#     filter_dict=dict()
#     filter_dict[C.ENROLLMENT_TABLE_USER]='5'
#     print enrollment.get_enrollments(filter_dict)
Пример #18
0
    def run(self):
        # Return All the users in the User table
        log = Logger('TeamsGetHandlerThread')
        tag = 'run'
        print 'In TeamsGetHandlerThread'
        final_dict = {}

        role = RoleDBHelper()
        team = TeamDBHelper()
        user = UserDBHelper()

        team_name = self.request.get_argument('team', None)
        offset = self.request.get_argument('offset', None)
        count = self.request.get_argument('count', None)
        sort_by = self.request.get_argument('sort_by',
                                            True)  # Intentionally done
        name_query = self.request.get_argument('name', None)
        role_query = self.request.get_argument('role', None)
        device_query = self.request.get_argument('device_id', None)
        sort_order = self.request.get_argument('sort', None)
        filter_key = str(self.request.get_argument('filter_key', None))
        filter_value = self.request.get_argument('filter_value', None)

        # Find all the roles in the Roles Table

        if filter_key == 'role':
            role_name = filter_value
            role_id = role.get_role_by_name(str(role_name), self.company_id)
        else:
            role_name = None
            role_id = None

        if name_query:
            query = name_query
            query_type = 'name'
        elif role_query:
            query = role_query
            query_type = 'role'
        elif device_query:
            query = device_query
            query_type = 'device'
        else:
            query = None
            query_type = None

        if team_name:
            team_id = team.get_team_by_name(str(team_name), self.company_id)
        else:
            team_id = None
            teams_list = team.get_teams(self.company_id,
                                        [c.TEAM_TABLE_NAME, c.TEAM_TABLE_ID])

        if team_id:
            result_list, total_count = user.get_users_for_team(
                team_name=team_name,
                team_id=team_id,
                role_name=role_name,
                role_id=role_id,
                offset=offset,
                count=count,
                sort_by=sort_by,
                query=query,
                query_type=query_type,
                sort_order=sort_order)

        elif teams_list:
            for _team in teams_list:
                _team['team_type'] = _team.get('name')
                _team['team_name'] = _team.get('name')
                _team['team_id'] = _team.get('id')
                del _team['name']
                del _team['id']
            result_list = teams_list
            total_count = len(result_list)

        else:
            result_list = None

        if result_list:
            print "\n total", total_count
            final_dict['data'] = result_list
            final_dict['count'] = total_count
            final_dict['pass'] = True
            final_dict['message'] = 'Success ...'
        else:
            final_dict['pass'] = True
            final_dict['data'] = []
            log.e(tag, 'No Team in Team Table')
            final_dict['message'] = 'Failed ...'
            final_dict['count'] = 0

        opJson = json.dumps(final_dict)
        self.request.write(opJson)
        tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #19
0
    def run(self):
        log = Logger('TeamGetHandlerThread')
        TAG = 'GET'
        page = self.request.get_argument('page', None)
        count = self.request.get_argument('count', None)
        sort_by = self.request.get_argument('sort_by', None)

        if self.data is None:
            log.e(TAG, 'No Team ID in Request')
            opJson = json.dumps({
                'pass':
                False,
                'message':
                'No team found corresponding to the team \
id ' + str(self.data)
            })
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)
        else:
            team = TeamDBHelper()
            teams = team.get_team(str(self.data), company_id=self.company_id)
            outer_dict = {}
            outer_array = []
            print teams
            if teams is None:
                log.e(
                    TAG, 'No team found corresponding to the team id ' +
                    str(self.data))
                opJson = json.dumps({
                    'pass':
                    False,
                    'message':
                    'No team found corresponding to the team \
id ' + str(self.data)
                })
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)

            else:
                self.team_name = teams.get(c.TEAM_TABLE_NAME)
                user = UserDBHelper()
                filter_dict = {c.USER_TABLE_TEAM: str(teams.get('id'))}
                user_list = user.get_users_with_pages(filter_dict, int(page),
                                                      int(count), str(sort_by))

                inner_array = []
                if user_list is not None:
                    for users in user_list:
                        inner_dict = {}
                        self.user_id = str(users[c.USER_TABLE_ID])
                        self.user_name = str(users[c.USER_TABLE_NAME])
                        self.user_email = str(users[c.USER_TABLE_EMAIL])
                        self.user_role_id = str(users[c.USER_TABLE_ROLE])

                        # Find out the role for user
                        role = RoleDBHelper()
                        roles = role.get_role(self.user_role_id,
                                              [c.ROLE_TABLE_NAME])
                        if roles is None:
                            self.user_role = None
                        else:
                            self.user_role = str(roles[c.ROLE_TABLE_NAME])

                        # Find out the device for user
                        device = DeviceDBHelper()
                        device_list = device.get_devices_of_user(self.user_id)
                        if device_list is None:
                            self.user_device = None
                        else:
                            devices = device_list[0]
                            self.user_device = str(
                                devices[c.DEVICE_TABLE_UDID])
                            self.user_device_os = str(
                                devices[c.DEVICE_TABLE_OS])
                            # Find out user violations
                            violation = ViolationsDBHelper()
                            violation_count = violation.get_violation_count(
                                str(devices.get('id')))

                        inner_dict = {
                            'user_id': self.user_id,
                            'user_name': self.user_name,
                            'user_role': self.user_role,
                            'user_team': self.team_name,
                            'user_device': self.user_device,
                            'user_violations': violation_count,
                            'user_device_os': self.user_device_os,
                            'user_email': self.user_email
                        }
                        inner_array.append(inner_dict)

            outer_dict['name'] = self.team_name
            outer_dict['users'] = inner_array
            outer_dict['team_id'] = self.data
            print '\nouter_dict'
            print outer_dict
            outer_array.append(outer_dict)

            self.final_dict['pass'] = True
            self.final_dict['teams'] = outer_array

            opJson = json.dumps(self.final_dict)
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #20
0
    def merge(self, device_id):
        user_helper = UserDBHelper()
        device_helper = DeviceDBHelper()
        roles_helper = RoleDBHelper()
        teams_helper = TeamDBHelper()
        company_helper = CompanyDBHelper()
        policy_helper = PolicyDBHelper()

        if device_id is not None:
            device_details = device_helper.get_device(device_id)
            if device_details is not None and 'user_id' in device_details:
                user_details = user_helper.get_user(
                    str(device_details['user_id']))
                team_id = user_details['team_id']
                role_id = user_details['role_id']
                company_id = user_details['company_id']

                team_details = teams_helper.get_team(str(team_id))
                role_details = roles_helper.get_role(str(role_id))
                company_details = company_helper.get_company(str(company_id))

                if user_details is not None and 'policy_id' in user_details:
                    policy_id_user = user_details['policy_id']
                else:
                    print 'No user details found'

                if team_details is not None and 'policy_id' in team_details:
                    policy_id_team = team_details['policy_id']
                else:
                    print 'no team details found'

                if role_details is not None and 'policy_id' in role_details:
                    policy_id_role = role_details['policy_id']
                else:
                    print 'no role details found'

                if (company_details is not None
                        and 'policy_id' in company_details):
                    policy_id_company = company_details['policy_id']
                else:
                    print 'no company details found'

                if policy_id_company is not None:
                    print 'company policy id=', policy_id_company
                    policy_company = policy_helper.get_policy(
                        str(policy_id_company))
                else:
                    policy_company = None
                if policy_id_role is not None:
                    print 'role policy id=', policy_id_role
                    policy_role = policy_helper.get_policy(str(policy_id_role))
                else:
                    policy_role = None
                if policy_id_team is not None:
                    print 'team policy id=', policy_id_team
                    policy_team = policy_helper.get_policy(str(policy_id_team))
                else:
                    policy_team = None
                if policy_id_user is not None:
                    print 'user policy id=', policy_id_user
                    policy_user = policy_helper.get_policy(str(policy_id_user))
                else:
                    policy_user = None

                return self.merge_policies(policy_company, policy_role,
                                           policy_team, policy_user)
            else:
                print 'Invalid device id'
Пример #21
0
    def perform(self):
        TAG = 'run'
        print 'In RuN'
        self.insert = True
        json_data = self.data
        print json_data['to']
        #Find out the category of the Device on the basis of 'to' field
        # Case 1 : Command is sent to the USER
        if str(json_data['to']) == 'user':
            to_id = str(json_data['id'])
            company_id = json_data.get('company_id')
            user = UserDBHelper()
            user_dict = user.get_user(str(to_id), company_id=company_id,
                     pluck=[c.USER_TABLE_NAME])
            if user_dict is not None:
                user_name = str(user_dict[c.USER_TABLE_NAME])
                message = "Command sent to " + user_name +\
                        "  having ID = " + str(json_data['id'])
                logs = LogsDBHelper()
                logs_id = logs.add_log(to_id, str(json_data['to']), 'info',
                        None, message, raw=None, company=str(company_id))
                if logs_id is None:
                    self.log.e(TAG, 'Not able to insert the logs')
                self.command_to_user(json_data)
            else:
                self.log.e(TAG, 'No details corresponding to user found')

        #Case 2: Command is sent to the Teams
        elif str(json_data['to']) == 'team':
            print 'sending to teams'
            team_id = str(json_data['id'])
            company_id = json_data.get('company_id')
            team = TeamDBHelper()
            team_dict = team.get_team(str(team_id), company_id=company_id,
                       pluck=[c.TEAM_TABLE_NAME])
            if team_dict is not None:
                team_name = str(team_dict[c.TEAM_TABLE_NAME])

                message = "Command sent to " + team_name +\
                                        "  having ID = " + str(json_data['id'])
                logs = LogsDBHelper()
                logs_id = logs.add_log(team_id, str(json_data['to']), 'info',
                        None, message, raw=None, company=str(company_id))
                if logs_id is None:
                    self.log.e(TAG, 'Not able to insert the logs')
                self.command_to_team(json_data)
            else:
                self.log.e(TAG, "No details corresponding to team_id found. ")

        #Case 3: Command is sent to the Role
        elif str(json_data['to']) == 'role':
            role_id = str(json_data['id'])
            company_id = json_data.get('company_id')
            role = RoleDBHelper()
            role_dict = role.get_role(str(role_id), company_id=company_id,
                            pluck=[c.ROLE_TABLE_NAME])
            if role_dict is not None:
                role_name = str(role_dict[c.ROLE_TABLE_NAME])

                message = "Command sent to " + role_name +\
                                        "  having ID = " + str(json_data['id'])
                logs = LogsDBHelper()
                logs_id = logs.add_log(role_id, str(json_data['to']), 'info',
                        None, message, raw=None, company=str(company_id))
                if logs_id is None:
                    self.log.e(TAG, 'Not able to insert the logs')
                self.command_to_role(json_data)
            else:
                self.log.e(TAG, 'No role corresponding to given role_id found')

        elif str(json_data['to']) == 'company':
            company_id = str(json_data['id'])
            company = CompanyDBHelper()
            company_dict = company.get_company(str(company_id))
            if company_dict is not None:
                company_name = str(company_dict[c.COMPANY_TABLE_NAME])

                message = "Command sent to " + company_name\
                                    +"  having ID = " + str(json_data['id'])
                logs = LogsDBHelper()
                logs_id = logs.add_log(company_id, str(json_data['to']),
                     'info', None, message, raw=None, company=company_id)
                if logs_id is None:
                    self.log.e(TAG, 'Not able to insert the logs')

                self.command_to_company(json_data)
            else:
                self.log.e(TAG, 'No data corresponding to team id given found')

        #Case 5: Some other parameter sent in 'to' field
        else:
            self.log.e(TAG, 'Somthing wrong with \'to\' field of POST data')
            ##Create the O/P JSON
            opJson = json.dumps({'pass':False, 'error':'Correct TO field'})
            self.log.e(TAG, str(opJson))
Пример #22
0
    def parse(self,
              excel_path,
              company,
              company_name=None,
              callback=None,
              user_added_callback=None):
        COMPANY = company
        company_name = company_name
        book = open_workbook(filename=excel_path)
        sheet = book.sheet_by_index(0)

        users = list()
        for row_index in range(sheet.nrows):
            user = dict()
            for col_index in range(sheet.ncols):
                cell = sheet.cell(row_index, col_index).value
                if col_index == 0:
                    user[C.USER_TABLE_EMAIL] = cell
                elif col_index == 1:
                    user[C.USER_TABLE_NAME] = cell
                elif col_index == 2:
                    user[C.USER_TABLE_TEAM] = cell
                elif col_index == 3:
                    user[C.USER_TABLE_ROLE] = cell
            users.append(user)
        roles_list = list()
        teams_list = list()
        for user in users:
            if C.USER_TABLE_ROLE in user:
                roles_list.append(user[C.USER_TABLE_ROLE])
            if C.USER_TABLE_TEAM in user:
                teams_list.append(user[C.USER_TABLE_TEAM])

        # get a set to get the unique elements.
        roles = dict()
        teams = dict()

        roles_helper = RoleDBHelper()
        teams_helper = TeamDBHelper()
        users_helper = UserDBHelper()
        enrollment_helper = EnrollmentDBHelper()

        for role_name in set(roles_list):
            role = dict()
            role[C.ROLE_TABLE_COMPANY] = COMPANY
            role[C.ROLE_TABLE_NAME] = role_name
            roles[role_name] = roles_helper.add_role(role)

        for team_name in set(teams_list):
            team = dict()
            team[C.TEAM_TABLE_COMPANY] = COMPANY
            team[C.TEAM_TABLE_NAME] = team_name
            team[C.TEAM_TABLE_DELETED] = False
            teams[team_name] = teams_helper.add_team(team)

        # Now we have id for all teams and roles... Insert the users now.
        for user in users:
            user_obj = dict()
            user_obj[C.USER_TABLE_COMPANY] = COMPANY
            user_obj[C.USER_TABLE_EMAIL] = user[C.USER_TABLE_EMAIL]
            user_obj[C.USER_TABLE_NAME] = user[C.USER_TABLE_NAME]
            user_obj[C.USER_TABLE_ROLE] = roles[user[C.USER_TABLE_ROLE]]
            user_obj[C.USER_TABLE_TEAM] = teams[user[C.USER_TABLE_TEAM]]
            user['id'] = users_helper.add_user_if_not_exists(user_obj)[0]
            if user_added_callback is not None:
                user_added_callback(user_obj)

        for user in users:
            enrollment = dict()
            enrollment[C.ENROLLMENT_TABLE_USER] = user['id']
            enrollment[C.ENROLLMENT_TABLE_PASSWORD] = generate_password()
            enrollment[C.ENROLLMENT_TABLE_IS_ENROLLED] = False
            user['passcode'] = enrollment[C.ENROLLMENT_TABLE_PASSWORD]
            print 'adding enrollment ', enrollment
            user['enrollment_id'] = enrollment_helper.add_enrollment(
                enrollment)
            user['company_name'] = company_name
        if callback is not None:
            callback(users)
        return users
Пример #23
0
    def run(self):
        # Return All the users in the User table
        log = Logger('UserDeleteHandlerThread')
        tag = 'DELETE'

        if self.data is None:
            log.e(tag, 'No user registered in table for this user_id')
            opJson = json.dumps({
                'pass':
                False,
                'message':
                'No user registered in table for this user_id'
            })
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        user = UserDBHelper()
        device = DeviceDBHelper()
        enrollment = EnrollmentDBHelper()
        print 'print data here \n ... \n ', self.data

        user_list = user.get_user(str(self.data), company_id=self.company_id)
        if user_list is None:
            log.e(tag, 'No user registered in table for this user_id')
            opJson = json.dumps({
                'pass':
                False,
                'message':
                'No user registered in table for this user_id'
            })
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        else:
            user_deleted = user.delete_user(str(user_list.get('id')))
            if not user_deleted:
                log.e(tag, 'Not able to delete from user table')
                opJson = json.dumps({
                    'pass':
                    False,
                    'message':
                    'Not able to delete from user table'
                })
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)
            else:

                devices = device.get_devices_of_user(str(self.data))
                if devices is not None and len(devices) > 0:
                    for each_device in devices:
                        device_id = each_device.get('id')
                        device.delete_device(str(device_id))
                        enrollment_list = enrollment.get_enrollments(
                            {'device_id': device_id})
                        for enroll in enrollment_list:
                            enrollment_id = enroll.get('id')
                            enrollment.update_enrollment(
                                str(enrollment_id), {
                                    'device_id': "null",
                                    'is_enrolled': False
                                })
                log.i(tag, 'User delelted')
                opJson = json.dumps({
                    'pass': True,
                    'message': 'User Successfully deleted'
                })
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #24
0
def admin_mailer(device_id, violation_id, *args, **kwargs):

    TAG = 'admin mailer'
    base = DBHelper()
    cur = base.cursor
    log = Logger('AdminMailer')

    device = DeviceDBHelper()
    violation = ViolationsDBHelper()
    user = UserDBHelper()
    company = CompanyDBHelper()
    email_list = []

    device_os_mapper = {'ios': 'iOS', 'samsung': 'android'}
    ### Device information ###
    device_info = device.get_device(str(device_id), status=True)

    if device_info:
        device_os = device_info.get('os')
        device_os = device_os_mapper.get(device_os)
        device_os_version = device_info.get('os_version')
        user_info = user.get_user(str(device_info.get('user_id')))

    else:
        device_os = None
        device_os_version = None
        user_info = None

    ### User information ###
    if user_info:
        username = user_info.get('name')
        company_id = user_info.get('company_id')
        company_info = company.get_company(str(company_id))
    else:
        username = None
        company_info = None
        company_id = None

    ### Violation information ###
    violation_info = violation.get_violation(str(violation_id))

    if violation_info:
        violation_time = violation_info.get('timestamp')
        violation_time = violation_time.strftime('%d %b, %Y at %H:%M:%S')
    else:
        violation_time = None

    ### Company information ###

    if company_info:
        company_name = company_info.get('name')
        ### Query to get admin information for the particulat company ###
        try:
            cur.execute("""SELECT * FROM admin_profile
            WHERE company_id = {0}""".format(company_id))

        except Exception as err:
            log.e(TAG, 'Exception : ' + repr(err))

        if cur.rowcount > 0:
            rows = cur.fetchall()
            for row in rows:
                # ipdb.set_trace()
                email_list.append(row[1])

        else:
            log.i(
                TAG,
                """No admin user found for the violated device with company
id : {0}""".format(company_id))
            print "Query over admin went wrong"
    else:
        company_name = None

    if len(email_list) > 0 and all(
            x is not None
            for x in (username, company_name, violation_time, device_os)):
        message = loader.load('violation_mail.html').generate(
            username=username,
            company_name=company_name,
            violation_time=violation_time,
            device_os=device_os,
            device_os_version=device_os_version)

        try:
            ses_conn.send_email('*****@*****.**',
                                'User MDM Violations Notification',
                                message,
                                email_list,
                                format='html')
        except Exception as err:
            log.e(TAG, "Error in sending mail from ses side.")

    else:
        log.i(
            TAG, """No admin found for the violated device with company id :
{0}""".format(company_id))
Пример #25
0
    def perform(self):
        TAG = 'run'
        print 'In RuN'
        self.insert = True
        json_data = self.data
        print json_data['to']
        # Find out the category of the Device on the basis of 'to' field
        # Case 1 : Command is sent to the USER
        if str(json_data['to']) == 'user':
            to_id = str(json_data['id'])
            company_id = json_data.get('company_id')
            user = UserDBHelper()
            user_dict = user.get_user(str(to_id), company_id=company_id,
                                      pluck=[c.USER_TABLE_NAME])
            if user_dict is not None:
                user_name = str(user_dict[c.USER_TABLE_NAME])
                message = "Command sent to " + user_name +\
                    "  having ID = " + str(json_data['id'])
                logs = LogsDBHelper()
                logs_id = logs.add_log(to_id,
                                       str(json_data['to']),
                                       'info',
                                       None,
                                       message,
                                       raw=None,
                                       company=str(company_id))
                if logs_id is None:
                    self.log.e(TAG, 'Not able to insert the logs')
                self.command_to_user(json_data)
            else:
                self.log.e(TAG, 'No details corresponding to user found')

        # Case 2: Command is sent to the Teams
        elif str(json_data['to']) == 'team':
            print 'sending to teams'
            team_id = str(json_data['id'])
            company_id = json_data.get('company_id')
            team = TeamDBHelper()
            team_dict = team.get_team(str(team_id), company_id=company_id,
                                      pluck=[c.TEAM_TABLE_NAME])
            if team_dict is not None:
                team_name = str(team_dict[c.TEAM_TABLE_NAME])

                message = "Command sent to " + team_name +\
                    "  having ID = " + str(json_data['id'])
                logs = LogsDBHelper()
                logs_id = logs.add_log(team_id,
                                       str(json_data['to']),
                                       'info',
                                       None,
                                       message,
                                       raw=None,
                                       company=str(company_id))
                if logs_id is None:
                    self.log.e(TAG, 'Not able to insert the logs')
                self.command_to_team(json_data)
            else:
                self.log.e(TAG, "No details corresponding to team_id found. ")

        # Case 3: Command is sent to the Role
        elif str(json_data['to']) == 'role':
            role_id = str(json_data['id'])
            company_id = json_data.get('company_id')
            role = RoleDBHelper()
            role_dict = role.get_role(str(role_id), company_id=company_id,
                                      pluck=[c.ROLE_TABLE_NAME])
            if role_dict is not None:
                role_name = str(role_dict[c.ROLE_TABLE_NAME])

                message = "Command sent to " + role_name +\
                    "  having ID = " + str(json_data['id'])
                logs = LogsDBHelper()
                logs_id = logs.add_log(role_id,
                                       str(json_data['to']),
                                       'info',
                                       None,
                                       message,
                                       raw=None,
                                       company=str(company_id))
                if logs_id is None:
                    self.log.e(TAG, 'Not able to insert the logs')
                self.command_to_role(json_data)
            else:
                self.log.e(TAG, 'No role corresponding to given role_id found')

        elif str(json_data['to']) == 'company':
            company_id = str(json_data['id'])
            company = CompanyDBHelper()
            company_dict = company.get_company(str(company_id))
            if company_dict is not None:
                company_name = str(company_dict[c.COMPANY_TABLE_NAME])

                message = "Command sent to " + company_name\
                    + "  having ID = " + str(json_data['id'])
                logs = LogsDBHelper()
                logs_id = logs.add_log(company_id,
                                       str(json_data['to']),
                                       'info',
                                       None,
                                       message,
                                       raw=None,
                                       company=company_id)
                if logs_id is None:
                    self.log.e(TAG, 'Not able to insert the logs')

                self.command_to_company(json_data)
            else:
                self.log.e(TAG, 'No data corresponding to team id given found')

        # Case 5: Some other parameter sent in 'to' field
        else:
            self.log.e(TAG, 'Somthing wrong with \'to\' field of POST data')
            # Create the O/P JSON
            opJson = json.dumps({'pass': False, 'error': 'Correct TO field'})
            self.log.e(TAG, str(opJson))
Пример #26
0
                self.log.e(TAG, 'Exception: ' + repr(err))
                return None

            if self.cursor.rowcount > 0:
                rows = self.cursor.fetchall()
                return_array = []
                print rows
                for row in rows:
                    temp_dict = dict(zip(zip_list, row))

                    return_array.append(temp_dict)
                return return_array
            else:
                self.log.e(TAG, 'Not able to perform select operation on \
Enrollment table')
                return None


if __name__ == "__main__":
    email = "'*****@*****.**'"
    password = '******'

    from db.helpers.user import UserDBHelper
    user = UserDBHelper()
    f = {C.USER_TABLE_EMAIL: email}
    print user.get_users(f)
#     enrollment = EnrollmentDBHelper()
#     filter_dict=dict()
#     filter_dict[C.ENROLLMENT_TABLE_USER]='5'
#     print enrollment.get_enrollments(filter_dict)
Пример #27
0
    def run(self):
        # Return All the users in the User table
        log = Logger('RolesGetHandler')
        tag = 'run'

        final_dict = {}
        role = RoleDBHelper()
        team = TeamDBHelper()
        user = UserDBHelper()

        role_name = self.request.get_argument('role', None)
        offset = self.request.get_argument('offset', None)
        count = self.request.get_argument('count', None)
        name_query = self.request.get_argument('name', None)
        team_query = self.request.get_argument('team', None)
        device_query = self.request.get_argument('device_id', None)
        sort_by = self.request.get_argument(
            'sort_by',
            True)  # Intentionally done
        sort_order = self.request.get_argument('sort', None)
        filter_key = str(self.request.get_argument('filter_key', None))
        filter_value = self.request.get_argument('filter_value', None)

        print role_name
        print "\nUI sorting order \n", sort_order
        # Find all the roles in the Roles Table
#        outer_array = []

        if name_query:
            query = name_query
            query_type = 'name'
        elif team_query:
            query = team_query
            query_type = 'team'
        elif device_query:
            query = device_query
            query_type = 'device'
        else:
            query = None
            query_type = None

        if filter_key == 'team':
            team_name = filter_value
            team_id = team.get_team_by_name(str(team_name), self.company_id)
        else:
            team_name = None
            team_id = None

        print "printing team id here ..", team_id
        if role_name:
            role_id = role.get_role_by_name(str(role_name), self.company_id)
        else:
            roles_list = role.get_roles(self.company_id, [c.ROLE_TABLE_NAME,
                                                          c.ROLE_TABLE_ID])
            role_id = None

        if role_id:
            result_list, total_count = user.get_users_for_role(
                role_name=role_name, role_id=role_id,
                team_name=team_name, team_id=team_id, offset=offset,
                count=count, sort_by=sort_by, query=query,
                query_type=query_type, sort_order=sort_order)

        elif roles_list:
            for _role in roles_list:
                _role['role_type'] = _role.get('name')
                _role['role_name'] = _role.get('name')
                _role['role_id'] = _role.get('id')
                del _role['name']
                del _role['id']
            result_list = roles_list
            total_count = len(result_list)
        else:
            result_list = None

        if result_list:
            final_dict['data'] = result_list
            final_dict['count'] = total_count
            final_dict['pass'] = True
            final_dict['message'] = 'Seems like things are working ...'
        else:
            final_dict['data'] = []
            final_dict['pass'] = True
            log.e(tag, 'No Role in Role Table')
            final_dict['message'] = 'Seems like things are not working ...'
            final_dict['count'] = 0

        opJson = json.dumps(final_dict)
        self.request.write(opJson)
        tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #28
0
def admin_mailer(device_id, violation_id, *args, **kwargs):

    TAG = 'admin mailer'
    base = DBHelper()
    cur = base.cursor
    log = Logger('AdminMailer')

    device = DeviceDBHelper()
    violation = ViolationsDBHelper()
    user = UserDBHelper()
    company = CompanyDBHelper()
    email_list = []

    device_os_mapper = {'ios': 'iOS', 'samsung': 'android'}
    ### Device information ###
    device_info = device.get_device(str(device_id), status=True)

    if device_info:
        device_os = device_info.get('os')
        device_os = device_os_mapper.get(device_os)
        device_os_version = device_info.get('os_version')
        user_info = user.get_user(str(device_info.get('user_id')))

    else:
        device_os = None
        device_os_version = None
        user_info = None

    ### User information ###
    if user_info:
        username = user_info.get('name')
        company_id = user_info.get('company_id')
        company_info = company.get_company(str(company_id))
    else:
        username = None
        company_info = None
        company_id = None

    ### Violation information ###
    violation_info = violation.get_violation(str(violation_id))

    if violation_info:
        violation_time = violation_info.get('timestamp')
        violation_time = violation_time.strftime('%d %b, %Y at %H:%M:%S')
    else:
        violation_time = None

    ### Company information ###

    if company_info:
        company_name = company_info.get('name')
        ### Query to get admin information for the particulat company ###
        try:
            cur.execute("""SELECT * FROM admin_profile
            WHERE company_id = {0}""".format(company_id))

        except Exception as err:
            log.e(TAG, 'Exception : ' + repr(err))

        if cur.rowcount > 0:
            rows = cur.fetchall()
            for row in rows:
                # ipdb.set_trace()
                email_list.append(row[1])

        else:
            log.i(
                TAG,
                """No admin user found for the violated device with company
id : {0}""".format(company_id))
            print "Query over admin went wrong"
    else:
        company_name = None

    if len(email_list) > 0 and all(
        x is not None for x in (
            username,
            company_name,
            violation_time,
            device_os)):
        message = loader.load('violation_mail.html').generate(
            username=username, company_name=company_name,
            violation_time=violation_time, device_os=device_os,
            device_os_version=device_os_version)

        try:
            ses_conn.send_email('*****@*****.**',
                                'User MDM Violations Notification',
                                message, email_list, format='html')
        except Exception as err:
            log.e(TAG, "Error in sending mail from ses side.")

    else:
        log.i(
            TAG,
            """No admin found for the violated device with company id :
{0}""".format(company_id))
Пример #29
0
    def run(self):
        log = Logger('UserPolicyPutHandlerThread')
        TAG = 'run'
        # Flag to track status of policy
        status = False

        if self.data and self.company_id:
            # do stuff here
            user = UserDBHelper()
            url_data = self.data.split('/')
            request_data = json.loads(self.request.request.body)
            user_id = url_data[0]
            plugin_name = url_data[1]
            command_handler_json = {'to': 'user', 'id': str(user_id),
                                    'company_id': self.company_id}
            user_detail = user.get_user(str(user_id),
                                        company_id=self.company_id)

            if user_detail:

                user_policy_id = user_detail.get('policy_id')

                if plugin_name != 'actions':
                    status = put_individual_plugin(user_policy_id, plugin_name,
                                                   request_data)
                else:
                    status = True
                    command_handler_json['action'] = request_data.get('action')
                    command_handler_json[
                        'passcode'] = request_data.get('lock_key')
                if status:
                    print "\nprinting the json output will be send to command\
                          handler\n", command_handler_json
                    create_command_handler_task.delay(command_handler_json)
                    request_data['_id'] = user_policy_id
                    request_data['object_type'] = 'User'
                    request_data['name'] = user_detail[c.USER_TABLE_NAME]
                    opJson = json.dumps(
                        {'data': request_data, 'pass': True,
                            'count': 1, 'message': 'Everything fine'})
                    self.request.write(opJson)
                    tornado.ioloop.IOLoop.instance().add_callback(
                        self.callback)

                else:
                    opJson = json.dumps(
                        {'pass': False, 'count': 0,
                            'message': 'Update operation at policy table \
failed'})
                    self.request.write(opJson)
                    tornado.ioloop.IOLoop.instance().add_callback(
                        self.callback)
            else:
                log.e(TAG, 'No valid user id is sent in request')
                opJson = json.dumps(
                    {'pass': False,
                        'message': 'No valid user id is sent in request'})
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        else:
            log.e(TAG, 'UnAuthorized Access for user policy ')
            self.request.set_status(401)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #30
0
    def run(self):
        # Find all the POST arguments required

        company_id = self.company_id
        # company_name = str(self.company_name)

        loader = Loader("/opt/toppatch/mv/media/app/")

        # thread1 = {}

        log = Logger('EnrollDevice')
        tag = 'POST'
        request_body = json.loads(self.request.request.body)

        try:
            self.user_email = str(request_body.get('user_email', None))
            self.user_name = str(request_body.get('user_name', None))
            self.team_id = str(request_body.get('team_id', None))
            self.role_id = str(request_body.get('role_id', None))
            self.company_id = str(company_id)
        except:
            self.request.write('Some arguments are not supplied')
            opJson = json.dumps({
                'pass': False,
                'user_name': None,
                'link': None,
                'password': None,
                'error': 'Some argument not supplied'
            })
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)
            log.e(tag,
                  'Some arguments not sent in POST request for enrollment')
            return

        if self.user_email is None or self.user_name is None or\
                self.company_id is None:
            log.e(tag, 'Email or user_name is NULL')
            opJson = json.dumps({
                'pass':
                False,
                'user_name':
                None,
                'link':
                None,
                'password':
                None,
                'error':
                'user_name or Email or Company \
is None'
            })
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        if self.user_name == '' or self.user_email == '':
            log.e(tag, 'Email or user_name is empty')
            opJson = json.dumps({
                'pass':
                False,
                'user_name':
                None,
                'link':
                None,
                'password':
                None,
                'error':
                'email or user_name or company \
is empty'
            })
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        password = generate_password()

        user = UserDBHelper()
        user_dict = {
            c.USER_TABLE_NAME: str(self.user_name),
            c.USER_TABLE_TEAM: str(self.team_id),
            c.USER_TABLE_ROLE: str(self.role_id),
            c.USER_TABLE_EMAIL: str(self.user_email),
            c.USER_TABLE_COMPANY: str(self.company_id)
        }
        user_id, duplicate = user.add_user_if_not_exists(user_dict)

        if duplicate:
            log.e(tag, 'No id from primary key ')
            opJson = json.dumps({
                'pass': False,
                'user_name': self.user_name,
                'link': None,
                'password': None,
                'duplicate': True,
                'error': 'DB has problem'
            })
            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        else:
            enrollment_dict = {
                c.ENROLLMENT_TABLE_USER: user_id,
                c.ENROLLMENT_TABLE_PASSWORD: password,
                c.ENROLLMENT_TABLE_IS_ENROLLED: False
            }
            enrollment = EnrollmentDBHelper()
            enrollment_id = str(enrollment.add_enrollment(enrollment_dict))

            enrollment_dict = enrollment.get_enrollment(enrollment_id)

            if enrollment_id is not None:
                self.link += enrollment_id

                try:
                    message = loader.load('user_enroll_mail.html').generate(
                        company_name=self.company_name,
                        user_passwd=password,
                        activation_link=self.link)

                    ses_conn.send_email('*****@*****.**',
                                        'MDM Enrollment verification',
                                        message, [self.user_email],
                                        format='html')
                    print 'No error found'
                    log.i(tag, 'Enrollment request successful')
                    opJson = json.dumps({
                        'pass': True,
                        'user_name': self.user_name,
                        'link': 'link',
                        'password': '******',
                        'error': None
                    })

                except Exception as err:
                    print 'Mail Sending error exception is :', repr(err)

                    log.e(tag, 'Incorrect EmailID sent')
                    opJson = json.dumps({
                        'pass': False,
                        'user_name': self.user_name,
                        'link': None,
                        'password': None,
                        'error': 'Wrong emailID'
                    })

            else:
                log.e(
                    tag,
                    'Entry is not done in Enrollment table for UserID = ' +
                    str(user_id))
                opJson = json.dumps({
                    'pass': False,
                    'user_name': self.user_name,
                    'link': None,
                    'password': None,
                    'error': 'Wrong emailID'
                })

            self.request.write(opJson)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #31
0
    def run(self):
        log = Logger('UserPolicyGetHandlerThread')
        TAG = 'run'
        if self.data and self.company_id:
            # do stuff here
            user = UserDBHelper()
            url_data = self.data.split('/')
            user_id = url_data[0]
            plugin_name = url_data[1]
            user_detail = user.get_user(str(user_id),
                                        company_id=self.company_id)

            if user_detail:
                user_policy_id = user_detail.get('policy_id')

                if plugin_name == 'actions':
                    action_command = True
                else:
                    action_command = False

                print '\nplugin name \n', plugin_name
                if user_policy_id and not action_command:
                    plugin_data = get_individual_plugin(user_policy_id,
                                                        plugin_name)
                elif not action_command:
                    user_policy_id, plugin_data = setup_default_policy()
                    if user_policy_id:
                        user.update_user_policy(str(user_id),
                                                str(user_policy_id))
                        plugin_data = plugin_data.get(plugin_name)
                        print 'printing plugin data here ... \n', plugin_data
                    else:
                        log.e(TAG, 'User Policy ID setup failed.')
                        opJson = json.dumps(
                            {'pass': False,
                                'message': 'User policy creation failed.'})

                        self.request.write(opJson)
                        tornado.ioloop.IOLoop.instance().add_callback(
                            self.callback)
                else:
                    plugin_data = {}

                if isinstance(plugin_data, str):
                    plugin_data = json.loads(plugin_data)
                plugin_data['_id'] = user_policy_id
                plugin_data['object_type'] = 'User'
                plugin_data['name'] = user_detail.get(c.USER_TABLE_NAME)
                opJson = json.dumps({'count': 1, 'message': 'Successfull',
                                     'pass': True, 'data': plugin_data})

                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)

            else:
                log.e(TAG, 'No Valid User id is sent in request')
                opJson = json.dumps(
                    {'pass': False, 'count': 0,
                        'message': 'No User id is sent in request'})
                self.request.write(opJson)
                tornado.ioloop.IOLoop.instance().add_callback(self.callback)

        else:
            log.e(TAG, 'UnAuthorized Access for user policy ')
            self.request.set_status(401)
            tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #32
0
    def run(self):
        # Return All the users in the User table
        log = Logger('TeamsGetHandlerThread')
        tag = 'run'
        print 'In TeamsGetHandlerThread'
        final_dict = {}

        role = RoleDBHelper()
        team = TeamDBHelper()
        user = UserDBHelper()

        team_name = self.request.get_argument('team', None)
        offset = self.request.get_argument('offset', None)
        count = self.request.get_argument('count', None)
        sort_by = self.request.get_argument(
            'sort_by',
            True)  # Intentionally done
        name_query = self.request.get_argument('name', None)
        role_query = self.request.get_argument('role', None)
        device_query = self.request.get_argument('device_id', None)
        sort_order = self.request.get_argument('sort', None)
        filter_key = str(self.request.get_argument('filter_key', None))
        filter_value = self.request.get_argument('filter_value', None)

        # Find all the roles in the Roles Table

        if filter_key == 'role':
            role_name = filter_value
            role_id = role.get_role_by_name(str(role_name), self.company_id)
        else:
            role_name = None
            role_id = None

        if name_query:
            query = name_query
            query_type = 'name'
        elif role_query:
            query = role_query
            query_type = 'role'
        elif device_query:
            query = device_query
            query_type = 'device'
        else:
            query = None
            query_type = None

        if team_name:
            team_id = team.get_team_by_name(str(team_name), self.company_id)
        else:
            team_id = None
            teams_list = team.get_teams(self.company_id, [c.TEAM_TABLE_NAME,
                                                          c.TEAM_TABLE_ID])

        if team_id:
            result_list, total_count = user.get_users_for_team(
                team_name=team_name, team_id=team_id,
                role_name=role_name, role_id=role_id,
                offset=offset, count=count, sort_by=sort_by,
                query=query, query_type=query_type,
                sort_order=sort_order)

        elif teams_list:
            for _team in teams_list:
                _team['team_type'] = _team.get('name')
                _team['team_name'] = _team.get('name')
                _team['team_id'] = _team.get('id')
                del _team['name']
                del _team['id']
            result_list = teams_list
            total_count = len(result_list)

        else:
            result_list = None

        if result_list:
            print "\n total", total_count
            final_dict['data'] = result_list
            final_dict['count'] = total_count
            final_dict['pass'] = True
            final_dict['message'] = 'Success ...'
        else:
            final_dict['pass'] = True
            final_dict['data'] = []
            log.e(tag, 'No Team in Team Table')
            final_dict['message'] = 'Failed ...'
            final_dict['count'] = 0

        opJson = json.dumps(final_dict)
        self.request.write(opJson)
        tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #33
0
def admin_mailer(device_id, violation_id, *args, **kwargs):

    TAG='admin mailer'
    base = DBHelper()
    cur = base.cursor
    log = Logger('AdminMailer')

    device = DeviceDBHelper()
    violation = ViolationsDBHelper()
    user = UserDBHelper()
    company = CompanyDBHelper()
    email_list = []

    device_os_mapper = {'ios': 'iOS', 'samsung': 'android'}
    ### Device information ###
    device_info = device.get_device(str(device_id), status=True)

    if device_info:
        device_os = device_info.get('os')
        device_os = device_os_mapper.get(device_os)
        device_os_version = device_info.get('os_version')
        user_info = user.get_user(str(device_info.get('user_id')))

    else:
        device_os = None
        device_os_version = None
        user_info = None



    ### User information ###
    if user_info:
        username = user_info.get('name')
        company_id = user_info.get('company_id')
        company_info = company.get_company(str(company_id))
    else:
        username = None
        company_info = None
        company_id = None

    ### Violation information ###
    violation_info = violation.get_violation(str(violation_id))

    if violation_info:
        violation_time = violation_info.get('timestamp')
        violation_time = violation_time.strftime('%d %b, %Y at %H:%M:%S')
    else:
        violation_time = None

    ### Company information ###

    if company_info:
        company_name = company_info.get('name')
        ### Query to get admin information for the particulat company ###
        try:
            cur.execute("""SELECT * FROM admin_profile
            WHERE company_id = {0}""".format(company_id))

        except Exception, err:
            log.e(TAG, 'Exception : ' + repr(err))

        if cur.rowcount > 0:
            rows = cur.fetchall()
            for row in rows:
                #ipdb.set_trace()
                email_list.append(row[1])

        else:
            log.i(TAG, """No admin user found for the violated device with company id : {0}""".format(company_id))
            print "Query over admin went wrong"
Пример #34
0
    def run(self):
        #Return All the users in the User table
        log = Logger('RolesGetHandler')
        tag = 'run'

        final_dict = {}
        role = RoleDBHelper()
        team = TeamDBHelper()
        user = UserDBHelper()

        role_name = self.request.get_argument('role', None)
        offset = self.request.get_argument('offset', None)
        count = self.request.get_argument('count', None)
        name_query =  self.request.get_argument('name', None)
        team_query = self.request.get_argument('team', None)
        device_query = self.request.get_argument('device_id', None)
        sort_by = self.request.get_argument('sort_by', True)#Intentionally done
        sort_order = self.request.get_argument('sort', None)
        filter_key = str(self.request.get_argument('filter_key', None))
        filter_value = self.request.get_argument('filter_value', None)

        print role_name
        print "\nUI sorting order \n", sort_order
        ## Find all the roles in the Roles Table
#        outer_array = []

        if name_query:
            query  = name_query
            query_type = 'name'
        elif team_query:
            query = team_query
            query_type = 'team'
        elif device_query:
            query = device_query
            query_type = 'device'
        else:
            query = None
            query_type = None

        if filter_key == 'team':
            team_name = filter_value
            team_id = team.get_team_by_name(str(team_name), self.company_id)
        else:
            team_name = None
            team_id=None

        print "printing team id here ..", team_id
        if role_name:
            role_id = role.get_role_by_name(str(role_name), self.company_id)
        else:
            roles_list = role.get_roles(self.company_id, [c.ROLE_TABLE_NAME,
                                                        c.ROLE_TABLE_ID])
            role_id = None

        if role_id:
            result_list, total_count = user.get_users_for_role(
                        role_name=role_name, role_id=role_id,
                        team_name=team_name, team_id=team_id, offset=offset,
                        count=count, sort_by=sort_by, query=query,
                        query_type=query_type, sort_order=sort_order)

        elif roles_list:
            for _role in roles_list:
                _role['role_type'] = _role.get('name')
                _role['role_name'] = _role.get('name')
                _role['role_id'] = _role.get('id')
                del _role['name']
                del _role['id']
            result_list = roles_list
            total_count = len(result_list)
        else:
            result_list = None

        if result_list:
            final_dict['data'] = result_list
            final_dict['count'] = total_count
            final_dict['pass'] = True
            final_dict['message'] = 'Seems like things are working ...'
        else:
            final_dict['data'] = []
            final_dict['pass'] = True
            log.e(tag,'No Role in Role Table')
            final_dict['message'] = 'Seems like things are not working ...'
            final_dict['count'] = 0


        opJson = json.dumps(final_dict)
        self.request.write(opJson)
        tornado.ioloop.IOLoop.instance().add_callback(self.callback)
Пример #35
0
    def run(self):
        TAG = 'run'

        print ' In IOSCommandPerformer\'s PUT'
        command = IOSCommandDBHelper()
        invoke_flag = False
        arguments = cgi.parse_qsl(self.request.request.body)
        intermediate = arguments[0]
        currentxml = intermediate[1]
        final = currentxml[25:-1]  # Original Line
# final = currentxml[20:]  ### For testing only
        # print '\n\n\n here is final xml \n\n', final
        # temp Parsing
        # tree = ET.ElementTree(ET.fromstring(final))  ##Original Line
# tree = ET.parse('temp.xml')   ### For testing only
        initial_list = []
        initial_dict = {}

        check_out_requested = False
        send_command = False
        store_result = False
        store_error = False
        registered = True
        special_result = False
        acknowledged = False
        update_token = False

        object_root = objectify.fromstring(final)

        begin = object_root.dict

        for child in begin.iterchildren():
            initial_list.append(child.text)

        initial_dict = dict(zip(initial_list[::2], initial_list[1::2]))
        # print '\n\n print here initial dict\n', initial_dict

        if 'UDID' in initial_dict:
            udid = initial_dict.get('UDID')
            device = DeviceDBHelper()
            registered = device.is_udid_registered(str(udid))

        if 'Status' in initial_dict:
            status = initial_dict.get('Status')
            if status == 'Idle':
                send_command = True
            elif status == 'Acknowledged':
                acknowledged = True
            elif status == 'Error':
                store_error = True
                uuid = initial_dict.get('CommandUUID')

        if 'MessageType' in initial_dict:
            message = initial_dict.get('MessageType')
            if message == 'TokenUpdate':
                update_token = True
            elif message == 'CheckOut':
                check_out_requested = True
        push_magic = 'push_magic'
        token = 'Token'
        unlock_token = 'UnlockToken'

        if registered is False:
            reply = """

                    """
            self.request.set_status(401)
            self.request.write(reply)
            ioloop.IOLoop.instance().add_callback(self.callback)

        else:
            device_id = str(device.get_device_with_udid(udid)[0]['id'])
            print 'reached here '
        if acknowledged:
            if 'CommandUUID' in initial_dict:
                uuid = initial_dict.get('CommandUUID')
                # special uuid for device information
                if uuid == '55555555-5555-5555-5555-555555555555' + device_id:
                    info_list = [
                        el.text if el.text else el.tag for el in object_root.iterdescendants()]
                    info_list.pop(0)
                    final = dict(zip(info_list[::2], info_list[1::2]))
                    store_result = True
                    special_result = True
                # special uuid for installed application list
                elif uuid == (
                        '77777777-7777-7777-7777-777777777777' + device_id):
                    begin = object_root.dict.array
                    apps_list = []
                    for outer_child in begin.iterchildren():
                        temp_list = []
                        for inner_child in outer_child.iterchildren():
                            temp_list.append(inner_child.text)
                        apps_list.append(dict(zip(temp_list[::2],
                                                  temp_list[1::2])))
                    final = apps_list
                    store_result = True
                    invoke_flag = True
                else:
                    store_result = True

        if send_command:
            if udid is None:
                self.log.e(TAG, 'No UDID is supplied from the device')
            else:

                command_list = command.get_not_executed(str(device_id))
                if command_list is None or len(command_list) == 0:
                    self.log.e(TAG, 'No command to execute fot the device \
                               having ID = ' + str(device_id))
                    reply = " "
                    print 'outer write'
                    self.request.set_status(500)
                    self.request.write(reply)
                    ioloop.IOLoop.instance().add_callback(self.callback)

                else:

                    device_details = DeviceDetailsDBHelper()
                    violate_device = False
                    special_uuid = (
                        '2929292929-29292929-292929-292929-292929' +
                        str(device_id))

                    commands = command_list[0]
                    action = str(commands[c.COMMAND_TABLE_ACTION])
                    command_attributes = commands[c.COMMAND_TABLE_ATTRIBUTE]
                    command_uuid = str(commands[c.COMMAND_TABLE_COMMAND_UUID])

                    if command_uuid == special_uuid:
                        violate_device = True

                    if action is not None and not violate_device:
                        command_xml_thread = IOSCommandCreatorThread(
                            action,
                            command_attributes,
                            command_uuid,
                            device_id)
                        command_xml_thread.start()
                        command_xml_thread.join()
                        final_output = command_xml_thread.command_profile
                        if final_output is not None:
                            self.request.write(final_output)
                        ioloop.IOLoop.instance().add_callback(self.callback)
                        # send polling signal to device for next command
                        device_details_list = (
                            device_details.get_device_details(device_id))

                        json_extras = device_details_list.get(
                            c.DEVICE_DETAILS_TABLE_EXTRAS)

                        self.push_magic = str(json_extras.get('push_magic'))
                        self.device_token = str(json_extras.get('token'))
                        wrapper = APNSNotificationWrapper(
                            '/opt/toppatch/assets/ios/PushCert.pem', False)
                        message = APNSNotification()
                        message.appendProperty(
                            APNSProperty(
                                "mdm",
                                self.push_magic))
                        message.tokenBase64(str(self.device_token))
                        wrapper.append(message)
                        wrapper.notify()
                        print 'Payload Sent'

                    elif violate_device:
                        ### Wiping device to Factory Reset ###
                        command_xml_thread = IOSCommandCreatorThread(
                            action,
                            command_attributes,
                            command_uuid,
                            device_id)
                        command_xml_thread.start()
                        command_xml_thread.join()
                        final_output = command_xml_thread.command_profile
                        if final_output is not None:
                            self.request.write(final_output)
                        ioloop.IOLoop.instance().add_callback(self.callback)

                        violation = ViolationsDBHelper()
                        enrollment = EnrollmentDBHelper()
                        violation_id = violation.add_violation(str(device_id))

                        if violation_id is None:
                            self.log.e(TAG, 'Not able to insert in Violation \
Table. DeviceID = ' + str(device_id))
                        else:
                            device.delete_device(device_id)
                            enrollment_list = enrollment.get_enrollments({
                                'device_id': device_id})
                            for enroll in enrollment_list:
                                enrollment_id = enroll.get('id')
                                enrollment.update_enrollment(
                                    str(enrollment_id), {
                                        'device_id': "null",
                                        'is_enrolled': False})
                            self.log.i(
                                TAG,
                                'Violation added for device id = ' +
                                str(device_id) +
                                'due to remote wipe command')
                    else:
                        reply = " "
                        print 'outer write'
                        self.request.set_status(500)
                        self.request.write(reply)
                        ioloop.IOLoop.instance().add_callback(self.callback)

        elif check_out_requested:
            violation = ViolationsDBHelper()
            device = DeviceDBHelper()

            devices = device.get_device_with_udid(udid)
            if devices is None:
                self.log.e(TAG, 'No User ID Associated with Device UDID = '
                           + udid)
            else:
                device_id = str(devices[0][c.DEVICE_TABLE_ID])
                violation_id = violation.add_violation(device_id)
                if violation_id is None:
                    self.log.e(TAG, 'Not able to insert in Violation Table.\
                               DeviceID = ' + str(device_id))
                else:
                    self.log.i(TAG, 'Violation added for device id = ' +
                               str(device_id))

            reply = """

                    """
            self.request.set_status(401)
            self.request.write(reply)
            ioloop.IOLoop.instance().add_callback(self.callback)

        elif store_result or store_error:
            if special_result:
                is_updated = device.update_device(
                    str(device_id), {
                        c.DEVICE_TABLE_OS_VERSION: str(
                            final.get('OSVersion'))})
                if not is_updated:
                    self.log.e(TAG, 'Not able to set the version of the device\
                    udid = ' + str(udid) + " Device id = " + str(device_id))
                else:
                    self.log.i(TAG, 'Version Set for the device udid = '
                               + str(udid) + " Device id = " + str(device_id))

            if store_error:
                self.log.e(TAG, 'Error in Response for uuid = ' +
                           str(uuid) + ' device_id = ' + str(device_id))
            # print '\n\nfinal dict to be stored as json is \n\n', final
            result_updated = command.update_result(str(uuid),
                                                   str(device_id), final)
            reply = """
                <?xml version="1.0" encoding="UTF-8"?>
                <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
                "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                                <plist version="1.0">
                                <dict>
                                </dict>
                                </plist>
            """
            self.request.write(reply)
            ioloop.IOLoop.instance().add_callback(self.callback)
            if not result_updated:
                self.log.e(TAG, 'Result Not updated for uuid = ' +
                           str(uuid) + ' udid = ' + str(udid))
            else:
                executed = command.toggle_executed(str(uuid), str(device_id),
                                                   True)
                if executed is False:
                    self.log.e(TAG, 'IOSCommand Table executed \
                            field is not updated CommandUUID = ' +
                               str(uuid) + 'Device id = ' + str(device_id))

                self.log.i(TAG, 'Result send in DB for uuid = ' +
                           str(uuid) + ' udid = ' + str(udid))

                if invoke_flag:
                    # Queue task to send command to user of app installation
                    user = UserDBHelper()
                    user_id = device.get_device_with_udid(str(
                        udid))[0]['user_id']
                    user_info = user.get_user(str(user_id))
                    json_data = {'to': 'user', 'id': user_id}
                    json_data['company_id'] = user_info.get('company_id')
                    create_command_handler_task.delay(json_data)

        elif update_token:
            device = DeviceDBHelper()
            device_list = device.get_device_with_udid(udid)

            device_id = 'device_id'
            if device_list is not None and len(device_list) != 0:
                for devices in device_list:
                    device_id = devices[c.DEVICE_TABLE_ID]
                    if device_id is None:
                        self.log.e(TAG, 'Device id is not found corresponding \
                                   the udid = ' + str(udid))
                    else:
                        device_details = DeviceDetailsDBHelper()
                        device_details_dict = {
                            c.DEVICE_DETAILS_TABLE_DEVICE_TOKEN: token,
                            c.DEVICE_DETAILS_TABLE_PUSH_MAGIC: push_magic,
                            c.DEVICE_DETAILS_TABLE_UNLOCK_TOKEN: unlock_token
                        }
                        is_updated = device_details.update_device_details(
                            str(device_id), device_details_dict)
                        if not is_updated:
                            self.log.e(TAG, 'Not able to update the device \
                                    details of device_id = ' + str(device_id))
                        else:
                            self.log.i(TAG, 'Device Details successfully \
                                       updated device id = ' + str(device_id))

                        reply = """
                <?xml version="1.0" encoding="UTF-8"?>
                <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
                 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                                <plist version="1.0">
                                <dict>
                                </dict>
                                </plist>
                        """
                        self.request.write(reply)
                        ioloop.IOLoop.instance().add_callback(self.callback)

        else:
            reply = """
                <?xml version="1.0" encoding="UTF-8"?>
                <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
                 "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
                                <plist version="1.0">
                                <dict>
                                </dict>
                                </plist>
            """
            print 'outer write'
            self.request.write(reply)
            ioloop.IOLoop.instance().add_callback(self.callback)
Пример #36
0
    def parse(self, excel_path, company, company_name=None, callback=None,
              user_added_callback=None):
        COMPANY = company
        company_name = company_name
        book = open_workbook(filename=excel_path)
        sheet = book.sheet_by_index(0)

        users = list()
        for row_index in range(sheet.nrows):
            user = dict()
            for col_index in range(sheet.ncols):
                cell = sheet.cell(row_index, col_index).value
                if col_index == 0:
                    user[C.USER_TABLE_EMAIL] = cell
                elif col_index == 1:
                    user[C.USER_TABLE_NAME] = cell
                elif col_index == 2:
                    user[C.USER_TABLE_TEAM] = cell
                elif col_index == 3:
                    user[C.USER_TABLE_ROLE] = cell
            users.append(user)
        roles_list = list()
        teams_list = list()
        for user in users:
            if C.USER_TABLE_ROLE in user:
                roles_list.append(user[C.USER_TABLE_ROLE])
            if C.USER_TABLE_TEAM in user:
                teams_list.append(user[C.USER_TABLE_TEAM])

        # get a set to get the unique elements.
        roles = dict()
        teams = dict()

        roles_helper = RoleDBHelper()
        teams_helper = TeamDBHelper()
        users_helper = UserDBHelper()
        enrollment_helper = EnrollmentDBHelper()

        for role_name in set(roles_list):
            role = dict()
            role[C.ROLE_TABLE_COMPANY] = COMPANY
            role[C.ROLE_TABLE_NAME] = role_name
            roles[role_name] = roles_helper.add_role(role)

        for team_name in set(teams_list):
            team = dict()
            team[C.TEAM_TABLE_COMPANY] = COMPANY
            team[C.TEAM_TABLE_NAME] = team_name
            team[C.TEAM_TABLE_DELETED] = False
            teams[team_name] = teams_helper.add_team(team)

        # Now we have id for all teams and roles... Insert the users now.
        for user in users:
            user_obj = dict()
            user_obj[C.USER_TABLE_COMPANY] = COMPANY
            user_obj[C.USER_TABLE_EMAIL] = user[C.USER_TABLE_EMAIL]
            user_obj[C.USER_TABLE_NAME] = user[C.USER_TABLE_NAME]
            user_obj[C.USER_TABLE_ROLE] = roles[user[C.USER_TABLE_ROLE]]
            user_obj[C.USER_TABLE_TEAM] = teams[user[C.USER_TABLE_TEAM]]
            user['id'] = users_helper.add_user_if_not_exists(user_obj)[0]
            if user_added_callback is not None:
                user_added_callback(user_obj)

        for user in users:
            enrollment = dict()
            enrollment[C.ENROLLMENT_TABLE_USER] = user['id']
            enrollment[C.ENROLLMENT_TABLE_PASSWORD] = generate_password()
            enrollment[C.ENROLLMENT_TABLE_IS_ENROLLED] = False
            user['passcode'] = enrollment[C.ENROLLMENT_TABLE_PASSWORD]
            print 'adding enrollment ', enrollment
            user['enrollment_id'] = enrollment_helper.add_enrollment(
                enrollment)
            user['company_name'] = company_name
        if callback is not None:
            callback(users)
        return users
Пример #37
0
    def run(self):
        # Return All the users in the User table
        log = Logger('UsersGetHandlerThreadWithPage')
        tag = 'run'

        company_id = self.company_id

        final_dict = {}

        user = UserDBHelper()
        team = TeamDBHelper()
        role = RoleDBHelper()
        violation = ViolationsDBHelper()
        device = DeviceDBHelper()

        offset = self.request.get_argument('offset', None)
        count = self.request.get_argument('count', None)
        name_query = self.request.get_argument('name', None)
        team_query = self.request.get_argument('team', None)
        role_query = self.request.get_argument('role', None)
        device_query = self.request.get_argument('device_id', None)
        sort_by = self.request.get_argument('sort_by',
                                            True)  # Intentionally done
        sort_order = self.request.get_argument('sort', None)
        filter_key = self.request.get_argument('filter_key', None)
        filter_value = self.request.get_argument('filter_value', None)

        if filter_key == 'role':
            role_name = filter_value
            role_id = role.get_role_by_name(str(role_name), company_id)
        else:
            role_name = None
            role_id = None

        if filter_key == 'team':
            team_name = filter_value
            team_id = team.get_team_by_name(str(team_name), company_id)
        else:
            team_name = None
            team_id = None

        if filter_key == 'os':
            os_mapper = {'Android': 'samsung', 'iOS': 'ios'}
            os_type = os_mapper.get(str(filter_value))
        else:
            os_type = None

        if name_query:
            query = name_query
            query_type = 'name'
        elif role_query:
            query = role_query
            query_type = 'role'
        elif device_query:
            query = device_query
            query_type = 'device'
        elif team_query:
            query = team_query
            query_type = 'team'
        else:
            query = None
            query_type = None

        if offset:
            result_list, total_count = user.get_users_for_user(
                company_id=company_id,
                offset=offset,
                count=count,
                role_id=role_id,
                team_id=team_id,
                query=query,
                query_type=query_type,
                os_type=os_type,
                sort_by=sort_by,
                sort_order=sort_order,
                filter_key=filter_key,
                filter_value=filter_value)

        else:
            result_list, total_count = user.get_users(
                {c.USER_TABLE_COMPANY: company_id})

        if result_list:
            for user_dict in result_list:
                device_deleted = False
                device_info = device.get_device_with_udid(
                    user_dict.get('user_device'))
                if not device_info:
                    device_info = device.get_device_with_udid(
                        user_dict.get('user_device'), status=True)
                    device_deleted = True
                if device_info:
                    device_id = device_info[0].get(c.DEVICE_TABLE_ID)
                else:
                    device_id = None

                if device_deleted:
                    user_dict['user_device'] = None
                    user_dict['user_device_os'] = None

                if device_id:
                    print "printing \n device id", device_id
                    violation_count = violation.get_violation_count(
                        company_id=company_id, device_id=str(device_id))
                else:
                    violation_count = 0
                user_dict['user_violation'] = violation_count

            final_dict['data'] = result_list
            final_dict['count'] = total_count
            final_dict['pass'] = True
            final_dict['message'] = 'Seems like things are working ...'

        else:
            final_dict['pass'] = True
            log.e(tag, 'No User in User Table')
            final_dict['message'] = 'Seems like things are not working ...'
            final_dict['count'] = 0

        # add all the data into dictionary and create output json
        opJson = json.dumps(final_dict)
        self.request.write(opJson)
        tornado.ioloop.IOLoop.instance().add_callback(self.callback)