Esempio n. 1
0
    def restart_job(self):
        id: int = request.args.get('id', None)
        if id is not None:
            self._device_updater.restart_job(id)
            flash('Job requeued')
            return redirect(getBasePath(request) + '/install_status')

        flash('unknown id - restart failed')
        return redirect(getBasePath(request) + '/install_status')
Esempio n. 2
0
    def install_file_all_devices(self):
        jobname = request.args.get('jobname', None)
        type_ = request.args.get('type', None)
        if jobname is None or type_ is None:
            flash('No File or Type selected')
            return redirect(getBasePath(request) + '/install_status')

        devices = self._mapping_manager.get_all_devices()
        for device in devices:
            self._device_updater.preadd_job(origin=device, job=jobname, id_=int(time.time()),
                                            type=type_)
            time.sleep(1)

        flash('Job successfully queued')
        return redirect(getBasePath(request) + '/install_status')
Esempio n. 3
0
 def delete_log_entry(self):
     id_ = request.args.get('id')
     if self._device_updater.delete_log_id(id_):
         flash('Job could be deleted successfully')
     else:
         flash('Job could not be deleted successfully')
     return redirect(getBasePath(request) + '/install_status')
Esempio n. 4
0
    def savesortwalker(self):
        walkernr = request.args.get('walkernr')
        data = request.args.getlist('position[]')
        edit = request.args.get('edit')
        datavalue = []

        with open('configs/mappings.json') as f:
            mapping = json.load(f)
            if 'walker' not in mapping:
                mapping['walker'] = []

        for ase in data:
            _temp = ase.split("|")
            walkerlist = {'walkerarea': _temp[0], 'walkertype': _temp[1], 'walkervalue': _temp[2],
                          'walkermax': _temp[3],
                          'walkertext': _temp[4]}
            datavalue.append(walkerlist)

        mapping['walker'][int(walkernr)]['setup'] = datavalue

        with open('configs/mappings.json', 'w') as outfile:
            json.dump(mapping, outfile, indent=4, sort_keys=True)

        return redirect(getBasePath(request) + "/config?type=walker&area=walker&block=fields&edit=" + str(edit),
                        code=302)
Esempio n. 5
0
    def install_file(self):

        jobname = request.args.get('jobname')
        origin = request.args.get('origin')
        useadb = request.args.get('adb', False)
        type_ = request.args.get('type', None)

        devicemappings = self._mapping_manager.get_all_devicemappings()
        adb = devicemappings.get(origin, {}).get('adb', False)

        if os.path.exists(os.path.join(self._args.upload_path, jobname)):
            if useadb == 'True':
                if self._adb_connect.push_file(adb, origin, os.path.join(self._args.upload_path, jobname)) and  \
                    self._adb_connect.send_shell_command(
                        adb, origin, "pm install -r /sdcard/Download/" + str(jobname)):
                    flash('File could be installed successfully')
                else:
                    flash('File could not be installed successfully :(')
            else:
                self._device_updater.preadd_job(origin=origin,
                                                job=jobname,
                                                id_=int(time.time()),
                                                type=type_)
                flash('File successfully queued --> See Job Status')

        elif type_ != jobType.INSTALLATION:
            self._device_updater.preadd_job(origin=origin,
                                            job=jobname,
                                            id_=int(time.time()),
                                            type=type_)
            flash('Job successfully queued --> See Job Status')

        return redirect(
            getBasePath(request) + '/uploaded_files?origin=' + str(origin) +
            '&adb=' + str(useadb))
Esempio n. 6
0
    def delsetting(self):
        global device_mappings, areas
        edit = request.args.get('edit')
        area = request.args.get('area')

        with open('configs/mappings.json') as f:
            mapping = json.load(f)
            if 'walker' not in mapping:
                mapping['walker'] = []

        for key, entry in enumerate(mapping[area]):
            if 'name' in entry:
                _checkfield = 'name'
            if 'origin' in entry:
                _checkfield = 'origin'
            if 'username' in entry:
                _checkfield = 'username'
            if 'walkername' in entry:
                _checkfield = 'walkername'
            if 'devicepool' in entry:
                _checkfield = 'devicepool'

            if str(edit) == str(entry[_checkfield]):
                del mapping[area][key]

        with open('configs/mappings.json', 'w') as outfile:
            json.dump(mapping, outfile, indent=4, sort_keys=True)

        return redirect(getBasePath(request) + "/showsettings", code=302)
