Skip to content

Commit faa6b34

Browse files
committed
Replace django-clamd with django-safe-filefield #TMMA-504
1 parent dceb6e1 commit faa6b34

File tree

8 files changed

+38
-26
lines changed

8 files changed

+38
-26
lines changed

browser/models.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from django.utils import timezone
1717
from django.conf import settings
1818

19+
from safe_filefield.models import SafeFileField
1920
from mptt.models import MPTTModel, TreeForeignKey
2021

2122
logger = logging.getLogger(__name__)
@@ -140,7 +141,10 @@ class Upload(models.Model):
140141

141142
user = models.ForeignKey(User, null=False, blank=False,
142143
related_name="uploads", on_delete=models.CASCADE)
143-
abstracts_upload = models.FileField(upload_to=get_user_upload_location)
144+
abstracts_upload = SafeFileField(upload_to=get_user_upload_location,
145+
allowed_extensions=('txt', 'zip', 'bz'),
146+
check_content_type=True,
147+
scan_viruses=settings.CLAMD_ENABLED)
144148
file_format = models.CharField(choices=ABSTRACT_FORMATS, max_length=6, default=OVID)
145149

146150
def __str__(self):

deploy/Dockerfile

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ RUN apt update -y && \
2323
gcc \
2424
g++ \
2525
libffi-dev \
26+
# ref: https://github.com/mixkorshun/django-safe-filefield requires libmagic
27+
libmagic1 \
2628
libpq-dev \
2729
libssl-dev \
2830
pkg-config \

deploy/deploy-centos.sh

+3
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ yum -y install clamd
7979
# Installed on prod
8080
yum -y install clamav-data
8181
yum -y install clamav-devel
82+
# ref: https://github.com/mixkorshun/django-safe-filefield requires libmagic
83+
# yum -y install file-devel # TODO: Review if also required
84+
yum -y install file-libs
8285

8386
setsebool -P antivirus_can_scan_system 1
8487
setsebool -P daemons_enable_cluster_mode 1

requirements/dev.txt

+7-6
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ clamd==1.0.2 \
198198
--hash=sha256:d82a2fd814684a35a1b31feadafb2e69c8ebde9403613f6bdaa5d877c0f29560
199199
# via
200200
# -r requirements/test.txt
201-
# django-clamd
201+
# django-safe-filefield
202202
click==8.1.7 \
203203
--hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \
204204
--hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de
@@ -272,18 +272,14 @@ django==4.2.10 \
272272
# via
273273
# -r requirements/test.txt
274274
# django-autocomplete-light
275-
# django-clamd
276275
# django-debug-toolbar
277276
# django-hcaptcha-field
278277
# django-js-asset
279278
# django-rq
279+
# django-safe-filefield
280280
django-autocomplete-light==3.9.7 \
281281
--hash=sha256:a34f192ac438c4df056dbfd399550799ddc631c4661960134ded924648770373
282282
# via -r requirements/test.txt
283-
django-clamd==0.4.0 \
284-
--hash=sha256:47adaf6f8156ee613dde9e0d88adc847aa3df021dabf1a4d1aec34b47de8da11 \
285-
--hash=sha256:5bde6c34b42e69972677fb4a7466b032377940c8727ee6ede41eb3b9807dcce4
286-
# via -r requirements/test.txt
287283
django-debug-toolbar==4.3.0 \
288284
--hash=sha256:0b0dddee5ea29b9cb678593bc0d7a6d76b21d7799cb68e091a2148341a80f3c4 \
289285
--hash=sha256:e09b7dcb8417b743234dfc57c95a7c1d1d87a88844abd13b4c5387f807b31bf6
@@ -313,6 +309,10 @@ django-rq==2.10.1 \
313309
--hash=sha256:c69af7b2b7d5745847cdaa80c58b70e564ea81c90712a11362d0bd8c71f5ce94 \
314310
--hash=sha256:cf588efe248e275ef176190a7db49a33281049ff3857153577c2c49320bfd4bb
315311
# via -r requirements/test.txt
312+
django-safe-filefield==1.0.0 \
313+
--hash=sha256:d08b0034e845ba78d2ab6e144b305bb5d7ee4a999c14861de22f8dc905a1ffe2 \
314+
--hash=sha256:f27b7770693b28716a5db8bd81f83b9bd501067284f6b69bf67a9ca4f21e415d
315+
# via -r requirements/test.txt
316316
easyprocess==1.1 \
317317
--hash=sha256:82eed523a0a5eb12a81fa4eacd9f342caeb3f900eb4b798740e6696ad07e63f9 \
318318
--hash=sha256:885898302a57aab948973e8b5d32a4229392b9fb2d986ab1d4ffd590e5ba90ec
@@ -760,6 +760,7 @@ python-magic==0.4.27 \
760760
--hash=sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3
761761
# via
762762
# -r requirements/test.txt
763+
# django-safe-filefield
763764
# xtract
764765
pytz==2024.1 \
765766
--hash=sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812 \

