def register_file_db(store, uploaded_file, internaltip_id): internaltip = store.find(InternalTip, InternalTip.id == internaltip_id).one() if not internaltip: log.err("File associated to a non existent Internaltip!") raise errors.TipIdNotFound internaltip.update_date = datetime_now() new_file = InternalFile() new_file.name = uploaded_file['filename'] new_file.content_type = uploaded_file['content_type'] new_file.size = uploaded_file['body_len'] new_file.internaltip_id = internaltip_id new_file.submission = uploaded_file['submission'] new_file.file_path = uploaded_file['encrypted_path'] if 'is_visible' in uploaded_file: new_file.is_visible = uploaded_file['is_visible'] if 'description' in uploaded_file: new_file.description = uploaded_file['description'] store.add(new_file) log.debug("=> Recorded new InternalFile %s" % uploaded_file['filename']) return serialize_file(new_file)
def register_file_db(store, uploaded_file, internaltip_id): """ Remind: this is used only with fileApp - Tip append a new file, for the submission section, we relay on Token to keep track of the associated file, and in handlers/submission.py InternalFile(s) are created. :param uploaded_file: contain this struct of data: { 'body': <closed file u'/home/qq/Dev/GlobaLeaks/backend/workingdir/files/encrypted_upload/lryZO8IlldGg3BS3.aes', mode 'w+b' at 0xb5b68498>, 'body_len': 667237, 'content_type': 'image/png', 'encrypted_path': u'/home/XYZ/Dev/GlobaLeaks/backend/workingdir/files/submission/lryZO8IlldGg3BS3.aes', 'filename': 'SteganographyIsImportant.png' } """ internaltip = store.find(InternalTip, InternalTip.id == internaltip_id).one() if not internaltip: log.err("File associated to a non existent Internaltip!") raise errors.TipIdNotFound new_file = InternalFile() new_file.name = uploaded_file['filename'] new_file.content_type = uploaded_file['content_type'] new_file.size = uploaded_file['body_len'] new_file.internaltip_id = internaltip_id new_file.file_path = uploaded_file['encrypted_path'] store.add(new_file) log.debug("=> Recorded new InternalFile %s" % uploaded_file['filename']) return serialize_file(new_file)
def register_file_db(store, uploaded_file, internaltip_id): """ Remind: this is used only with fileApp - Tip append a new file, for the submission section, we relay on Token to keep track of the associated file, and in handlers/submission.py InternalFile(s) are created. :param uploaded_file: contain this struct of data: { 'body': <closed file u'/home/qq/Dev/GlobaLeaks/backend/workingdir/files/encrypted_upload/lryZO8IlldGg3BS3.aes', mode 'w+b' at 0xb5b68498>, 'body_len': 667237, 'content_type': 'image/png', 'encrypted_path': u'/home/XYZ/Dev/GlobaLeaks/backend/workingdir/files/submission/lryZO8IlldGg3BS3.aes', 'filename': 'SteganographyIsImportant.png' } """ internaltip = store.find(InternalTip, InternalTip.id == internaltip_id).one() if not internaltip: log.err("File associated to a non existent Internaltip!") raise errors.TipIdNotFound new_file = InternalFile() new_file.name = uploaded_file['filename'] new_file.content_type = uploaded_file['content_type'] new_file.size = uploaded_file['body_len'] new_file.internaltip_id = internaltip_id new_file.file_path = uploaded_file['encrypted_path'] store.add(new_file) log.debug("=> Recorded new InternalFile %s" % uploaded_file['filename']) return serialize_file(new_file)
def db_create_submission(store, token, request, language): context = store.find(Context, Context.id == token.context_associated).one() if not context: # this can happen only if the context is removed # between submission POST and PUT.. :) that's why is better just # ignore this check, take che cached and wait the reference below fault log.err("Context requested: [%s] not found!" % token.context_associated) raise errors.ContextIdNotFound submission = InternalTip() submission.expiration_date = utc_future_date(seconds=context.tip_timetolive) submission.context_id = context.id submission.creation_date = datetime_now() store.add(submission) try: for filedesc in token.uploaded_files: associated_f = InternalFile() associated_f.name = filedesc['filename'] # aio, when we are going to implement file.description ? associated_f.description = "" associated_f.content_type = filedesc['content_type'] associated_f.size = filedesc['body_len'] associated_f.internaltip_id = submission.id associated_f.file_path = filedesc['encrypted_path'] store.add(associated_f) log.debug("=> file associated %s|%s (%d bytes)" % ( associated_f.name, associated_f.content_type, associated_f.size)) except Exception as excep: log.err("Unable to create a DB entry for file! %s" % excep) raise excep try: wb_steps = request['wb_steps'] steps = db_get_context_steps(store, context.id, language) verify_steps(steps, wb_steps) submission.wb_steps = wb_steps except Exception as excep: log.err("Submission create: fields validation fail: %s" % excep) raise excep try: import_receivers(store, submission, request['receivers']) except Exception as excep: log.err("Submission create: receivers import fail: %s" % excep) raise excep submission_dict = wb_serialize_internaltip(submission) return submission_dict
def register_file_db(store, uploaded_file, filepath, internaltip_id): internaltip = store.find(InternalTip, InternalTip.id == internaltip_id).one() if not internaltip: log.err("File submission register in a submission that's no more") raise errors.TipIdNotFound new_file = InternalFile() new_file.name = uploaded_file['filename'] new_file.description = "" new_file.content_type = uploaded_file['content_type'] new_file.mark = InternalFile._marker[0] # 'not processed' new_file.size = uploaded_file['body_len'] new_file.internaltip_id = internaltip_id new_file.file_path = filepath store.add(new_file) log.debug("=> Recorded new InternalFile %s" % uploaded_file['filename']) return serialize_file(new_file)
def register_ifile_on_db(store, uploaded_file, internaltip_id): internaltip = store.find(InternalTip, InternalTip.id == internaltip_id).one() if not internaltip: log.err("Cannot associate a file to a not existent internaltip!") raise errors.TipIdNotFound internaltip.update_date = datetime_now() new_file = InternalFile() new_file.name = uploaded_file['name'] new_file.content_type = uploaded_file['type'] new_file.size = uploaded_file['size'] new_file.internaltip_id = internaltip_id new_file.submission = uploaded_file['submission'] new_file.file_path = uploaded_file['path'] store.add(new_file) return serializers.serialize_ifile(new_file)
def register_file_db(store, uploaded_file, filepath, internaltip_id): internaltip = store.find(InternalTip, InternalTip.id == internaltip_id).one() if not internaltip: log.err("File submission register in a submission that's no more") raise errors.TipIdNotFound new_file = InternalFile() new_file.name = uploaded_file['filename'] new_file.description = "" new_file.content_type = uploaded_file['content_type'] new_file.mark = InternalFile._marker[0] # 'not processed' new_file.size = uploaded_file['body_len'] new_file.internaltip_id = internaltip_id new_file.file_path = filepath store.add(new_file) log.debug("=> Recorded new InternalFile %s" % uploaded_file['filename']) return serialize_file(new_file)
def register_file_db(store, uploaded_file, filepath, cksum, internaltip_id): internaltip = store.find(InternalTip, InternalTip.id == internaltip_id).one() if not internaltip: log.err("File submission register in a submission that's no more") raise errors.TipGusNotFound original_fname = uploaded_file["filename"] try: new_file = InternalFile() new_file.name = original_fname new_file.content_type = uploaded_file["content_type"] new_file.mark = InternalFile._marker[0] # 'not processed' new_file.sha2sum = cksum new_file.size = uploaded_file["body_len"] new_file.internaltip_id = unicode(internaltip_id) new_file.file_path = filepath store.add(new_file) store.commit() except Exception as excep: log.err("Unable to commit new InternalFile %s: %s" % (original_fname.encode("utf-8"), excep)) raise excep # I'm forcing commits because I've got some inconsistencies # in this ReferenceSets. need to be investigated if needed. try: # internaltip.internalfiles.add(new_file) store.commit() except Exception as excep: log.err("Unable to reference InternalFile %s in InternalTip: %s" % (original_fname, excep)) raise excep log.debug("=> Recorded new InternalFile %s (%s)" % (original_fname, cksum)) return serialize_file(new_file)
def register_ifile_on_db(store, uploaded_file, internaltip_id): internaltip = store.find(InternalTip, InternalTip.id == internaltip_id).one() if not internaltip: log.err("Cannot associate a file to a not existent internaltip!") raise errors.TipIdNotFound internaltip.update_date = datetime_now() new_file = InternalFile() new_file.name = uploaded_file['name'] new_file.content_type = uploaded_file['type'] new_file.size = uploaded_file['size'] new_file.internaltip_id = internaltip_id new_file.submission = uploaded_file['submission'] new_file.file_path = uploaded_file['path'] store.add(new_file) return serializers.serialize_ifile(new_file)
def register_file_db(store, uploaded_file, internaltip_id): internaltip = store.find(InternalTip, InternalTip.id == internaltip_id).one() if not internaltip: log.err("File associated to a non existent Internaltip!") raise errors.TipIdNotFound internaltip.update_date = datetime_now() new_file = InternalFile() new_file.name = uploaded_file['filename'] new_file.content_type = uploaded_file['content_type'] new_file.size = uploaded_file['body_len'] new_file.internaltip_id = internaltip_id new_file.submission = uploaded_file['submission'] new_file.file_path = uploaded_file['encrypted_path'] store.add(new_file) log.debug("=> Recorded new InternalFile %s" % uploaded_file['filename']) return serialize_file(new_file)
def db_create_submission(store, token_id, request, t2w, language): # the .get method raise an exception if the token is invalid token = TokenList.get(token_id) if not token.context_associated == request['context_id']: raise errors.InvalidInputFormat( "Token context does not match the one specified in submission payload" ) token.validate(request) TokenList.delete(token_id) answers = request['answers'] context = store.find(Context, Context.id == token.context_associated).one() if not context: # this can happen only if the context is removed # between submission POST and PUT.. :) that's why is better just # ignore this check, take che cached and wait the reference below fault log.err("Context requested: [%s] not found!" % token.context_associated) raise errors.ContextIdNotFound submission = InternalTip() submission.expiration_date = utc_future_date( seconds=context.tip_timetolive) submission.context_id = context.id submission.creation_date = datetime_now() # Tor2Web is spot in the handler and passed here, is done to keep track of the # security level adopted by the whistleblower submission.tor2web = t2w try: questionnaire = db_get_context_steps( store, context.id, GLSettings.memory_copy.default_language) questionnaire_hash = sha256(json.dumps(questionnaire)) submission.questionnaire_hash = questionnaire_hash submission.preview = extract_answers_preview(questionnaire, answers) store.add(submission) db_archive_questionnaire_schema(store, submission) db_save_questionnaire_answers(store, submission, answers) except Exception as excep: log.err("Submission create: fields validation fail: %s" % excep) raise excep try: import_receivers(store, submission, request['receivers']) except Exception as excep: log.err("Submission create: receivers import fail: %s" % excep) raise excep try: for filedesc in token.uploaded_files: associated_f = InternalFile() associated_f.name = filedesc['filename'] associated_f.description = "" associated_f.content_type = filedesc['content_type'] associated_f.size = filedesc['body_len'] associated_f.internaltip_id = submission.id associated_f.file_path = filedesc['encrypted_path'] store.add(associated_f) log.debug("=> file associated %s|%s (%d bytes)" % (associated_f.name, associated_f.content_type, associated_f.size)) except Exception as excep: log.err("Unable to create a DB entry for file! %s" % excep) raise excep receipt = db_create_whistleblower_tip(store, submission) submission_dict = wb_serialize_internaltip(store, submission) submission_dict.update({'receipt': receipt}) return submission_dict
def db_create_submission(store, token_id, request, t2w, language): # the .get method raise an exception if the token is invalid token = TokenList.get(token_id) if not token.context_associated == request['context_id']: raise errors.InvalidInputFormat("Token context does not match the one specified in submission payload") token.validate(request) TokenList.delete(token_id) answers = request['answers'] context = store.find(Context, Context.id == token.context_associated).one() if not context: # this can happen only if the context is removed # between submission POST and PUT.. :) that's why is better just # ignore this check, take che cached and wait the reference below fault log.err("Context requested: [%s] not found!" % token.context_associated) raise errors.ContextIdNotFound submission = InternalTip() submission.expiration_date = utc_future_date(seconds=context.tip_timetolive) submission.context_id = context.id submission.creation_date = datetime_now() # Tor2Web is spot in the handler and passed here, is done to keep track of the # security level adopted by the whistleblower submission.tor2web = t2w try: questionnaire = db_get_context_steps(store, context.id, GLSettings.memory_copy.default_language) questionnaire_hash = sha256(json.dumps(questionnaire)) submission.questionnaire_hash = questionnaire_hash submission.preview = extract_answers_preview(questionnaire, answers) store.add(submission) db_archive_questionnaire_schema(store, submission) db_save_questionnaire_answers(store, submission, answers) except Exception as excep: log.err("Submission create: fields validation fail: %s" % excep) raise excep try: import_receivers(store, submission, request['receivers']) except Exception as excep: log.err("Submission create: receivers import fail: %s" % excep) raise excep try: for filedesc in token.uploaded_files: associated_f = InternalFile() associated_f.name = filedesc['filename'] associated_f.description = "" associated_f.content_type = filedesc['content_type'] associated_f.size = filedesc['body_len'] associated_f.internaltip_id = submission.id associated_f.file_path = filedesc['encrypted_path'] store.add(associated_f) log.debug("=> file associated %s|%s (%d bytes)" % ( associated_f.name, associated_f.content_type, associated_f.size)) except Exception as excep: log.err("Unable to create a DB entry for file! %s" % excep) raise excep receipt = db_create_whistleblower_tip(store, submission) submission_dict = wb_serialize_internaltip(store, submission) submission_dict.update({'receipt': receipt}) return submission_dict