def process_id(upload_id): from run import config # Fetch upload id queued_sample = QueuedSample.query.filter( QueuedSample.id == upload_id).first() if queued_sample is not None: if queued_sample.user_id == g.user.id: # Allowed to process versions = CCExtractorVersion.query.all() form = FinishQueuedSampleForm(request.form) form.version.choices = [(v.id, v.version) for v in versions] if form.validate_on_submit(): # Store in DB db_committed = False temp_path = os.path.join(config.get('SAMPLE_REPOSITORY', ''), 'QueuedFiles', queued_sample.filename) final_path = os.path.join(config.get('SAMPLE_REPOSITORY', ''), 'TestFiles', queued_sample.filename) try: extension = queued_sample.extension[1:] if len( queued_sample.extension) > 0 else "" sample = Sample(queued_sample.sha, extension, queued_sample.original_name) g.db.add(sample) g.db.flush([sample]) uploaded = Upload(g.user.id, sample.id, form.version.data, Platform.from_string(form.platform.data), form.parameters.data, form.notes.data) g.db.add(uploaded) g.db.delete(queued_sample) g.db.commit() db_committed = True except: traceback.print_exc() g.db.rollback() # Move file if db_committed: os.rename(temp_path, final_path) return redirect( url_for('sample.sample_by_id', sample_id=sample.id)) return {'form': form, 'queued_sample': queued_sample} # Raise error raise QueuedSampleNotFoundException()
def process_id(upload_id): """ Process the sample that is uploaded to the platform :param upload_id: The identity of uploaded file that will be processed :type upload_id: str :return: Process progress in form and queue the sample :rtype: str """ from run import config, log # Fetch upload id queued_sample = QueuedSample.query.filter( QueuedSample.id == upload_id).first() if queued_sample is not None: if queued_sample.user_id == g.user.id: # Allowed to process versions = CCExtractorVersion.query.all() form = FinishQueuedSampleForm(request.form) form.version.choices = [(v.id, v.version) for v in versions] if form.validate_on_submit(): # Store in DB db_committed = False repo_folder = config.get('SAMPLE_REPOSITORY', '') temp_path = os.path.join(repo_folder, 'QueuedFiles', queued_sample.filename) final_path = os.path.join(repo_folder, 'TestFiles', queued_sample.filename) try: extension = queued_sample.extension[1:] if len( queued_sample.extension) > 0 else "" sample = Sample(queued_sample.sha, extension, queued_sample.original_name) g.db.add(sample) g.db.flush([sample]) uploaded = Upload(g.user.id, sample.id, form.version.data, Platform.from_string(form.platform.data), form.parameters.data, form.notes.data) g.db.add(uploaded) g.db.delete(queued_sample) g.db.commit() db_committed = True except Exception: traceback.print_exc() g.db.rollback() # Move file if db_committed: if form.report.data == 'y': data = "" try: kvm_name = config.get('KVM_LINUX_NAME', '') repo = Repo( os.path.join(repo_folder, 'vm_data', kvm_name, 'unsafe-ccextractor')) data = repo.git.show('{branch}:{file}'.format( branch=repo.heads.master, file='.github/ISSUE_TEMPLATE.md')) except InvalidGitRepositoryError: log.critical( " Could not open CCExtractor's repository ") version = CCExtractorVersion.query.filter( CCExtractorVersion.id == form.version.data).first() data = data.replace('**X.X**', version.version) data = data.replace('[ ] I have read', '[X] I have read') data = data.replace('[ ] I have checked', '[X] I have checked') data = data.replace('[ ] I have used', '[X] I have used') data = data.replace( '[ ] I am an active contributor to CCExtractor.', '[X] I used the platform to submit this issue!') data = data.replace( '`-autoprogram`', '`{param}`'.format(param=form.parameters.data, version=form.version.data)) platform = form.platform.data.title() data = data.replace('[ ] ' + platform, '[X] ' + platform) # Remove everything starting from the video links data = data[:data.find('**Video links**')] # Append our own content here sample_link = url_for('sample.sample_by_id', sample_id=sample.id, _external=True) data += '**Sample**\n\n[Sample {id}]({link}) was uploaded on the sample platform.\n'.format( id=sample.id, link=sample_link) data += '**Extra information**\n\n*Notes:*\n{notes}\n*Description:*\n{desc}'.format( notes=form.notes.data, desc=form.IssueBody.data) issue_title = '[BUG] {data}'.format( data=form.IssueTitle.data) issue_upload = make_github_issue( issue_title, data, ['bug', 'sample' + str(sample.id)]) if issue_upload != 'ERROR': issue_data = json.loads(issue_upload) issue_id = issue_data['number'] issue_title = issue_data['title'] issue_user = issue_data['user']['login'] issue_date = issue_data['created_at'] issue_status = issue_data['state'] issue = Issue(sample.id, issue_id, issue_date, issue_title, issue_user, issue_status) g.db.add(issue) g.db.commit() else: flash( 'Could not submit an issue on GitHub (did you revoke permissions for the platform?).' ' Please submit it manually.') os.rename(temp_path, final_path) return redirect( url_for('sample.sample_by_id', sample_id=sample.id)) return {'form': form, 'queued_sample': queued_sample} # Raise error raise QueuedSampleNotFoundException()