Esempio n. 7
0
File: ocr.py Progetto: spammer23/MAD
    def modify_gym_hash(self):
        hash = request.args.get('hash')
        id = request.args.get('id')

        self._db.delete_hash_table(str(hash), 'gym', 'in', 'hash')
        self._db.insert_hash(hash, 'gym', id, '999', unique_hash="madmin")

        return redirect(getBasePath(request) + "/gyms", code=302)
Esempio n. 8
0
    def trigger_research_menu(self):
        origin = request.args.get('origin')
        try:
            self.research_trigger_queue.put(origin)
        except Exception as e:
            self._logger.exception(
                'MADmin: Exception occurred while trigger research menu: {}.', e)

        return redirect(getBasePath(request) + '/phonecontrol')
Esempio n. 9
0
File: ocr.py Progetto: spammer23/MAD
    def submit_hash(self):
        hash = request.args.get('hash')
        id = request.args.get('id')

        if self._db.insert_hash(hash, 'gym', id, '999', unique_hash="madmin"):

            for file in glob.glob("www_hash/unkgym_*" + str(hash) + ".jpg"):
                copyfile(file, 'www_hash/gym_0_0_' + str(hash) + '.jpg')
                os.remove(file)

            return redirect(getBasePath(request) + "/unknown", code=302)
Esempio n. 10
0
File: ocr.py Progetto: spammer23/MAD
    def delete_file(self):
        hash = request.args.get('hash')
        type = request.args.get('type')
        redi = request.args.get('redirect')
        if not hash or not type:
            return 'Missing Argument...'

        for file in glob.glob("ocr/www_hash/*" + str(hash) + ".jpg"):
            os.remove(file)

        return redirect(getBasePath(request) + '/' + str(redi), code=302)
Esempio n. 11
0
    def job_for_worker(self):
        jobname = request.args.get('jobname', None)
        type_ = request.args.get('type', None)
        devices = request.args.getlist('device[]')
        for device in devices:
            self._device_updater.preadd_job(origin=device, job=jobname, id_=int(time.time()),
                                            type=type_)
            time.sleep(1)

        flash('Job successfully queued')
        return redirect(getBasePath(request) + '/install_status')
Esempio n. 12
0
    def upload(self):
        if request.method == 'POST':
            # check if the post request has the file part
            if 'file' not in request.files:
                flash('No file part')
                return redirect(request.url)
            file = request.files['file']
            if file.filename == '':
                flash('No file selected for uploading')
                return redirect(request.url)
            if file and allowed_file(file.filename):
                filename = secure_filename(file.filename)
                file.save(os.path.join(self._args.upload_path, filename))
                flash('File could be uploaded successfully')
                return redirect(getBasePath(request) + '/uploaded_files')
            else:
                flash('Allowed file type is apk only!')
                return redirect(getBasePath(request) + request.url)

        return render_template('upload.html', header="File Upload", title="File Upload")
Esempio n. 13
0
File: ocr.py Progetto: spammer23/MAD
    def modify_raid_mon(self):
        hash = request.args.get('hash')
        id = request.args.get('gym')
        mon = request.args.get('mon')
        lvl = request.args.get('lvl')

        newJsonString = encodeHashJson(id, lvl, mon)
        self._db.delete_hash_table(str(hash), 'raid', 'in', 'hash')
        self._db.insert_hash(hash, 'raid', newJsonString,
                               '999', unique_hash="madmin")

        return redirect(getBasePath(request) + "/raids", code=302)
Esempio n. 14
0
    def savefence(self):
        name = request.args.get('name', False)
        coords = request.args.get('coords', False)

        if not name and not coords:
            return redirect(getBasePath(request) + "/map", code=302)

        coords_split = coords.split("|")
        geofence_file_path = self._args.geofence_file_path

        file = open(os.path.join(geofence_file_path, (str(name) + ".txt")),
                    "a")
        file.write("[" + str(name) + "]\n")
        for i in range(len(coords_split)):
            if coords_split[i] != '':
                latlon_split = coords_split[i].split(",")
                file.write("{0},{1}\n".format(str(float(latlon_split[0])),
                                              str(float(latlon_split[1]))))

        file.close()

        return redirect(getBasePath(request) + "/map", code=302)
