|
26 | 26 | data_package_marti_api = Blueprint("data_package_marti_api", __name__) |
27 | 27 |
|
28 | 28 |
|
| 29 | +def save_data_package_file(file, filename: str = None, username: str = None, eud_uid: str = None): |
| 30 | + file_hash = request.args.get("hash") |
| 31 | + if not file_hash: |
| 32 | + sha256 = hashlib.sha256() |
| 33 | + if type(file) == bytes: |
| 34 | + sha256.update(file) |
| 35 | + file_hash = sha256.hexdigest() |
| 36 | + filename, extension = os.path.splitext(secure_filename(filename)) |
| 37 | + with open(os.path.join(app.config.get("UPLOAD_FOLDER"), f"{file_hash}.zip"), "wb") as f: |
| 38 | + f.write(file) |
| 39 | + else: |
| 40 | + sha256.update(file.stream.read()) |
| 41 | + file.stream.seek(0) |
| 42 | + file_hash = sha256.hexdigest() |
| 43 | + file.save(os.path.join(app.config.get("UPLOAD_FOLDER"), f"{file_hash}.zip")) |
| 44 | + filename, extension = os.path.splitext(secure_filename(file.filename)) |
| 45 | + logger.debug("Got file: {} - {}".format(file.filename, file_hash)) |
| 46 | + |
| 47 | + file_size = os.path.getsize(os.path.join(app.config.get("UPLOAD_FOLDER"), f"{file_hash}.zip")) |
| 48 | + save_data_package_to_db( |
| 49 | + f"{filename}.zip", file_hash, "application/x-zip-compressed", file_size, username, eud_uid |
| 50 | + ) |
| 51 | + |
| 52 | + return file_hash |
| 53 | + |
| 54 | + |
29 | 55 | def save_data_package_to_db( |
30 | 56 | filename: str = None, |
31 | 57 | sha256_hash: str = None, |
32 | 58 | mimetype: str = "application/zip", |
33 | 59 | file_size: int = 0, |
| 60 | + username: str = None, |
| 61 | + eud_uid: str = None, |
34 | 62 | ): |
35 | 63 | try: |
36 | 64 | data_package = DataPackage() |
37 | 65 | data_package.filename = filename |
38 | 66 | data_package.hash = sha256_hash |
39 | | - data_package.creator_uid = ( |
40 | | - request.args.get("creatorUid") if request.args.get("creatorUid") else None |
41 | | - ) |
| 67 | + data_package.creator_uid = request.args.get("CreatorUid") # iTAK |
| 68 | + data_package.creator_uid = request.args.get("creatorUid") # All other TAK clients |
42 | 69 | data_package.submission_user = current_user.id if current_user.is_authenticated else None |
43 | 70 | data_package.submission_time = datetime.now(timezone.utc) |
44 | 71 | data_package.mime_type = mimetype |
45 | 72 | data_package.size = file_size |
| 73 | + data_package.creator_uid = eud_uid |
| 74 | + |
| 75 | + if username: |
| 76 | + user = app.security.datastore.find_user(username=username) |
| 77 | + if user: |
| 78 | + data_package.submission_user = user.id |
| 79 | + |
46 | 80 | db.session.add(data_package) |
47 | 81 | db.session.commit() |
48 | 82 | except sqlalchemy.exc.IntegrityError as e: |
@@ -169,25 +203,8 @@ def data_package_share(): |
169 | 203 |
|
170 | 204 | if extension != "zip": |
171 | 205 | file_hash = create_data_package_zip(file) |
172 | | - |
173 | 206 | else: |
174 | | - file_hash = request.args.get("hash") |
175 | | - if not file_hash: |
176 | | - sha256 = hashlib.sha256() |
177 | | - sha256.update(file.stream.read()) |
178 | | - file.stream.seek(0) |
179 | | - file_hash = sha256.hexdigest() |
180 | | - logger.debug("got sha256 {}".format(file_hash)) |
181 | | - |
182 | | - logger.debug("Got file: {} - {}".format(file.filename, file_hash)) |
183 | | - |
184 | | - file.save(os.path.join(app.config.get("UPLOAD_FOLDER"), f"{file_hash}.zip")) |
185 | | - |
186 | | - filename, extension = os.path.splitext(secure_filename(file.filename)) |
187 | | - file_size = os.path.getsize( |
188 | | - os.path.join(app.config.get("UPLOAD_FOLDER"), f"{file_hash}.zip") |
189 | | - ) |
190 | | - save_data_package_to_db(f"{filename}.zip", file_hash, file.content_type, file_size) |
| 207 | + file_hash = save_data_package_file(file) |
191 | 208 |
|
192 | 209 | url = urlparse(request.url_root) |
193 | 210 | return ( |
|
0 commit comments