Browse Source

New option to impose a particular tarball hash

master
nemunaire 5 years ago
parent
commit
b308fe4669
  1. 4
      archive.py
  2. 15
      check.py

4
archive.py

@ -44,13 +44,15 @@ def find(cnt):
yield (data, login)
def hash_archive(cnt, dest=None):
def hash_archive(cnt, dest=None, imposed_hash=None):
data, login = cnt
sha = hashlib.sha1(data.encode() if isinstance(data, str) else data).hexdigest()
yield MailTest("Your tarball SHA-1 is %s." % sha, -1)
if dest is not None and os.path.exists(os.path.join(dest, login + "." + sha)):
yield MailTest("You have already uploaded this tarball.", 1)
yield False
elif imposed_hash is not None and imposed_hash != sha:
yield MailTest("This is not the expected hash. Your tarball's hash must be: %s." % imposed_hash, 1)
else:
yield (data, sha, login)

15
check.py

@ -28,17 +28,17 @@ def signcheck(data):
yield data
def gen_checks(submissions_dir, check_content=False):
def gen_checks(submissions_dir, check_content=False, check_submission_hash=None):
if HARD_MAX_SUBMISSION is not None and check_content:
yield (late.check, [HARD_MAX_SUBMISSION, SOFT_MAX_SUBMISSION])
else:
elif not check_content:
yield signcheck
yield (envelope.check, [GNUPG_DIRECTORY, BETA])
yield (signature.check, [GNUPG_DIRECTORY])
yield (login.check, ["/home/nemunaire/workspace/check_mail/SRS2017.csv"])
if check_content:
yield archive.find
yield ( archive.hash_archive, [submissions_dir] )
yield ( archive.hash_archive, [submissions_dir, check_submission_hash] )
yield archive.guess_mime
yield ( archive.extract, [submissions_dir] )
@ -122,14 +122,14 @@ def readmail(fp):
return cnt, frm, subject, ref
def check_mail(cnt, submissions_dir, check_content=False):
def check_mail(cnt, submissions_dir, check_content=False, check_submission_hash=None):
results = []
# sentinel
results.append([(None, [cnt])])
lvl = 0
for check in gen_checks(submissions_dir=submissions_dir, check_content=check_content):
for check in gen_checks(submissions_dir=submissions_dir, check_content=check_content, check_submission_hash=check_submission_hash):
lvl += 1
curr = []
curc = []
@ -207,6 +207,9 @@ if __name__ == '__main__':
parser.add_argument('--submissions', default="/tmp/rendus",
help="directory where store submissions")
parser.add_argument('--expected-submission-hash',
help="imposed tarball hash")
parser.add_argument('--beta', action="store_true",
help="enable beta features")
@ -226,4 +229,4 @@ if __name__ == '__main__':
BETA = args.beta
cnt, frm, subject, ref = readmail(sys.stdin.buffer)
respondmail(frm, subject, ref, [c for c in check_mail(cnt, submissions_dir=args.submissions, check_content=not args.sign)])
respondmail(frm, subject, ref, [c for c in check_mail(cnt, submissions_dir=args.submissions, check_content=not args.sign, check_submission_hash=args.expected_submission_hash)])

Loading…
Cancel
Save