requirements/requirements.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
# This is an implicit value, here for clarity
22
--index-url https://pypi.python.org/simple/
33
Bottleneck>=1.3.6
4-
django-clamd>=0.4.0
54
django-mptt>=0.14.0
65
django-redis-cache>=3.0.1
76
django-registration-redux>=2.12
87
django-rq>=2.7.0
98
django-autocomplete-light>=3.9.4
109
Django<4.3
1110
django-hcaptcha-field>=1.4.0
11+
django-safe-filefield>=1.0.0
1212
hiredis>=2.2.2
1313
lxml>=4.9.2
1414
more-itertools>=9.1.0

requirements/requirements.txt

+7-6
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ bottleneck==1.3.7 \
7676
clamd==1.0.2 \
7777
--hash=sha256:5c32546b7d1eb00fd6be00a889d79e00fbf980ed082826ccfa369bce3dcff5e7 \
7878
--hash=sha256:d82a2fd814684a35a1b31feadafb2e69c8ebde9403613f6bdaa5d877c0f29560
79-
# via django-clamd
79+
# via django-safe-filefield
8080
click==8.1.7 \
8181
--hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \
8282
--hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de
@@ -87,17 +87,13 @@ django==4.2.10 \
8787
# via
8888
# -r requirements/requirements.in
8989
# django-autocomplete-light
90-
# django-clamd
9190
# django-hcaptcha-field
9291
# django-js-asset
9392
# django-rq
93+
# django-safe-filefield
9494
django-autocomplete-light==3.9.7 \
9595
--hash=sha256:a34f192ac438c4df056dbfd399550799ddc631c4661960134ded924648770373
9696
# via -r requirements/requirements.in
97-
django-clamd==0.4.0 \
98-
--hash=sha256:47adaf6f8156ee613dde9e0d88adc847aa3df021dabf1a4d1aec34b47de8da11 \
99-
--hash=sha256:5bde6c34b42e69972677fb4a7466b032377940c8727ee6ede41eb3b9807dcce4
100-
# via -r requirements/requirements.in
10197
django-hcaptcha-field==1.4.0 \
10298
--hash=sha256:36001030f53af709db3be01bf1d25023706b701bb7130f67f2aa58900b20df42 \
10399
--hash=sha256:bcf2f698b1dc5f8ce411c11696df5785298df0cbd2fa564b09bd96609060bf34
@@ -121,6 +117,10 @@ django-rq==2.10.1 \
121117
--hash=sha256:c69af7b2b7d5745847cdaa80c58b70e564ea81c90712a11362d0bd8c71f5ce94 \
122118
--hash=sha256:cf588efe248e275ef176190a7db49a33281049ff3857153577c2c49320bfd4bb
123119
# via -r requirements/requirements.in
120+
django-safe-filefield==1.0.0 \
121+
--hash=sha256:d08b0034e845ba78d2ab6e144b305bb5d7ee4a999c14861de22f8dc905a1ffe2 \
122+
--hash=sha256:f27b7770693b28716a5db8bd81f83b9bd501067284f6b69bf67a9ca4f21e415d
123+
# via -r requirements/requirements.in
124124
hiredis==2.3.2 \
125125
--hash=sha256:01b6c24c0840ac7afafbc4db236fd55f56a9a0919a215c25a238f051781f4772 \
126126
--hash=sha256:02fc71c8333586871602db4774d3a3e403b4ccf6446dc4603ec12df563127cee \
@@ -457,6 +457,7 @@ python-magic==0.4.27 \
457457
--hash=sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3
458458
# via
459459
# -r requirements/requirements.in
460+
# django-safe-filefield
460461
# xtract
461462
pytz==2024.1 \
462463
--hash=sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812 \

requirements/test.txt