Esempio n. 15
0
    def addnew(self):
        area = request.args.get('area')
        line = ''
        with open('madmin/static/vars/vars_parser.json') as f:
            settings = json.load(f)
        if (len(settings[area])) == 1:
            return redirect(getBasePath(request) + '/config?type=' + area + '&area=' + area + '&block=fields', code=302)

        for output in settings[area]:
            line = line + '<h3><a href="config?type=' + str(output['name']) + '&area=' + str(
                area) + '&block=fields">' + str(output['name']) + '</a></h3><h5>' + str(
                output['description']) + '</h5><hr>'

        return render_template('sel_type.html', line=line, title="Type selector", running_ocr=(self._args.only_ocr))
Esempio n. 16
0
 def restart_phone(self):
     origin = request.args.get('origin')
     useadb = request.args.get('adb')
     adb = self._device_mapping[origin].get('adb', False)
     self._logger.info('MADmin: Restart Phone ({})', str(origin))
     if useadb == 'True' and self._adb_connect.send_shell_command(
             adb, origin,
             "am broadcast -a android.intent.action.BOOT_COMPLETED"):
         self._logger.info('MADMin: ADB shell command successfully ({})',
                           str(origin))
     else:
         temp_comm = self._ws_server.get_origin_communicator(origin)
         temp_comm.reboot()
     return redirect(getBasePath(request) + '/phonecontrol')
Esempio n. 17
0
    def clear_game_data(self):
        origin = request.args.get('origin')
        useadb = request.args.get('adb')
        devicemappings = self._mapping_manager.get_all_devicemappings()

        adb = devicemappings.get(origin, {}).get('adb', False)
        self._logger.info('MADmin: Clear game data for phone ({})', str(origin))
        if (useadb == 'True' and
                self._adb_connect.send_shell_command(
                        adb, origin, "pm clear com.nianticlabs.pokemongo")):
            self._logger.info('MADMin: ADB shell command successfully ({})', str(origin))
        else:
            temp_comm = self._ws_server.get_origin_communicator(origin)
            temp_comm.resetAppdata("com.nianticlabs.pokemongo")
        return redirect(getBasePath(request) + '/phonecontrol')
Esempio n. 18
0
    def delwalker(self):
        walker = request.args.get('walker')
        walkernr = request.args.get('walkernr')
        walkerposition = request.args.get('walkerposition')

        with open('configs/mappings.json') as f:
            mapping = json.load(f)
            if 'walker' not in mapping:
                mapping['walker'] = []

        del mapping['walker'][int(walkernr)]['setup'][int(walkerposition)]

        with open('configs/mappings.json', 'w') as outfile:
            json.dump(mapping, outfile, indent=4, sort_keys=True)

        return redirect(getBasePath(request) + "/config?type=walker&area=walker&block=fields&edit=" + str(walker),
                        code=302)
Esempio n. 19
0
 def delete_log(self):
     onlysuccess = request.args.get('only_success', False)
     self._device_updater.delete_log(onlysuccess=onlysuccess)
     return redirect(getBasePath(request) + '/install_status')
Esempio n. 20
0
 def reload(self):
     if not self._args.auto_reload_config:
         self._mapping_mananger.update()
     return redirect(getBasePath(request) + "/showsettings", code=302)
Esempio n. 21
0
    def addedit(self):
        data = request.form.to_dict(flat=False)
        datavalue = {}

        for ase in data:
            key = ','.join(data[ase])
            datavalue[ase] = key

        edit = datavalue.get("edit", False)
        block = datavalue.get("block", False)
        area = datavalue.get("area", False)
        mode = datavalue.get("mode", False)

        with open('configs/mappings.json') as f:
            mapping = json.load(f)
            if 'walker' not in mapping:
                mapping['walker'] = []
            if 'devicesettings' not in mapping:
                mapping['devicesettings'] = []

        with open('madmin/static/vars/settings.json') as f:
            settings = json.load(f)

        if edit:
            for entry in mapping[area]:
                if 'name' in entry:
                    _checkfield = 'name'
                if 'origin' in entry:
                    _checkfield = 'origin'
                if 'username' in entry:
                    _checkfield = 'username'
                if 'walkername' in entry:
                    _checkfield = 'walkername'
                if 'devicepool' in entry:
                    _checkfield = 'devicepool'

                if str(edit) == str(entry[_checkfield]):
                    if str(block) == str("settings"):
                        for key, value in datavalue.items():
                            if value == '' or value == 'None':
                                if key in entry['settings']:
                                    del entry['settings'][key]
                            elif value in area:
                                continue
                            else:
                                if str(key) not in ('block', 'area', 'type', 'edit', 'mode'):
                                    entry['settings'][key] = self.match_type(value)

                    else:
                        for key, value in datavalue.items():
                            if value == '':
                                if key in entry:
                                    del entry[key]
                            elif value in area:
                                continue
                            else:
                                if str(key) in ('geofence'):
                                    entry[key] = value
                                elif str(key) not in ('block', 'area', 'type', 'edit'):
                                    entry[key] = self.match_type(value)

        else:
            new = {}
            for key, value in datavalue.items():
                if value != '' and value not in area:
                    if str(key) in ('geofence'):
                        new[key] = value
                    elif str(key) not in ('block', 'area', 'type', 'edit'):
                        new[key] = self.match_type(value)

            if str(block) == str("settings"):
                mapping[area]['settings'].append(new)
            else:
                if settings[area]['has_settings'] == 'true':
                    new['settings'] = {}
                mapping[area].append(new)

        with open('configs/mappings.json', 'w') as outfile:
            json.dump(mapping, outfile, indent=4, sort_keys=True)


        return redirect(getBasePath(request) + "/showsettings", code=302)