+7-6
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ clamd==1.0.2 \
186186
--hash=sha256:d82a2fd814684a35a1b31feadafb2e69c8ebde9403613f6bdaa5d877c0f29560
187187
# via
188188
# -r requirements/requirements.txt
189-
# django-clamd
189+
# django-safe-filefield
190190
click==8.1.7 \
191191
--hash=sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28 \
192192
--hash=sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de
@@ -256,17 +256,13 @@ django==4.2.10 \
256256
# via
257257
# -r requirements/requirements.txt
258258
# django-autocomplete-light
259-
# django-clamd
260259
# django-hcaptcha-field
261260
# django-js-asset
262261
# django-rq
262+
# django-safe-filefield
263263
django-autocomplete-light==3.9.7 \
264264
--hash=sha256:a34f192ac438c4df056dbfd399550799ddc631c4661960134ded924648770373
265265
# via -r requirements/requirements.txt
266-
django-clamd==0.4.0 \
267-
--hash=sha256:47adaf6f8156ee613dde9e0d88adc847aa3df021dabf1a4d1aec34b47de8da11 \
268-
--hash=sha256:5bde6c34b42e69972677fb4a7466b032377940c8727ee6ede41eb3b9807dcce4
269-
# via -r requirements/requirements.txt
270266
django-hcaptcha-field==1.4.0 \
271267
--hash=sha256:36001030f53af709db3be01bf1d25023706b701bb7130f67f2aa58900b20df42 \
272268
--hash=sha256:bcf2f698b1dc5f8ce411c11696df5785298df0cbd2fa564b09bd96609060bf34
@@ -292,6 +288,10 @@ django-rq==2.10.1 \
292288
--hash=sha256:c69af7b2b7d5745847cdaa80c58b70e564ea81c90712a11362d0bd8c71f5ce94 \
293289
--hash=sha256:cf588efe248e275ef176190a7db49a33281049ff3857153577c2c49320bfd4bb
294290
# via -r requirements/requirements.txt
291+
django-safe-filefield==1.0.0 \
292+
--hash=sha256:d08b0034e845ba78d2ab6e144b305bb5d7ee4a999c14861de22f8dc905a1ffe2 \
293+
--hash=sha256:f27b7770693b28716a5db8bd81f83b9bd501067284f6b69bf67a9ca4f21e415d
294+
# via -r requirements/requirements.txt
295295
easyprocess==1.1 \
296296
--hash=sha256:82eed523a0a5eb12a81fa4eacd9f342caeb3f900eb4b798740e6696ad07e63f9 \
297297
--hash=sha256:885898302a57aab948973e8b5d32a4229392b9fb2d986ab1d4ffd590e5ba90ec
@@ -675,6 +675,7 @@ python-magic==0.4.27 \
675675
--hash=sha256:c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3
676676
# via
677677
# -r requirements/requirements.txt
678+
# django-safe-filefield
678679
# xtract
679680
pytz==2024.1 \
680681
--hash=sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812 \

temmpo/settings/base.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
'django.contrib.humanize',
6363
]
6464

65-
THIRD_PARTY_APPS = ['registration', 'mptt', 'django_rq', 'django_clamd', 'hcaptcha_field']
65+
THIRD_PARTY_APPS = ['registration', 'mptt', 'django_rq', 'safe_filefield', 'hcaptcha_field']
6666
LOCAL_APPS = ['browser', 'dal', 'dal_select2',] # 'dal','dal_select2' are third party apps that need to be installed before 'django.contrib.admin'
6767

6868
INSTALLED_APPS = LOCAL_APPS + DEFAULT_APPS + THIRD_PARTY_APPS
@@ -232,11 +232,11 @@
232232
},
233233
},
234234
}
235-
236-
CLAMD_SOCKET = '/var/run/clamd.scan/clamd.sock'
237-
CLAMD_USE_TCP = False
238-
CLAMD_TCP_SOCKET = 3310
239-
CLAMD_TCP_ADDR = '127.0.0.1'
235+
# ref: https://github.com/mixkorshun/django-safe-filefield
236+
CLAMAV_SOCKET = '/var/run/clamd.scan/clamd.sock'
237+
# CLAMAV_TIMEOUT
238+
# Use to disable scanning of files in environments where it is not supported,
239+
# e.g. a bare bones GitHub action environment for example
240240
CLAMD_ENABLED = True
241241

242242
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'

0 commit comments

Comments
 (0)