Esempio n. 22
0
 def delete_file(self):
     filename = request.args.get('filename')
     if os.path.exists(os.path.join(self._args.upload_path, filename)):
         os.remove(os.path.join(self._args.upload_path, filename))
         flash('File could be deleted successfully')
     return redirect(getBasePath(request) + '/uploaded_files')
Esempio n. 23
0
    def addwalker(self):
        fieldwebsite = []
        walkervalue = ""
        walkerposition = ""
        walkermax = ""
        walkertext = ""
        edit = request.args.get('edit')
        walker = request.args.get('walker')
        add = request.args.get('add')

        walkernr = request.args.get('walkernr')

        with open('configs/mappings.json') as f:
            mapping = json.load(f)
            if 'walker' not in mapping:
                mapping['walker'] = []

        if add:
            walkerarea = request.args.get('walkerarea')
            walkertype = request.args.get('walkertype')
            walkervalue = request.args.get('walkervalue')
            walkernr = request.args.get('walkernr')
            walkermax = request.args.get('walkermax')
            walkertext = request.args.get('walkertext').replace(' ', '_')
            walkerposition = request.args.get('walkerposition', False)
            if not walkerposition:
                walkerposition = False
            oldwalkerposition = request.args.get('oldwalkerposition')
            edit = request.args.get('edit')

            walkerlist = {'walkerarea': walkerarea, 'walkertype': walkertype, 'walkervalue': walkervalue,
                          'walkermax': walkermax, 'walkertext': walkertext}

            if 'setup' not in mapping['walker'][int(walkernr)]:
                mapping['walker'][int(walkernr)]['setup'] = []

            if edit:
                if int(walkerposition) == int(oldwalkerposition):
                    mapping['walker'][int(walkernr)]['setup'][int(
                        walkerposition)] = walkerlist
                else:
                    del mapping['walker'][int(
                        walkernr)]['setup'][int(oldwalkerposition)]
                    if walkerposition:
                        mapping['walker'][int(walkernr)]['setup'].insert(
                            int(walkerposition), walkerlist)
                    else:
                        mapping['walker'][int(walkernr)]['setup'].insert(
                            999, walkerlist)
            else:
                if walkerposition:
                    mapping['walker'][int(walkernr)]['setup'].insert(
                        int(walkerposition), walkerlist)
                else:
                    mapping['walker'][int(walkernr)]['setup'].insert(
                        999, walkerlist)

            with open('configs/mappings.json', 'w') as outfile:
                json.dump(mapping, outfile, indent=4, sort_keys=True)

                return redirect(getBasePath(request) + "/config?type=walker&area=walker&block=fields&edit="
                                + str(walker), code=302)

        if walker and edit:
            walkerposition = request.args.get('walkerposition')
            _walkerval = mapping['walker'][int(
                walkernr)]['setup'][int(walkerposition)]
            walkerarea = _walkerval['walkerarea']
            walkertype = _walkerval['walkertype']
            walkervalue = _walkerval['walkervalue']
            walkermax = _walkerval.get('walkermax', '')
            walkertext = _walkerval.get('walkertext', '').replace(' ', '_')
            if walkermax is None:
                walkermax = ''
            edit = True

        fieldwebsite.append('<form action="addwalker" id="settings">')
        fieldwebsite.append(
            '<input type="hidden" name="walker" value="' + walker + '">')
        fieldwebsite.append('<input type="hidden" name="add" value=True>')
        if walker and edit:
            fieldwebsite.append(
                '<input type="hidden" name="oldwalkerposition" value=' + str(walkerposition) + '>')
            fieldwebsite.append('<input type="hidden" name="edit" value=True>')
        fieldwebsite.append(
            '<input type="hidden" name="walkernr" value=' + str(walkernr) + '>')

        req = "required"

        # lockvalue = 'readonly'
        lockvalue = ''

        _temp = '<div class="form-group"><label>Area</label><br /><small class="form-text text-muted">Select the Area' \
                '</small><select class="form-control" name="walkerarea" ' + \
                lockvalue + ' ' + req + '>'
        with open('configs/mappings.json') as f:
            mapping = json.load(f)
            if 'walker' not in mapping:
                mapping['walker'] = []
        mapping['areas'].append({'name': None})

        for option in mapping['areas']:
            sel = ''
            if edit:
                if str(walkerarea).lower() == str(option['name']).lower():
                    sel = 'selected'
            _temp = _temp + '<option value="' + str(option['name']) + '" ' + sel + '>' + str(
                option['name']) + '</option>'
            sel = ''
        _temp = _temp + '</select></div>'
        fieldwebsite.append(str(_temp))

        req = "required"
        _temp = '<div class="form-group"><label>Walkermode</label><br /><small class="form-text text-muted">' \
                'Choose the way to end the route:<br>' \
                '<b>countdown</b>: Kill worker after X seconds<br>' \
                '<b>timer</b>: Kill worker after X:XX o´clock (Format: 24h f.e. 21:30 -> 9:30 pm)<br>' \
                '<b>round</b>: Kill worker after X rounds<br>' \
                '<b>period</b>: Kill worker if outside the period (Format: 24h f.e. 7:00-21:00)<br>' \
                '<b>coords*</b>: Kill worker if no more coords are present<br>' \
                '<b>idle*</b>: Idle worker and close Pogo till time or in period (check sleepmode of phone - ' \
                'display must be on in this time!)<br>' \
                '<b>*Additionally for coords/idle (walkervalue):</b><br>' \
                '- Kill worker after X:XX o´clock (Format: 24h)<br>' \
                '- Kill worker if outside of a period (Format: 24h f.e. 7:00-21:00)<br>' \
                '</small>' \
                '<select class="form-control" name="walkertype" ' + lockvalue + ' ' + req + '>'
        _options = ('countdown#timer#round#period#coords#idle').split('#')
        for option in _options:
            if edit:
                if str(walkertype).lower() in str(option).lower():
                    sel = 'selected'
            _temp = _temp + '<option value="' + \
                    str(option) + '" ' + sel + '>' + str(option) + '</option>'
            sel = ''
        _temp = _temp + '</select></div>'
        fieldwebsite.append(str(_temp))

        fieldwebsite.append('<div class="form-group"><label>Value for Walkermode</label><br />'
                            '<small class="form-text text-muted"></small>'
                            '<input type="text" name="walkervalue" value="' + str(
            walkervalue) + '" data-rule-validatewalkervalue="true"></div>')

        fieldwebsite.append('<div class="form-group"><label>Max. Walker in Area</label><br />'
                            '<small class="form-text text-muted">Empty = infinitely</small>'
                            '<input type="text" name="walkermax" value="' + str(walkermax) + '"></div>')

        fieldwebsite.append('<div class="form-group"><label>Description</label><br />'
                            '<small class="form-text text-muted"></small>'
                            '<input type="text" name="walkertext" value="' + str(walkertext).replace('_',
                                                                                                     ' ') + '"></div>')

        fieldwebsite.append('<div class="form-group"><label>Position in Walker</label><br />'
                            '<small class="form-text text-muted">Set position in walker (0=first / empty=append on list)'
                            '</small>'
                            '<input type="text" name="walkerposition" value="' + str(walkerposition) + '"></div>')

        fieldwebsite.append(
            '<button type="submit" class="btn btn-primary">Save</button></form>')

        if edit:
            header = "Edit " + walkerarea + " (" + walker + ")"
        else:
            header = "Add new " + walker

        return render_template('parser.html', editform=fieldwebsite, header=header, title="edit settings",
                               running_ocr=(self._args.only_ocr))
Esempio n. 24
0
 def reload_jobs(self):
     logger.info("Reload existing jobs")
     self._device_updater.init_jobs()
     return redirect(getBasePath(request) + '/uploaded_files')