diff --git a/.env.dev b/.env.dev index 37b509b5..4c463ee3 100644 --- a/.env.dev +++ b/.env.dev @@ -1,5 +1,4 @@ MAFIASI_DEBUG=True -MAFIASI_ENABLE_JABBER_INTEGRATION=False MAFIASI_ENABLE_LDAP_AUTH_BACKEND=False MAFIASI_ENABLE_LDAP_REGISTRATION=False MAFIASI_ENABLE_EP_INTEGRATION=False diff --git a/.env.test b/.env.test index 2233b2c0..5f4fae38 100644 --- a/.env.test +++ b/.env.test @@ -1,6 +1,5 @@ MAFIASI_DEBUG=True MAFIASI_TESTING=True -MAFIASI_ENABLE_JABBER_INTEGRATION=False MAFIASI_ENABLE_LDAP_AUTH_BACKEND=False MAFIASI_ENABLE_LDAP_REGISTRATION=False MAFIASI_ENABLE_MUMBLE_INTEGRATION=False diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e742a681..382f3cc3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,6 +30,7 @@ jobs: run: pip install pipenv - name: install project dependencies run: | + sudo apt update sudo apt install -y --no-install-recommends libgpgme-dev libsasl2-dev libldap2-dev libmagic-dev libjpeg-dev libgraphviz-dev gettext pipenv sync --dev - name: run tests @@ -47,6 +48,7 @@ jobs: run: pip install pipenv - name: install project dependencies run: | + sudo apt update sudo apt install -y --no-install-recommends libgpgme-dev libsasl2-dev libldap2-dev libmagic-dev libjpeg-dev libgraphviz-dev gettext pipenv sync --dev - name: compile i18n messages diff --git a/Dockerfile b/Dockerfile index 493bb6c2..193b4804 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,8 +26,7 @@ ADD . /app/src # Put configs in appropriate locations RUN cp docker/nginx.conf /etc/nginx/sites-enabled/default && \ cp docker/uwsgi.ini /etc/uwsgi/mafiasi-dashboard.ini && \ - cp docker/supervisor.conf /etc/supervisor/conf.d/app.conf && \ - touch /app/config/jabber_cert_fingerprint + cp docker/supervisor.conf /etc/supervisor/conf.d/app.conf RUN mkdir -p /app/static/mathjax RUN cp -rT /usr/share/javascript/mathjax /app/static/mathjax diff --git a/Pipfile.lock b/Pipfile.lock index 23b78ed7..5b3e91b3 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -37,11 +37,11 @@ }, "certifi": { "hashes": [ - "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", - "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], "markers": "python_version >= '3.6'", - "version": "==2023.5.7" + "version": "==2023.7.22" }, "cffi": { "hashes": [ @@ -114,109 +114,113 @@ }, "charset-normalizer": { "hashes": [ - "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", - "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", - "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", - "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", - "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", - "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", - "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", - "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", - "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", - "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", - "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", - "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", - "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", - "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", - "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", - "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", - "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", - "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", - "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", - "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", - "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", - "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", - "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", - "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", - "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", - "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", - "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", - "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", - "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", - "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", - "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", - "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", - "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", - "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", - "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", - "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", - "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", - "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", - "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", - "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", - "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", - "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", - "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", - "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", - "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", - "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", - "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", - "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", - "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", - "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", - "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", - "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", - "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", - "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", - "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", - "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", - "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", - "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", - "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", - "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", - "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", - "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", - "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", - "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", - "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", - "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", - "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", - "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", - "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", - "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", - "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", - "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", - "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", - "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", - "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.1.0" + "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96", + "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c", + "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710", + "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706", + "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020", + "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252", + "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad", + "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329", + "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a", + "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f", + "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6", + "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4", + "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a", + "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46", + "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2", + "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23", + "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace", + "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd", + "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982", + "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10", + "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2", + "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea", + "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09", + "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5", + "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149", + "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489", + "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9", + "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80", + "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592", + "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3", + "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6", + "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed", + "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c", + "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200", + "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a", + "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e", + "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d", + "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6", + "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623", + "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669", + "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3", + "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa", + "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9", + "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2", + "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f", + "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1", + "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4", + "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a", + "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8", + "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3", + "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029", + "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f", + "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959", + "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22", + "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7", + "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952", + "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346", + "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e", + "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d", + "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299", + "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd", + "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a", + "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3", + "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037", + "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94", + "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c", + "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858", + "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a", + "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449", + "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c", + "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918", + "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1", + "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c", + "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac", + "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa" + ], + "markers": "python_version >= '3.7'", + "version": "==3.2.0" }, "cryptography": { "hashes": [ - "sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db", - "sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a", - "sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039", - "sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c", - "sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3", - "sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485", - "sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c", - "sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca", - "sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5", - "sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5", - "sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3", - "sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb", - "sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43", - "sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31", - "sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc", - "sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b", - "sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006", - "sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a", - "sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699" + "sha256:01f1d9e537f9a15b037d5d9ee442b8c22e3ae11ce65ea1f3316a41c78756b711", + "sha256:079347de771f9282fbfe0e0236c716686950c19dee1b76240ab09ce1624d76d7", + "sha256:182be4171f9332b6741ee818ec27daff9fb00349f706629f5cbf417bd50e66fd", + "sha256:192255f539d7a89f2102d07d7375b1e0a81f7478925b3bc2e0549ebf739dae0e", + "sha256:2a034bf7d9ca894720f2ec1d8b7b5832d7e363571828037f9e0c4f18c1b58a58", + "sha256:342f3767e25876751e14f8459ad85e77e660537ca0a066e10e75df9c9e9099f0", + "sha256:439c3cc4c0d42fa999b83ded80a9a1fb54d53c58d6e59234cfe97f241e6c781d", + "sha256:49c3222bb8f8e800aead2e376cbef687bc9e3cb9b58b29a261210456a7783d83", + "sha256:674b669d5daa64206c38e507808aae49904c988fa0a71c935e7006a3e1e83831", + "sha256:7a9a3bced53b7f09da251685224d6a260c3cb291768f54954e28f03ef14e3766", + "sha256:7af244b012711a26196450d34f483357e42aeddb04128885d95a69bd8b14b69b", + "sha256:7d230bf856164de164ecb615ccc14c7fc6de6906ddd5b491f3af90d3514c925c", + "sha256:84609ade00a6ec59a89729e87a503c6e36af98ddcd566d5f3be52e29ba993182", + "sha256:9a6673c1828db6270b76b22cc696f40cde9043eb90373da5c2f8f2158957f42f", + "sha256:9b6d717393dbae53d4e52684ef4f022444fc1cce3c48c38cb74fca29e1f08eaa", + "sha256:9c3fe6534d59d071ee82081ca3d71eed3210f76ebd0361798c74abc2bcf347d4", + "sha256:a719399b99377b218dac6cf547b6ec54e6ef20207b6165126a280b0ce97e0d2a", + "sha256:b332cba64d99a70c1e0836902720887fb4529ea49ea7f5462cf6640e095e11d2", + "sha256:d124682c7a23c9764e54ca9ab5b308b14b18eba02722b8659fb238546de83a76", + "sha256:d73f419a56d74fef257955f51b18d046f3506270a5fd2ac5febbfa259d6c0fa5", + "sha256:f0dc40e6f7aa37af01aba07277d3d64d5a03dc66d682097541ec4da03cc140ee", + "sha256:f14ad275364c8b4e525d018f6716537ae7b6d369c094805cae45300847e0894f", + "sha256:f772610fe364372de33d76edcd313636a25684edb94cee53fd790195f5989d14" ], "markers": "python_version >= '3.7'", - "version": "==41.0.1" + "version": "==41.0.2" }, "cryptojwt": { "hashes": [ @@ -258,11 +262,11 @@ }, "django-auth-ldap": { "hashes": [ - "sha256:6d18e747e1d9680360357945b03e0d16a3f50feea94176e2552f29ccf8c2973c", - "sha256:788b5b1ee70054681d7fae7d085deaa76f2fa6f64cc9fe3dd79daef62c2f6121" + "sha256:797931ac5d55c4ca14c179d5892420cc2a98aa81e44323d595f5419c1b45c306", + "sha256:da85f315a05b1327575aa67075049fab8753ddc05521a6fc6195755ff9ab72fd" ], "index": "pypi", - "version": "==4.3.0" + "version": "==4.4.0" }, "django-cache-url": { "hashes": [ @@ -470,11 +474,11 @@ }, "marshmallow": { "hashes": [ - "sha256:90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78", - "sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b" + "sha256:5d2371bbe42000f2b3fb5eaa065224df7d8f8597bc19a1bbfa5bfe7fba8da889", + "sha256:684939db93e80ad3561392f47be0230743131560a41c5110684c16e21ade0a5c" ], - "markers": "python_version >= '3.7'", - "version": "==3.19.0" + "markers": "python_version >= '3.8'", + "version": "==3.20.1" }, "nameparser": { "hashes": [ @@ -680,45 +684,45 @@ }, "pydantic": { "hashes": [ - "sha256:07293ab08e7b4d3c9d7de4949a0ea571f11e4557d19ea24dd3ae0c524c0c334d", - "sha256:0a2aabdc73c2a5960e87c3ffebca6ccde88665616d1fd6d3db3178ef427b267a", - "sha256:0da48717dc9495d3a8f215e0d012599db6b8092db02acac5e0d58a65248ec5bc", - "sha256:128d9453d92e6e81e881dd7e2484e08d8b164da5507f62d06ceecf84bf2e21d3", - "sha256:2196c06484da2b3fded1ab6dbe182bdabeb09f6318b7fdc412609ee2b564c49a", - "sha256:2e9aec8627a1a6823fc62fb96480abe3eb10168fd0d859ee3d3b395105ae19a7", - "sha256:3283b574b01e8dbc982080d8287c968489d25329a463b29a90d4157de4f2baaf", - "sha256:3c52eb595db83e189419bf337b59154bdcca642ee4b2a09e5d7797e41ace783f", - "sha256:4b466a23009ff5cdd7076eb56aca537c745ca491293cc38e72bf1e0e00de5b91", - "sha256:517a681919bf880ce1dac7e5bc0c3af1e58ba118fd774da2ffcd93c5f96eaece", - "sha256:5f8bbaf4013b9a50e8100333cc4e3fa2f81214033e05ac5aa44fa24a98670a29", - "sha256:6257bb45ad78abacda13f15bde5886efd6bf549dd71085e64b8dcf9919c38b60", - "sha256:67195274fd27780f15c4c372f4ba9a5c02dad6d50647b917b6a92bf00b3d301a", - "sha256:6cafde02f6699ce4ff643417d1a9223716ec25e228ddc3b436fe7e2d25a1f305", - "sha256:73ef93e5e1d3c8e83f1ff2e7fdd026d9e063c7e089394869a6e2985696693766", - "sha256:7845b31959468bc5b78d7b95ec52fe5be32b55d0d09983a877cca6aedc51068f", - "sha256:7847ca62e581e6088d9000f3c497267868ca2fa89432714e21a4fb33a04d52e8", - "sha256:7e1d5290044f620f80cf1c969c542a5468f3656de47b41aa78100c5baa2b8276", - "sha256:7ee829b86ce984261d99ff2fd6e88f2230068d96c2a582f29583ed602ef3fc2c", - "sha256:83fcff3c7df7adff880622a98022626f4f6dbce6639a88a15a3ce0f96466cb60", - "sha256:939328fd539b8d0edf244327398a667b6b140afd3bf7e347cf9813c736211896", - "sha256:95c70da2cd3b6ddf3b9645ecaa8d98f3d80c606624b6d245558d202cd23ea3be", - "sha256:963671eda0b6ba6926d8fc759e3e10335e1dc1b71ff2a43ed2efd6996634dafb", - "sha256:970b1bdc6243ef663ba5c7e36ac9ab1f2bfecb8ad297c9824b542d41a750b298", - "sha256:9863b9420d99dfa9c064042304868e8ba08e89081428a1c471858aa2af6f57c4", - "sha256:ad428e92ab68798d9326bb3e5515bc927444a3d71a93b4a2ca02a8a5d795c572", - "sha256:b48d3d634bca23b172f47f2335c617d3fcb4b3ba18481c96b7943a4c634f5c8d", - "sha256:b9cd67fb763248cbe38f0593cd8611bfe4b8ad82acb3bdf2b0898c23415a1f82", - "sha256:d111a21bbbfd85c17248130deac02bbd9b5e20b303338e0dbe0faa78330e37e0", - "sha256:e1aa5c2410769ca28aa9a7841b80d9d9a1c5f223928ca8bec7e7c9a34d26b1d4", - "sha256:e692dec4a40bfb40ca530e07805b1208c1de071a18d26af4a2a0d79015b352ca", - "sha256:e7c9900b43ac14110efa977be3da28931ffc74c27e96ee89fbcaaf0b0fe338e1", - "sha256:eec39224b2b2e861259d6f3c8b6290d4e0fbdce147adb797484a42278a1a486f", - "sha256:f0b7628fb8efe60fe66fd4adadd7ad2304014770cdc1f4934db41fe46cc8825f", - "sha256:f50e1764ce9353be67267e7fd0da08349397c7db17a562ad036aa7c8f4adfdb6", - "sha256:fab81a92f42d6d525dd47ced310b0c3e10c416bbfae5d59523e63ea22f82b31e" + "sha256:0fe8a415cea8f340e7a9af9c54fc71a649b43e8ca3cc732986116b3cb135d303", + "sha256:1289c180abd4bd4555bb927c42ee42abc3aee02b0fb2d1223fb7c6e5bef87dbe", + "sha256:1eb2085c13bce1612da8537b2d90f549c8cbb05c67e8f22854e201bde5d98a47", + "sha256:2031de0967c279df0d8a1c72b4ffc411ecd06bac607a212892757db7462fc494", + "sha256:2a7bac939fa326db1ab741c9d7f44c565a1d1e80908b3797f7f81a4f86bc8d33", + "sha256:2d5a58feb9a39f481eda4d5ca220aa8b9d4f21a41274760b9bc66bfd72595b86", + "sha256:2f9a6fab5f82ada41d56b0602606a5506aab165ca54e52bc4545028382ef1c5d", + "sha256:2fcfb5296d7877af406ba1547dfde9943b1256d8928732267e2653c26938cd9c", + "sha256:549a8e3d81df0a85226963611950b12d2d334f214436a19537b2efed61b7639a", + "sha256:598da88dfa127b666852bef6d0d796573a8cf5009ffd62104094a4fe39599565", + "sha256:5d1197e462e0364906cbc19681605cb7c036f2475c899b6f296104ad42b9f5fb", + "sha256:69328e15cfda2c392da4e713443c7dbffa1505bc9d566e71e55abe14c97ddc62", + "sha256:6a9dfa722316f4acf4460afdf5d41d5246a80e249c7ff475c43a3a1e9d75cf62", + "sha256:6b30bcb8cbfccfcf02acb8f1a261143fab622831d9c0989707e0e659f77a18e0", + "sha256:6c076be61cd0177a8433c0adcb03475baf4ee91edf5a4e550161ad57fc90f523", + "sha256:771735dc43cf8383959dc9b90aa281f0b6092321ca98677c5fb6125a6f56d58d", + "sha256:795e34e6cc065f8f498c89b894a3c6da294a936ee71e644e4bd44de048af1405", + "sha256:87afda5539d5140cb8ba9e8b8c8865cb5b1463924d38490d73d3ccfd80896b3f", + "sha256:8fb2aa3ab3728d950bcc885a2e9eff6c8fc40bc0b7bb434e555c215491bcf48b", + "sha256:a1fcb59f2f355ec350073af41d927bf83a63b50e640f4dbaa01053a28b7a7718", + "sha256:a5e7add47a5b5a40c49b3036d464e3c7802f8ae0d1e66035ea16aa5b7a3923ed", + "sha256:a73f489aebd0c2121ed974054cb2759af8a9f747de120acd2c3394cf84176ccb", + "sha256:ab26038b8375581dc832a63c948f261ae0aa21f1d34c1293469f135fa92972a5", + "sha256:b0d191db0f92dfcb1dec210ca244fdae5cbe918c6050b342d619c09d31eea0cc", + "sha256:b749a43aa51e32839c9d71dc67eb1e4221bb04af1033a32e3923d46f9effa942", + "sha256:b7ccf02d7eb340b216ec33e53a3a629856afe1c6e0ef91d84a4e6f2fb2ca70fe", + "sha256:ba5b2e6fe6ca2b7e013398bc7d7b170e21cce322d266ffcd57cca313e54fb246", + "sha256:ba5c4a8552bff16c61882db58544116d021d0b31ee7c66958d14cf386a5b5350", + "sha256:c79e6a11a07da7374f46970410b41d5e266f7f38f6a17a9c4823db80dadf4303", + "sha256:ca48477862372ac3770969b9d75f1bf66131d386dba79506c46d75e6b48c1e09", + "sha256:dea7adcc33d5d105896401a1f37d56b47d443a2b2605ff8a969a0ed5543f7e33", + "sha256:e0a16d274b588767602b7646fa05af2782576a6cf1022f4ba74cbb4db66f6ca8", + "sha256:e4129b528c6baa99a429f97ce733fff478ec955513630e61b49804b6cf9b224a", + "sha256:e5f805d2d5d0a41633651a73fa4ecdd0b3d7a49de4ec3fadf062fe16501ddbf1", + "sha256:ef6c96b2baa2100ec91a4b428f80d8f28a3c9e53568219b6c298c1125572ebc6", + "sha256:fdbdd1d630195689f325c9ef1a12900524dceb503b00a987663ff4f58669b93d" ], "markers": "python_version >= '3.7'", - "version": "==1.10.9" + "version": "==1.10.12" }, "pygpgme": { "hashes": [ @@ -783,101 +787,101 @@ }, "rapidfuzz": { "hashes": [ - "sha256:0843c53d54d5b7d6122d8f1d7574d8c91a7aacc5c316f74d6e33d98aec82949d", - "sha256:086a2d84c2e497e3ab160ccf164e319bca874d9383d008fcadf91ede8ac7997f", - "sha256:09a6f5cd9f1282da49b8d0747c40f3fea2d64ab5e4c2cc2295baf87ff7a0d062", - "sha256:0de229cb613be060580c71c1674acbde57921c7ed33d7a726e071a2562924113", - "sha256:10313075642a9f1f948d356f4f0803ae28a496d7967b466b9cae1a4be8aa4df3", - "sha256:10f56af1d46fbeaaa0dc50901c2dc439c7a455cfdac2f1acf6cffeb65ae82c48", - "sha256:1465ea085154378e69bf4bc5e27bdac5c94684416882ace31865232adc9239a2", - "sha256:15260263a0c7bffac934a53b6622d77e06e10929ee4d2e62ac6f70c13988f351", - "sha256:167dbce2da6bb5b73d43e53434c5a9d7d1214b658b315420e44044782f4c482b", - "sha256:16c506bac2e0a6f6581b334a7802c2f0d8343ec1d77e5cf9452c33d6219abef8", - "sha256:17b017f9e1b88dfd6d9b03170ef8e86477de0d9d37fbfcbe72ca070cacbe1b65", - "sha256:17e4cbe6632aae7c35101c4b7c498e83f6eacf61be0def4ff98167df30dc69ca", - "sha256:25eea5c8006b6c8747ca204675c9e939f3c4d27167fb43b2aa211443d34f9abd", - "sha256:32a5c47b5153f25eb512dbb91f9850225d2dcfb3404a1c48406726c7732b0726", - "sha256:351d253fdee62d6d0e80c75f0505accc1ce8cc73a50779c60986ef21c92f20f9", - "sha256:362e366e79fcc9a8866b41f20ef4d2987a06f8b134096e659594c059aa8a6d88", - "sha256:39c7d0dbd77a7f28ff85a1dff2afb2ed73e5cd81cca3f654450ed339a271c0ab", - "sha256:3b3e953dcef0302eeb4fe8c7c4907e50d175199fc07da05ad6bd1d8d141ff138", - "sha256:3f2cd9a3760080876fc59edb26926e51d6db44dea65e85f1eb04aa5f58c3bc41", - "sha256:4019def8a18bc867ac61f08a542bf474a7a9b3f662f5d5cd169c9135866562f5", - "sha256:408007b4bc5a0a0cb9bfcdcc8cffa9b71fec6ee53ccdf9c26b57539f7e264ab5", - "sha256:49d900da023eeb3bfbe9feee126312eb9fd0458129aa5a581e4d8d8bf4483d14", - "sha256:4a64ddfb7084b678da7778c1263aee2baae5a2ca55ec5589a022defc38103eb1", - "sha256:4e951c874a0e5b375b2af9b5f264eefc679c0685c166ee0641e703ef0795509b", - "sha256:51bb8f7aa4fe45618e75cdccf08491c752a7f137ffbf7d3afd1809791ac8c326", - "sha256:51f21f37aec6bc117e9083181ddc3cbbcbf56b6506492b128d8e836d3545ca80", - "sha256:53e3c588e7ea158fa80095dd0ff53f49e2ede9a8d71a3a5b964ca045d845a9b9", - "sha256:58ca539cc6ce385d650138a9b1908b05622c2dd08a23d5aea4890523ef3774d5", - "sha256:5a371846f45ed9d24927a8d5222884536c1e171543396b36250fafb2e848bc92", - "sha256:5d4d509e9aa011e1be5e4da7c5062dc4fc3688714687110536925980b3d03ac6", - "sha256:5e11e11880951e767342b56627ab2dc9d3ef90e2605b656e9b5e6e0beadaaf0f", - "sha256:68d910048b36613701ea671de68f701e2c1ba2839295238def840ff1fc1b15f4", - "sha256:69d503a7641b5a63aa53c7aca0b857d38f48cd7bae39f8563679b324e3d2d47a", - "sha256:6c0e96821029c46847df4ff266ea283a2b6163a4f76a4567f9986934e9c4410c", - "sha256:6d4da453fbd8793ebb11bed396f8a4b9041d6227bf055903447305dd7942312f", - "sha256:6ede2d42ad55bd4e7a3394e98c5f58ddace78775493391732d32be61268a4116", - "sha256:6f32791ee045a7b3d6a56208a55d996d5f7a32fdb688f5c5ee899cb7589539eb", - "sha256:6f767d4823002e65c06ea273f952fda2b88775e1c2d508564f04d32cdd7f65b2", - "sha256:712331c1c70c79a219c2ac233b4e25e75ffad51042840d147d5e94519c7d8a1a", - "sha256:7726f67e4a0b2b4392f03aa62e16b12a697156c6735df27b21bd3ab561b01659", - "sha256:788fb03c5acb5b48f5f918f4cbb5dc072498becf018c64e7e27d6b76e63e68b8", - "sha256:79f5a3ab7ff6c46336f38690f0564bc7689cefa180257ed9078c42f75b10c9d2", - "sha256:7af18372f576e36e93f4662bdf64043ac23dfa02d7f768d7e7e1d0211bb9cb35", - "sha256:7c74fde444bcd13ef3a803c578b28f33b4f9edf368f46ca3de57fda456065967", - "sha256:7e181411958d04d5b437a0981e87815e8f1b1909f5ae0e339246d3bc464f53e7", - "sha256:7f2024f83a9300440e845b441e71726471f7567021c1d80796ca02e71c5f0dc2", - "sha256:819d9317c3d86b508d87ab1bca5867f3abc18b902c822bc57366ccc6330a030b", - "sha256:8243bb4bb4db7c3501932ced6a978b284e19c3619b6802455e47bfd0905adb81", - "sha256:83b48b789f2da1688882cba595c40179194ab15ec17ea1d4c9de9ee239649904", - "sha256:851b44130393139cb336aa54c681d595d75a3160b7be330f3acc0c3b9dabce70", - "sha256:88e77ed7d0bd8d9be530c462c921904ada8d3417671eed749784c5a315af334d", - "sha256:8b966344ed4122a71ab8ccdca2954db1ce0d8049cb9bcac58db07558f9d9ec32", - "sha256:8c07e16ab38e717931319cff1340debbf2ef940a1cda4eb70e323079b62df306", - "sha256:8c85bb6946fb02231d1e60ab45c36ecee04ecf7f725e094f5beee798b6b7d36d", - "sha256:91946c496e6f380939dbea14ff6ce6de87480445c09d03964f5374101462594b", - "sha256:9dc7154889937ca5a004d17f62b4798e0af52f69c38eb3112dbdb52b006d4419", - "sha256:9ff1a517de2b1e80ddf1a3037a6ebca9925154c1af70751518d50d5c332e1ec8", - "sha256:a06a08be3cb7d7df7993dd16e84aaf59bd5a7ff98a9f1b3e893d18b273a71c64", - "sha256:a293370448f2e46fdc6e086ac99923015bdc53973a65d3df35aefc685e1a5809", - "sha256:a4a751f216fd1222a4a8c7ceff5180872a156202c3bdca1b337e5a5b09298dfd", - "sha256:a4afab735bb0ac3ec9bafcc35376ed336d26af6140c4d81e4c869e77df77ecd5", - "sha256:a8b8f32463781e4703965c9cf7a609a19a74478f332e0d62cd9d0e7a9db91321", - "sha256:a8bb256b34fcad4f3fa00be6b57fe35bcb54f031911195929145c67d9738ffec", - "sha256:aadc5a8b9859737a8f87831215b7fab0c04afeb960bb987c528421a4e6dfb8b6", - "sha256:b1bf8aba99b267aad0a01dfb44ee39803676007724abcfb72129c350476b2341", - "sha256:b408ac3c7f8c3414bfd5c6044ca4bb385b390bcf5eae3ad884cef48628c131ae", - "sha256:b4995792e106c3f1ab6f56dd6089918b065888e2e55a71e3fea8d0f66bf30989", - "sha256:b7c65112c87568274d399ad7a62902cef17801c2bd047b162e79e43758b3ce27", - "sha256:c089ce856919e03f4dd8f9168d60ac580d30cd0451fd60dcdef73010eca68973", - "sha256:c53cf36cdb10819b7154fefdbffbef442ba567d9c1ca74a7e76fd759ace45e6c", - "sha256:cb08db5c122fea4196483b82f7596e50ef9cab1770f7696c197bf0815ac4dd17", - "sha256:ccc1b5b467766110085c80bb9311d233fccc8ed1ce965aebba3125e1bab04cba", - "sha256:cdbf9a76ea47f14026daaed43a2c2150ab0e9a4d5396909f028380f33e61c522", - "sha256:cdee4f4d04761ce167538adbefa01a64e7cab949d89aa09df39ef0d5e859fb2a", - "sha256:d3264e4a02e4148e30078104fb0c1b6c8eb166ddc5ebe843a22433f58f87dc47", - "sha256:d5fe8054c244bf63be2380efc275edd86da3a706460d42911dc3ff914f3260a5", - "sha256:d72916d27fb88741bfb576b0b0639354ca00f5e91046171c985262c68a86bbb5", - "sha256:db5e71e5a810d2f1163c914e01b3ba241409a98286ac4850ff26076115ae401b", - "sha256:dc7f25e20781c8d42e813516ee4ff9043ecce4a8e25fc94ee6732a83d81c1c99", - "sha256:de784bbe06d32e66617cd20766c37aae2438902d54b3fa608d2e0a929ca705f4", - "sha256:e0755f5ac6c3d1dc2505eb2e6eaf5508ff17b42c084406714fbabf2d50d098b6", - "sha256:e549da8d68ad4ee385c918ea8b9efeda875df9edf6c6b48df927bd061c00bfef", - "sha256:e6772eb7cc4429f1eae5a9b41e5b0b1af8f0d50727c6e338d9ad5bceee01da5a", - "sha256:ea3e46a534de97a6cad2018cb950492a0fcacad380e35440ce3c1c8fef96a261", - "sha256:ec5523d5c08c639cd4e301d42f3ad7c6fb061a1f1cd6b5b627e59af345edfed7", - "sha256:ef3ad80458e47723812976a2ea1282ff207ad20e6cb19da1917f76699bd5aaa5", - "sha256:ef6c38040d868dcc0132fad377aafeb5b2da71354759e77f41ae599316df2dee", - "sha256:f1e23665be5918f979180130babedab9317fbb34cdae237c7defad7e86bc684e", - "sha256:f25d1975e846d07990cf946a5927a932aa7cccd308ae9979b03a58ff1cd80087", - "sha256:f7acc5c9c7cf567372de5b6c817f93db508e7b9bd7f29bd6187df8d2cc60ced5", - "sha256:fb7049dff52cded65184a3d2ff45cfd226bff7314f49a8f4b83f943eea9181a7", - "sha256:fdd2ab5ab56fcaf839a9f58caa8756dbfeba0b3dc187850b763d0a1e6ee9c97a" + "sha256:017a8b5c96665426977df7e55c2e80b4177a918c802fceb6aaa31d89c7dad961", + "sha256:090bd5976d2af005c143fac5364af7eb6b71831a708031983dd78867070517d0", + "sha256:09bb9c0a7006ad6782a3ff1a50843b80551a771ad6736d66943acd3dcb68030b", + "sha256:0a44d6bd5b4b510d5bfa64363d888070fedf55d7044564e9685fc9b6572a9fa5", + "sha256:0bef51399bb733fe7a464183c35ceba092b6e06aeee6fbf52d8759e7f2bed263", + "sha256:0d4b09c39125b5f21c62a6e08e6649fed6951ffc76a0a7e56c7b29e234002721", + "sha256:0df7736854b85ee1bfa775e0cde33a1af16ef0f9127e11f1232bf125af6b038b", + "sha256:105496b727923ea98e6a788becfd018e0da3510338f19d2c7b642775dcadcc2a", + "sha256:15e3586077863d61bf948a0541c7d077ddf4b4ebc59aca1568514bc9a10b8172", + "sha256:173378a1e9503e0239e422515c8dc4dcf70048070cb1d8301adc2722de1625ec", + "sha256:178b32d806c62e4dfe1b19427af27547b565ded64f844d6d19203cede4f4f7ce", + "sha256:178bb9e57d940f22a828ec916639268c3fd6ee1d45e1cefd7a7022645d816ce0", + "sha256:1a392b4ca7bccd5e98e767305bb282d3effa466f52b8c803d7def812dd61775e", + "sha256:1b1b2eab728efc239c8aab97b4821f8e10dcd5a1b066365d0e38023e3b2289e8", + "sha256:24b84c09ad66c24fbaec0d1f72e74d0cb7ee86e8bf6429281c69377dba76ac67", + "sha256:2510fc00b47a8355485b0014b49b58437594b48a0f08d557de7ea9819ef31967", + "sha256:2bd27356081b0b5ea3164dc45945e56a9ff3aac89f6df83835852ed377e274a0", + "sha256:2e03f99ffca1774ef1fe0bec473cb95a67af254ba03a2f3ff241581edb8b7954", + "sha256:35219597d11f2d863b1bb774e98b6a0e1881d96033cf90b580b1d82192b5c809", + "sha256:37238a2e8066e1573d2035906c77e58d4bbc5c50812bb667acb7975960260fed", + "sha256:37aa3caedc3553d38076a9f90abf8e6affa35b6b3db2e06c414636a95dd646f2", + "sha256:39943285af1b3884bfbf4d51376bce180f0456a5b04e766416c1af9a4b62b93a", + "sha256:3ad583c2f6595f8c261bfdac1485449e900c580b4dff25ecec2abc13dde29447", + "sha256:3bfeb47bc0be4b032462ba066b4198e79ef96a57a6bf5f6b64f1c63e5362000d", + "sha256:3c764f61cbb999ee92ea4e46e81a1e09d75ad00433cd19e9622808134d619a1d", + "sha256:3ca6fac652b195f8eff608b00c0c79889b7cb2984125abfbd14f6fb3f6effe25", + "sha256:3d93e61486d3d4767e46b108e19586038ce4e8d374c719a1dc0b1077d6007a11", + "sha256:3dbd9bf09ed895a01d1aca3d82b1ce3656d1b121650ee8d640e0e17ba24e9e31", + "sha256:45131c2bf9b6c739ffde137e6c56af65786a17a53b0c6e6ca3bba762bb063a9a", + "sha256:45c5e5d813569c4b613965bbfc7e5413615731aea9f932ea6f1854203ea52f9a", + "sha256:45e639069ecdb2aa33a2dc4a2b4c30f0bc35067830dbe5786031121ae9ac9eb6", + "sha256:47d532d6132d5fa40a3f1d3ea7c8752ca5e2ccf50a1aee5c5da16be7f04d8218", + "sha256:493e00f8664ade67574cf0e7984f53bc1dbfd018b0a8102e326bee002acdcd3f", + "sha256:4aec1e9d5416030f77de7e909af2645cc935e999da7e15d59d7e23b37a7a10ed", + "sha256:4f97190786e089e7a413d20b6c3964981fb1e21d7580c094dde08dbb17fd1171", + "sha256:5156692990dd9ddbd4734ff50c6b511c054aa660177fca64d214de57d54257a4", + "sha256:5289d882afb7e1ec7c6d33493f7964cc75fbaf298dcc1e3fbb1f0039560ddc7d", + "sha256:54a76e7b9093c99831bd5cc6513caf1689ec7d6e5123ec547444776fdf309592", + "sha256:555053d9c4ed1ad7d0bf78617ec474ab436a7be94966e98de79cf226d7e9a341", + "sha256:5a2e2203c4b7ecfe78a443810fcf2fcc1e1d96d59d3e704734e21b6f710df3f1", + "sha256:5f1f6f18f23f2744a58b0d02f07d31f5fc104ba2e6c81fbb51ecd50e96a3374c", + "sha256:6031a0985b0ecc72f3f9704efb4a2e7db77c315f732a953a13fb0900204c3047", + "sha256:60332a597794c3b184d240c8306d6b2fc4e6fd4606c1186bb08af41986b827cd", + "sha256:621ece875ea3150bee10605ec2be957055bddd23abafb981047fe7840027f1b0", + "sha256:66fbe9d6764c92a26e3c1c391476ce29e99c5bf1b823051a2bbae4e1d23671be", + "sha256:6ceaaa418e594438240bd287f093bca33c7ee3b6c40e8ce6a74ebdcc9f280f9d", + "sha256:6e29be51831c5a839268cddfa895a4833dfe6541611759bdc485eb8ebdf0b310", + "sha256:702a238fdc50d5d545f381d817f9141baff51d3014768286a07433a0790d33ce", + "sha256:70bfe4be52b300973f16206ace8216b9a5607c89039f5ced1eb048a60e098624", + "sha256:710e107a0977d53b29a68d89fef476fb378dc97cbbe81729f9e7dcc55c86c844", + "sha256:7361a2879b827516203f61d12af8bbb7bea504d7b4d5c02a745bd6bb3fbd4326", + "sha256:7553b67e575fe506fcc760f5ca3582185cb5599845ce27d63cd653a37fede925", + "sha256:77a3724f13fbc3ef867012f353d064459f618918f74a3276bffdb523e39350c9", + "sha256:785e330257b5d6ad1b59334d5af2253fccee6f921feb85e8e18662479f29be4f", + "sha256:7a88342b03c6c41b0ee8f5504d3a30bf47070f87b8bcfc63290e908ff0a212f5", + "sha256:85a85d2a9e8c7af690fe4056c1e48ce641a77cf48688751ff95c86f2a44fc5ec", + "sha256:8be1910ff15bc5f22ac5fadcd3f0877a6eb9eba40f2d17303e8cd898d36f49f5", + "sha256:93c004f0656d683ea69f8b6e41cd14313b94e9d108529c9dca4a9e864d5dac48", + "sha256:94af8500ec952154144f54918d150f04bd2e520c94a27bdd186f57323b0b7b5b", + "sha256:a45faa1a24fd3e078567ee31b953fe6e5819e9286a14f68c72c5689f14242f68", + "sha256:a7c41b1ab1532993d203eda9ab82bb8b7269717a7dc424b05ba39f1e39be5ddc", + "sha256:a996bf1859fb103ef34c24fe13d420714bbd4a43c50fa2cf44bb7d60b6060de3", + "sha256:a9c0bdb945a8fc6cb8d661da3d3969dd0a26202d7c17adb896c393c12cce9d10", + "sha256:a9dd80426417b07e3b86be44b7f7076086cd8290e1bbf1aa391f79e2807b1b8c", + "sha256:afa9a09ff78e40b2372ce2d4acee44165d2f7db7e253d670db93fe8a5d4b00b9", + "sha256:b5d3558e949f3de0081a5f6f8fa74a5a260ca9612e03be9cab8d7289c6bee8ad", + "sha256:b6e847d7558255483b399b6931e425143f68b8e0c176d30034c36a87dda4b9a9", + "sha256:b93f443705985f5d8c3594015caa2e89749875c9596c834dbc9f86d3c8331a5a", + "sha256:b9abdadae018d7d7fa15e850d5c47ec5e45cf3796258d503986ce17ba4d8a71d", + "sha256:ba1a336b41b71326b2ba735ce9d0b6b22c5160b23fddd9024e0717ead3e0bb90", + "sha256:bbe026e4c8ce47d7f5b802b31e6a0cd35e402b80ff29fa9373ec5ece54629aff", + "sha256:bd04785eaed247cc79149e1c0b01a4ca60efde6976e617231f5bb5ec84eb4c80", + "sha256:be05b3fc71b5a92085b4017551b6e3e1c13199c762f82dea0c3fbbae86d24f66", + "sha256:bfbf2e8923874379d035d08f38ef25595ab13a074605fc78b04c79ae3d6b6bdf", + "sha256:c00b7ece60047c3e022e6769f98a343a300976764711ac354c71229f1185787e", + "sha256:c0c15395d1763d89aea084d24564d0b6808988f05a0303d58dc633c27939fcb4", + "sha256:c0ee0733a17e9cc920838b46c43bab43c0e2cee78f091d8c788b162088ffc552", + "sha256:d30297b1ca6666db9171f500ac731e41d57fb5105d629b9115000d3e47cc5823", + "sha256:d45a0c8043e3e543032475d334c4058070865bc75b162dd11959aeebe75dd27f", + "sha256:ddf043aba44e951a6c8ff1addee57d9c3438f1ab3a7edd87ebc951621d8befda", + "sha256:e05b0e3d1803071221eeea695a5a247f3b66f55c3d2e9c2a13ed33ccf67a3f30", + "sha256:e7fc11a86be3df506149d1bf59e9b3edc818fbcada0a4786697b54707e6fc374", + "sha256:e88af8e86fb011adc0221419a5615ed507a54cd74956b07345b8881d81a329e5", + "sha256:eabb81ff00550d77e6a91b127f08a2e3feebc238596c37dad29dca4df4c212da", + "sha256:ef867fa13f7f064200a41299a442d92180b178edd0fe81a1f5222739b2572249", + "sha256:f0e128aa3dcc422c55d55de39dbbcce1401947c4215a5dcd36331151e8ee77ce", + "sha256:f1b9e00ae857fdd6d52bd6d7e1b5598c54bcd0194f4626abfd2eb4e93a8dfebd", + "sha256:f28e33a5940cbaec2095aab516423728aa11d93d01ab6574c304894abe71e007", + "sha256:f3c69967ba33327e8e22a3a0ff3c22b3879ad0f885a097ff2a5c1fe7dbd8505f", + "sha256:fa05dd24202001c2d9811cae12ed9942de240faff3cb37fc25ba2722026b7acb", + "sha256:fa439e73f8aa4f66e89fbc2bce6b2ae882d75ea4e4d75e5e584376db4f5fd73a", + "sha256:fa910442085e9e141259110e4a228f6a2860fa7bd85872707188f9ddd2479153" ], "markers": "python_version >= '3.7'", - "version": "==3.1.1" + "version": "==3.1.2" }, "raven": { "hashes": [ @@ -900,11 +904,11 @@ "django" ], "hashes": [ - "sha256:96b4bba2cbe8d07ba2ca161d25a5001d3d9483f88957fd632159710a3f54d499", - "sha256:e34730b3ce295b7598493c5383d5147bcecb7dd623109876192f06aa3b7c6d7f" + "sha256:61a613aa1d1968e22c3b442afa33372cdb974e400afae31f623980fe5b686389", + "sha256:9668fc6262f18c7da2c15f4ab8321afde536504cab8ff2601a4dd16fb584e625" ], "index": "pypi", - "version": "==0.3.0" + "version": "==0.3.1" }, "six": { "hashes": [ @@ -931,19 +935,19 @@ }, "typing-extensions": { "hashes": [ - "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26", - "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5" + "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", + "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" ], - "markers": "python_version >= '3.7'", - "version": "==4.6.3" + "markers": "python_version < '3.11'", + "version": "==4.7.1" }, "urllib3": { "hashes": [ - "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1", - "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825" + "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11", + "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4" ], "markers": "python_version >= '3.7'", - "version": "==2.0.3" + "version": "==2.0.4" }, "webencodings": { "hashes": [ @@ -1045,131 +1049,128 @@ }, "black": { "hashes": [ - "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5", - "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915", - "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326", - "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940", - "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b", - "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30", - "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c", - "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c", - "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab", - "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27", - "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2", - "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961", - "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9", - "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb", - "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70", - "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331", - "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2", - "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266", - "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d", - "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6", - "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b", - "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925", - "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8", - "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4", - "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3" + "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3", + "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb", + "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087", + "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320", + "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6", + "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3", + "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc", + "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f", + "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587", + "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91", + "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a", + "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad", + "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926", + "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9", + "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be", + "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd", + "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96", + "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491", + "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2", + "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a", + "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f", + "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995" ], "index": "pypi", - "version": "==23.3.0" + "version": "==23.7.0" }, "certifi": { "hashes": [ - "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", - "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], "markers": "python_version >= '3.6'", - "version": "==2023.5.7" + "version": "==2023.7.22" }, "charset-normalizer": { "hashes": [ - "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", - "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", - "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", - "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", - "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", - "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", - "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", - "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", - "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", - "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", - "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", - "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", - "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", - "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", - "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", - "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", - "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", - "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", - "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", - "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", - "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", - "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", - "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", - "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", - "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", - "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", - "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", - "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", - "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", - "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", - "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", - "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", - "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", - "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", - "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", - "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", - "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", - "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", - "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", - "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", - "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", - "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", - "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", - "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", - "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", - "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", - "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", - "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", - "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", - "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", - "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", - "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", - "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", - "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", - "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", - "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", - "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", - "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", - "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", - "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", - "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", - "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", - "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", - "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", - "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", - "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", - "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", - "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", - "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", - "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", - "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", - "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", - "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", - "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", - "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" - ], - "markers": "python_full_version >= '3.7.0'", - "version": "==3.1.0" + "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96", + "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c", + "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710", + "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706", + "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020", + "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252", + "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad", + "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329", + "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a", + "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f", + "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6", + "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4", + "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a", + "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46", + "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2", + "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23", + "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace", + "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd", + "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982", + "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10", + "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2", + "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea", + "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09", + "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5", + "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149", + "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489", + "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9", + "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80", + "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592", + "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3", + "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6", + "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed", + "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c", + "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200", + "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a", + "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e", + "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d", + "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6", + "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623", + "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669", + "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3", + "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa", + "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9", + "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2", + "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f", + "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1", + "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4", + "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a", + "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8", + "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3", + "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029", + "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f", + "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959", + "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22", + "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7", + "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952", + "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346", + "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e", + "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d", + "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299", + "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd", + "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a", + "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3", + "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037", + "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94", + "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c", + "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858", + "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a", + "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449", + "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c", + "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918", + "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1", + "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c", + "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac", + "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa" + ], + "markers": "python_version >= '3.7'", + "version": "==3.2.0" }, "click": { "hashes": [ - "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", - "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" + "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd", + "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5" ], "markers": "python_version >= '3.7'", - "version": "==8.1.3" + "version": "==8.1.6" }, "freezegun": { "hashes": [ @@ -1221,27 +1222,27 @@ }, "pathspec": { "hashes": [ - "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687", - "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293" + "sha256:1d6ed233af05e679efb96b1851550ea95bbb64b7c490b0f5aa52996c11e92a20", + "sha256:e0d8d0ac2f12da61956eb2306b69f9469b42f4deb0f3cb6ed47b9cce9996ced3" ], "markers": "python_version >= '3.7'", - "version": "==0.11.1" + "version": "==0.11.2" }, "platformdirs": { "hashes": [ - "sha256:0ade98a4895e87dc51d47151f7d2ec290365a585151d97b4d8d6312ed6132fed", - "sha256:e48fabd87db8f3a7df7150a4a5ea22c546ee8bc39bc2473244730d4b56d2cc4e" + "sha256:b45696dab2d7cc691a3226759c0d3b00c47c8b6e293d96f6436f733303f77f6d", + "sha256:d7c24979f292f916dc9cbf8648319032f551ea8c49a4c9bf2fb556a02070ec1d" ], "markers": "python_version >= '3.7'", - "version": "==3.5.3" + "version": "==3.10.0" }, "pluggy": { "hashes": [ - "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", - "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" + "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849", + "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3" ], - "markers": "python_version >= '3.6'", - "version": "==1.0.0" + "markers": "python_version >= '3.7'", + "version": "==1.2.0" }, "py": { "hashes": [ @@ -1285,49 +1286,49 @@ }, "pyyaml": { "hashes": [ - "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", - "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", - "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", - "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", - "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", - "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", - "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", - "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", - "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", - "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", - "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", - "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", - "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782", - "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", - "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", - "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", - "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", - "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", - "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1", - "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", - "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", - "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", - "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", - "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", - "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", - "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d", - "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", - "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", - "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7", - "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", - "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", - "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", - "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358", - "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", - "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", - "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", - "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", - "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f", - "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", - "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" + "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", + "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", + "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", + "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", + "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", + "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", + "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", + "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", + "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", + "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", + "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", + "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", + "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", + "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", + "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", + "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", + "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", + "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", + "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", + "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", + "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", + "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", + "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", + "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", + "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", + "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", + "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", + "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", + "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", + "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", + "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", + "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", + "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", + "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", + "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", + "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", + "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", + "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", + "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", + "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" ], "markers": "python_version >= '3.6'", - "version": "==6.0" + "version": "==6.0.1" }, "requests": { "hashes": [ @@ -1339,11 +1340,11 @@ }, "responses": { "hashes": [ - "sha256:8a3a5915713483bf353b6f4079ba8b2a29029d1d1090a503c70b0dc5d9d0c7bd", - "sha256:c4d9aa9fc888188f0c673eff79a8dadbe2e75b7fe879dc80a221a06e0a68138f" + "sha256:5d5a2ce3285f84e1f107d2e942476b6c7dff3747f289c0eae997cb77d2ab68e8", + "sha256:9d49c218ba3079022bd63427f12b0a43b43d2f6aaf5ed859b9df9d733b4dd775" ], "index": "pypi", - "version": "==0.23.1" + "version": "==0.23.2" }, "six": { "hashes": [ @@ -1363,18 +1364,18 @@ }, "types-pyyaml": { "hashes": [ - "sha256:662fa444963eff9b68120d70cda1af5a5f2aa57900003c2006d7626450eaae5f", - "sha256:ebab3d0700b946553724ae6ca636ea932c1b0868701d4af121630e78d695fc97" + "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b", + "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d" ], - "version": "==6.0.12.10" + "version": "==6.0.12.11" }, "urllib3": { "hashes": [ - "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1", - "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825" + "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11", + "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4" ], "markers": "python_version >= '3.7'", - "version": "==2.0.3" + "version": "==2.0.4" } } } diff --git a/README.md b/README.md index 74dd2b45..66127a0a 100644 --- a/README.md +++ b/README.md @@ -25,15 +25,6 @@ pipenv run ./manage.py migrate make ``` -If you want to use jabber (ejabberd), you have to load the SQL schema -into the database (you'll find it in the ejabberd source code), -migrate the jabber database and do some changes to the tables -``` -psql jabber < ejabberd-source-code/sql/pg.sql -./manage.py migrate --database jabber -psql jabber < mafiasi/jabber/sql/*.sql -``` - We try to keep these installation instructions up to date, but we can't guarantee. diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index cc5bbbc0..fbac592e 100644 --- a/locale/de_DE/LC_MESSAGES/django.po +++ b/locale/de_DE/LC_MESSAGES/django.po @@ -4,15 +4,15 @@ msgstr "" "Project-Id-Version: Mafiasi\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-01-18 14:54+0100\n" -"PO-Revision-Date: 2023-01-18 14:58+0100\n" -"Last-Translator: Markus Neblung \n" +"PO-Revision-Date: 2023-07-27 20:41+0200\n" +"Last-Translator: Timon Engelke \n" "Language-Team: \n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Poedit 3.0.1\n" #: mafiasi/base/middleware.py:15 msgid "" @@ -376,6 +376,18 @@ msgstr "PDF hochladen" msgid "Reminder: Memory minutes for \"%(coursename)s\"" msgstr "Erinnerung: Gedächtnisprotokoll für \"%(coursename)s\"" +#: mafiasi/gprot/templates/admin/gprot/gprot/change_form.html:33 +msgid "Block this Gprot" +msgstr "Dieses GProt blockieren" + +#: mafiasi/gprot/templates/admin/gprot/gprot/change_form.html:34 +msgid "" +"When a Gprot is blocked, a hash is saved that ensures that the same file " +"cannot be uploaded again." +msgstr "" +"Wenn das GProt blockiert ist, dann wird ein Hash gespeichert, der " +"verhindert, dass die gleiche Datei erneut hochgeladen wird." + #: mafiasi/gprot/templates/gprot/_action_list.html:6 msgid "View" msgstr "Anzeigen" @@ -987,7 +999,16 @@ msgstr "Es sind nur PDF-Dateien erlaubt." msgid "Please select a file to upload." msgstr "Bitte wähle eine Datei zum Hochladen aus." -#: mafiasi/gprot/views.py:285 +#: mafiasi/gprot/views.py:217 +msgid "" +"This file was blocked because it is an original exam. Please do not try to " +"upload it again because we will get problems with the university." +msgstr "" +"Der Upload wurde blockiert, weil es sich um eine Originalklausur handelt. " +"Bitte versuche nicht, sie nochmal hochzuladen, damit wir keine Probleme mit " +"der Universität bekommen." + +#: mafiasi/gprot/views.py:307 msgid "Only PNG, JPEG and GIF files are allowed." msgstr "Es sind nur Bilder im PNG-, JPEG- oder GIF-Format erlaubt." @@ -1408,97 +1429,6 @@ msgstr "Einladungsmails" msgid "Invitation mail was resent." msgstr "Einladungsmail wurde erneut versandt." -#: mafiasi/jabber/apps.py:9 mafiasi/jabber/templates/jabber/index.html:5 -msgid "Jabber" -msgstr "Jabber" - -#: mafiasi/jabber/apps.py:10 -msgid "" -"On our Jabber server you can chat with your fellow students, which are " -"already on your contact list." -msgstr "" -"Auf unserem Jabber-Server hast du deine Kommilitonen automatisch in der " -"Kontaktliste und kannst mit ihnen chatten." - -#: mafiasi/jabber/templates/jabber/index.html:10 -#, python-format -msgid "" -"Your Jabber ID is %(username)s@%(jabber_domain)s. Note: " -"it's different from your username." -msgstr "" -"Deine Jabber-ID lautet abweichend: %(username)s@%(jabber_domain)s." - -#: mafiasi/jabber/templates/jabber/index.html:12 -#, python-format -msgid "Your Jabber ID is %(username)s@%(jabber_domain)s." -msgstr "" -"Deine Jabber-ID lautet: %(username)s@%(jabber_domain)s." - -#: mafiasi/jabber/templates/jabber/index.html:17 -#, python-format -msgid "" -"

If you want to change your Jabber password, just change it in your account settings.

" -msgstr "" -"

Wenn du dein Jabber-Passwort ändern möchtest, ändere einfach dein " -"Passwort in den Account-Einstellungen.

" - -#: mafiasi/jabber/templates/jabber/index.html:19 -#: mafiasi/mumble/templates/mumble/index.html:23 -msgid "The fingerprint of the current SSL certificate is:" -msgstr "Der Fingerprint des aktuellen SSL-Zertifikats lautet:" - -#: mafiasi/jabber/templates/jabber/index.html:22 -msgid "Configure your Jabber Client" -msgstr "Einrichtung deines Jabber-Clients" - -#: mafiasi/jabber/templates/jabber/index.html:24 -msgid "" -"\n" -" In order to use Jabber, you need to install a Jabber client and " -"configure it\n" -" to connect to the Mafiasi server. One option is Gajim, which is recommended by us.\n" -" " -msgstr "" -"\n" -"Um Jabber nutzen zu können, musst du einen Jabber-Client installieren und " -"dort deinen Mafiasi-Zugang einrichten. Die von uns empfohlene Option ist Gajim." - -#: mafiasi/jabber/templates/jabber/index.html:32 -msgid "" -"\n" -" For Android systems, we recommend using\n" -" Conversations, which is\n" -" a free Jabber client. It is available for free on F-Droid or paid on " -"the\n" -" Play Store.\n" -" " -msgstr "" -"\n" -" Für Android-Systeme empfehlen wir\n" -" Conversations, ein\n" -" freier Jabber-Client, der kostenlos über F-Droid und kostenpflichtig\n" -" im Play Store bezogen werden kann.\n" -"\n" -" " - -#: mafiasi/jabber/templates/jabber/index.html:41 -msgid "" -"\n" -" Below you can see the required configuration for Gajim, Dino, Pidgin and " -"Conversations.\n" -" " -msgstr "" -"\n" -"Unten findest du die nötigen Einstellungen für Gajim, Dino, Pidgin und " -"Conversations." - #: mafiasi/kanboard/apps.py:10 msgid "Kanboard" msgstr "Kanboard" @@ -1658,14 +1588,6 @@ msgstr "" "Matrix ermöglicht dezentrales Chatten und VoIP mit Ende-zu-Ende-" "Verschlüsselung." -#: mafiasi/mattermost/apps.py:10 -msgid "Chat" -msgstr "Chat" - -#: mafiasi/mattermost/apps.py:11 -msgid "An online team chat service" -msgstr "Mattermost ist ein Online-Chatservice für Teams" - #: mafiasi/mumble/apps.py:9 mafiasi/mumble/templates/mumble/index.html:5 msgid "Mumble" msgstr "Mumble" @@ -2098,30 +2020,6 @@ msgstr "Neue E-Mail-Adresse" msgid "Change Email" msgstr "Mailadresse ändern" -#: mafiasi/registration/templates/registration/account.html:92 -msgid "" -"Note: You can \"change\" your password to the current password to " -"synchronize it with other services (e.g. Jabber)" -msgstr "" -"Hinweis: Du kannst dein Passwört auf das aktuelle Passwort \"ändern\", um es " -"mit anderen Diensten zu synchronisieren (z.B. Jabber)" - -#: mafiasi/registration/templates/registration/account.html:96 -msgid "Old password" -msgstr "Altes Passwort" - -#: mafiasi/registration/templates/registration/account.html:105 -msgid "New password" -msgstr "Neues Passwort" - -#: mafiasi/registration/templates/registration/account.html:114 -msgid "New password confirmation" -msgstr "Neues Passwort bestätigen" - -#: mafiasi/registration/templates/registration/account.html:125 -msgid "Change password" -msgstr "Passwort ändern" - #: mafiasi/registration/templates/registration/email_error.html:5 msgid "Email address is invalid" msgstr "E-Mail-Adresse ist ungültig" @@ -3046,18 +2944,6 @@ msgstr "" #~ msgid "e-mails" #~ msgstr "E-Mails" -#, fuzzy -#~| msgid "" -#~| "You have to login to create or manage your Jabber account." -#~ msgid "" -#~ "You have to login " -#~ "to see your Jabber account data." -#~ msgstr "" -#~ "Du musst dich einloggen, um deinen Jabber-Account zu " -#~ "erstellen oder zu verwalten." - #~ msgid "Mafiasi Hub" #~ msgstr "Mafiasi Hub" @@ -3068,21 +2954,6 @@ msgstr "" #~ "Muss mit einem Buchstaben beginnen und nur alphanumerische Zeichen " #~ "enthalten. Nur Kleinbuchstaben." -#~ msgid "Create Jabber account" -#~ msgstr "Jabber-Account erstellen" - -#~ msgid "" -#~ "To create your Jabber account you have to enter your current password:" -#~ msgstr "" -#~ "Um deinen Jabber-Account zu erstellen, musst du dein aktuelles Passwort " -#~ "eingeben:" - -#~ msgid "" -#~ "You can now create your Jabber account." -#~ msgstr "" -#~ "Du kannst nun deinen Jabber-Account erstellen." - #~ msgid "Account was created." #~ msgstr "Account wurde erstellt." @@ -3250,14 +3121,5 @@ msgstr "" #~ msgid "Confirm password:" #~ msgstr "Passwort bestätigen:" -#~ msgid "Reset password of your Jabber account" -#~ msgstr "Jabber-Account-Passwort zurücksetzen" - -#~ msgid "" -#~ "Enter your current password to set the Jabber password to the entered one." -#~ msgstr "" -#~ "Gib dein aktuelles Passwort ein, um das Jabber-Passwort auf dieses " -#~ "zurückzusetzen." - #~ msgid "Reset password" #~ msgstr "Passwort zurücksetzen" diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index f5ea29f5..3bd0860f 100644 --- a/locale/en_US/LC_MESSAGES/django.po +++ b/locale/en_US/LC_MESSAGES/django.po @@ -3,14 +3,14 @@ msgstr "" "Project-Id-Version: Mafiasi\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-01-18 14:47+0100\n" -"PO-Revision-Date: 2022-03-07 16:02+0100\n" -"Last-Translator: Markus Neblung <9neblung@informatik.uni-hamburg.de>\n" +"PO-Revision-Date: 2023-07-27 20:41+0200\n" +"Last-Translator: Timon Engelke \n" "Language-Team: \n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.2\n" +"X-Generator: Poedit 3.0.1\n" #: mafiasi/base/middleware.py:15 msgid "" @@ -371,6 +371,18 @@ msgstr "Upload PDF" msgid "Reminder: Memory minutes for \"%(coursename)s\"" msgstr "Reminder: Memory minutes for \"%(coursename)s\"" +#: mafiasi/gprot/templates/admin/gprot/gprot/change_form.html:33 +msgid "Block this Gprot" +msgstr "Block this Gprot" + +#: mafiasi/gprot/templates/admin/gprot/gprot/change_form.html:34 +msgid "" +"When a Gprot is blocked, a hash is saved that ensures that the same file " +"cannot be uploaded again." +msgstr "" +"When a Gprot is blocked, a hash is saved that ensures that the same file " +"cannot be uploaded again." + #: mafiasi/gprot/templates/gprot/_action_list.html:6 msgid "View" msgstr "View" @@ -987,7 +999,15 @@ msgstr "Only PDF files are allowed." msgid "Please select a file to upload." msgstr "Please select a file to upload." -#: mafiasi/gprot/views.py:285 +#: mafiasi/gprot/views.py:217 +msgid "" +"This file was blocked because it is an original exam. Please do not try to " +"upload it again because we will get problems with the university." +msgstr "" +"This file was blocked because it is an original exam. Please do not try to " +"upload it again because we will get problems with the university." + +#: mafiasi/gprot/views.py:307 msgid "Only PNG, JPEG and GIF files are allowed." msgstr "Only PNG, JPEG and GIF files are allowed." @@ -1411,100 +1431,6 @@ msgstr "invitation mails" msgid "Invitation mail was resent." msgstr "Invitation mail was resent." -#: mafiasi/jabber/apps.py:9 mafiasi/jabber/templates/jabber/index.html:5 -msgid "Jabber" -msgstr "Jabber" - -#: mafiasi/jabber/apps.py:10 -msgid "" -"On our Jabber server you can chat with your fellow students, which are " -"already on your contact list." -msgstr "" -"On our Jabber server you can chat with your fellow students, which are " -"already on your contact list." - -#: mafiasi/jabber/templates/jabber/index.html:10 -#, python-format -msgid "" -"Your Jabber ID is %(username)s@%(jabber_domain)s. Note: " -"it's different from your username." -msgstr "" -"Your Jabber ID is %(username)s@%(jabber_domain)s. Note: " -"it's different from your username." - -#: mafiasi/jabber/templates/jabber/index.html:12 -#, python-format -msgid "Your Jabber ID is %(username)s@%(jabber_domain)s." -msgstr "Your Jabber ID is %(username)s@%(jabber_domain)s." - -#: mafiasi/jabber/templates/jabber/index.html:17 -#, python-format -msgid "" -"

If you want to change your Jabber password, just change it in your account settings.

" -msgstr "" -"

If you want to change your Jabber password, just change it in your account settings.

" - -#: mafiasi/jabber/templates/jabber/index.html:19 -#: mafiasi/mumble/templates/mumble/index.html:23 -msgid "The fingerprint of the current SSL certificate is:" -msgstr "The fingerprint of the current SSL certificate is:" - -#: mafiasi/jabber/templates/jabber/index.html:22 -msgid "Configure your Jabber Client" -msgstr "Configure your Jabber Client" - -#: mafiasi/jabber/templates/jabber/index.html:24 -msgid "" -"\n" -" In order to use Jabber, you need to install a Jabber client and " -"configure it\n" -" to connect to the Mafiasi server. One option is Gajim, which is recommended by us.\n" -" " -msgstr "" -"\n" -" In order to use Jabber, you need to install a Jabber client and " -"configure it\n" -" to connect to the Mafiasi server. One option is Gajim, which is recommended by us.\n" -" " - -#: mafiasi/jabber/templates/jabber/index.html:32 -msgid "" -"\n" -" For Android systems, we recommend using\n" -" Conversations, which is\n" -" a free Jabber client. It is available for free on F-Droid or paid on " -"the\n" -" Play Store.\n" -" " -msgstr "" -"\n" -" For Android systems, we recommend using\n" -" Conversations, which is\n" -" a free Jabber client. It is available for free on F-Droid or paid on " -"the\n" -" Play Store.\n" -" " - -#: mafiasi/jabber/templates/jabber/index.html:41 -msgid "" -"\n" -" Below you can see the required configuration for Gajim, Dino, Pidgin and " -"Conversations.\n" -" " -msgstr "" -"\n" -" Below you can see the required configuration for Gajim, Dino, Pidgin and " -"Conversations.\n" -" " - #: mafiasi/kanboard/apps.py:10 msgid "Kanboard" msgstr "Kanboard" @@ -1661,14 +1587,6 @@ msgstr "Matrix" msgid "Matrix provides decentralized messaging and VoIP with E2E encryption." msgstr "Matrix provides decentralized messaging and VoIP with E2E encryption." -#: mafiasi/mattermost/apps.py:10 -msgid "Chat" -msgstr "Chat" - -#: mafiasi/mattermost/apps.py:11 -msgid "An online team chat service" -msgstr "Mattermost is an online team chat service" - #: mafiasi/mumble/apps.py:9 mafiasi/mumble/templates/mumble/index.html:5 msgid "Mumble" msgstr "Mumble" @@ -2090,30 +2008,6 @@ msgstr "New Email Address" msgid "Change Email" msgstr "Change Email" -#: mafiasi/registration/templates/registration/account.html:92 -msgid "" -"Note: You can \"change\" your password to the current password to " -"synchronize it with other services (e.g. Jabber)" -msgstr "" -"Note: You can \"change\" your password to the current password to " -"synchronize it with other services (e.g. Jabber)" - -#: mafiasi/registration/templates/registration/account.html:96 -msgid "Old password" -msgstr "Old password" - -#: mafiasi/registration/templates/registration/account.html:105 -msgid "New password" -msgstr "New password" - -#: mafiasi/registration/templates/registration/account.html:114 -msgid "New password confirmation" -msgstr "New password confirmation" - -#: mafiasi/registration/templates/registration/account.html:125 -msgid "Change password" -msgstr "Change password" - #: mafiasi/registration/templates/registration/email_error.html:5 msgid "Email address is invalid" msgstr "Email address is invalid" @@ -3018,17 +2912,6 @@ msgstr "" #~ msgid "e-mails" #~ msgstr "Email" -#, fuzzy -#~| msgid "" -#~| "You have to login to create or manage your Jabber account." -#~ msgid "" -#~ "You have to login " -#~ "to see your Jabber account data." -#~ msgstr "" -#~ "You have to login " -#~ "to create or manage your Jabber account." - #~ msgid "Mafiasi Hub" #~ msgstr "Mafiasi Hub" @@ -3039,19 +2922,6 @@ msgstr "" #~ "Must start with a letter and only contain alphanumeric characters. " #~ "Lowercase only." -#~ msgid "Create Jabber account" -#~ msgstr "Create Jabber account" - -#~ msgid "" -#~ "To create your Jabber account you have to enter your current password:" -#~ msgstr "" -#~ "To create your Jabber account you have to enter your current password:" - -#~ msgid "" -#~ "You can now create your Jabber account." -#~ msgstr "" -#~ "You can now create your Jabber account." - #~ msgid "Account was created." #~ msgstr "Account was created." diff --git a/locale/fr_FR/LC_MESSAGES/django.po b/locale/fr_FR/LC_MESSAGES/django.po index c155c79b..d6d162f8 100644 --- a/locale/fr_FR/LC_MESSAGES/django.po +++ b/locale/fr_FR/LC_MESSAGES/django.po @@ -3,15 +3,15 @@ msgstr "" "Project-Id-Version: Mafiasi\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-01-18 14:47+0100\n" -"PO-Revision-Date: 2022-03-07 16:02+0100\n" -"Last-Translator: Markus Neblung <9neblung@informatik.uni-hamburg.de>\n" +"PO-Revision-Date: 2023-07-27 20:48+0200\n" +"Last-Translator: Timon Engelke \n" "Language-Team: \n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 2.4.2\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Poedit 3.0.1\n" #: mafiasi/base/middleware.py:15 msgid "" @@ -380,6 +380,18 @@ msgstr "Télécharger le PDF" msgid "Reminder: Memory minutes for \"%(coursename)s\"" msgstr "Rappel: Mémoire minutes pour \"%(coursename)s\"" +#: mafiasi/gprot/templates/admin/gprot/gprot/change_form.html:33 +msgid "Block this Gprot" +msgstr "Bloquer cette mémoire" + +#: mafiasi/gprot/templates/admin/gprot/gprot/change_form.html:34 +msgid "" +"When a Gprot is blocked, a hash is saved that ensures that the same file " +"cannot be uploaded again." +msgstr "" +"Quand une mémoire est bloquée, un hachage est enregistré pour assurer que le " +"même fichier ne peut plus être téléversé." + #: mafiasi/gprot/templates/gprot/_action_list.html:6 msgid "View" msgstr "Vue" @@ -1006,7 +1018,16 @@ msgstr "Seuls les fichiers PDF sont autorisés." msgid "Please select a file to upload." msgstr "S'il vous plaît sélectionner un fichier à télécharger." -#: mafiasi/gprot/views.py:285 +#: mafiasi/gprot/views.py:217 +msgid "" +"This file was blocked because it is an original exam. Please do not try to " +"upload it again because we will get problems with the university." +msgstr "" +"Le fichier a été bloqué parce qu'il s'agit d'un examen original. Merce de ne " +"pas essayer pas de le téléverser à nouveau afin d'éviter des problèmes avec " +"l'université." + +#: mafiasi/gprot/views.py:307 msgid "Only PNG, JPEG and GIF files are allowed." msgstr "Seuls les fichiers PNG, JPEG et GIF sont autorisés." @@ -1441,102 +1462,6 @@ msgstr "mails d'invitation" msgid "Invitation mail was resent." msgstr "Invitation courrier était renvoyé." -#: mafiasi/jabber/apps.py:9 mafiasi/jabber/templates/jabber/index.html:5 -msgid "Jabber" -msgstr "Jabber" - -#: mafiasi/jabber/apps.py:10 -msgid "" -"On our Jabber server you can chat with your fellow students, which are " -"already on your contact list." -msgstr "" -"Sur notre serveur Jabber vous pouvez discuter avec vos collègues étudiants, " -"qui sont déjà sur votre liste de contacts." - -#: mafiasi/jabber/templates/jabber/index.html:10 -#, python-format -msgid "" -"Your Jabber ID is %(username)s@%(jabber_domain)s. Note: " -"it's different from your username." -msgstr "" -"Votre Jabber ID est %(username)s@%(jabber_domain)s. " -"Remarque: il est différent de votre nom d'utilisateur." - -#: mafiasi/jabber/templates/jabber/index.html:12 -#, python-format -msgid "Your Jabber ID is %(username)s@%(jabber_domain)s." -msgstr "" -"Votre identifiant Jabber est %(username)s@%(jabber_domain)s." - -#: mafiasi/jabber/templates/jabber/index.html:17 -#, python-format -msgid "" -"

If you want to change your Jabber password, just change it in your account settings.

" -msgstr "" -"

Si vous souhaitez modifier votre mot de passe Jabber, il suffit de " -"changer dans votre paramètres de compte . " - -#: mafiasi/jabber/templates/jabber/index.html:19 -#: mafiasi/mumble/templates/mumble/index.html:23 -msgid "The fingerprint of the current SSL certificate is:" -msgstr "L'empreinte du certificat SSL actuel est:" - -#: mafiasi/jabber/templates/jabber/index.html:22 -msgid "Configure your Jabber Client" -msgstr "Configurez votre client Jabber" - -#: mafiasi/jabber/templates/jabber/index.html:24 -msgid "" -"\n" -" In order to use Jabber, you need to install a Jabber client and " -"configure it\n" -" to connect to the Mafiasi server. One option is Gajim, which is recommended by us.\n" -" " -msgstr "" -"\n" -"En afin d'utiliser Jabber, vous devez installer un client jabber et le " -"configurer \n" -"pour se connecter au serveur Mafiasi. Une option est Gajim, qui est recommendé par nous.\n" -" " - -#: mafiasi/jabber/templates/jabber/index.html:32 -msgid "" -"\n" -" For Android systems, we recommend using\n" -" Conversations, which is\n" -" a free Jabber client. It is available for free on F-Droid or paid on " -"the\n" -" Play Store.\n" -" " -msgstr "" -"\n" -" Pour les systèmes Android, nous recommandons d'utiliser\n" -" Conversations, c'est\n" -" un client Jabber libre. Il est disponible gratuitement sur F-Droid ou " -"payé sur le\n" -" Play Store.\n" -" " - -#: mafiasi/jabber/templates/jabber/index.html:41 -msgid "" -"\n" -" Below you can see the required configuration for Gajim, Dino, Pidgin and " -"Conversations.\n" -" " -msgstr "" -"\n" -" Vous trouverez ci-dessous la configuration requise pour Gajim, Dino, " -"Pidgin et Conversations.\n" -" " - #: mafiasi/kanboard/apps.py:10 msgid "Kanboard" msgstr "Kanboard" @@ -1697,14 +1622,6 @@ msgstr "" "Matrix fournit messagerie décentralisée et VoIP avec chiffrement de bout en " "bout." -#: mafiasi/mattermost/apps.py:10 -msgid "Chat" -msgstr "Chat" - -#: mafiasi/mattermost/apps.py:11 -msgid "An online team chat service" -msgstr "Mattermost est un service de chat de groupe en ligne" - #: mafiasi/mumble/apps.py:9 mafiasi/mumble/templates/mumble/index.html:5 msgid "Mumble" msgstr "Marmonner" @@ -2134,30 +2051,6 @@ msgstr "Nouvel adresse é-mail" msgid "Change Email" msgstr "Modifier adresse é-mail" -#: mafiasi/registration/templates/registration/account.html:92 -msgid "" -"Note: You can \"change\" your password to the current password to " -"synchronize it with other services (e.g. Jabber)" -msgstr "" -"Remarque: Vous pouvez \"changement\" votre mot de passe le mot de passe en " -"cours pour le synchroniser avec d'autres services (par exemple, Jabber)" - -#: mafiasi/registration/templates/registration/account.html:96 -msgid "Old password" -msgstr "Ancien mot de passe" - -#: mafiasi/registration/templates/registration/account.html:105 -msgid "New password" -msgstr "Nouveau mot de passe" - -#: mafiasi/registration/templates/registration/account.html:114 -msgid "New password confirmation" -msgstr "Nouvelle confirmation de mot de passe" - -#: mafiasi/registration/templates/registration/account.html:125 -msgid "Change password" -msgstr "Changer le mot de passe" - #: mafiasi/registration/templates/registration/email_error.html:5 msgid "Email address is invalid" msgstr "Adresse é-mail ne est pas valide" @@ -3065,17 +2958,6 @@ msgstr "" #~ msgid "e-mails" #~ msgstr "Èmail" -#, fuzzy -#~| msgid "" -#~| "You have to login to create or manage your Jabber account." -#~ msgid "" -#~ "You have to login " -#~ "to see your Jabber account data." -#~ msgstr "" -#~ "Vous devez vous identifier pour créer ou gérer votre compte Jabber." - #~ msgid "Mafiasi Hub" #~ msgstr "Mafiasi Hub" @@ -3086,21 +2968,6 @@ msgstr "" #~ "Doit commencer par une lettre et ne contenir que des caractères " #~ "alphanumériques. Minuscules seulement." -#~ msgid "Create Jabber account" -#~ msgstr "Créez un compte Jabber" - -#~ msgid "" -#~ "To create your Jabber account you have to enter your current password:" -#~ msgstr "" -#~ "Pour créer votre compte Jabber, vous devez entrer votre mot de passe " -#~ "actuel:" - -#~ msgid "" -#~ "You can now create your Jabber account." -#~ msgstr "" -#~ "Vous pouvez maintenant créer votre compte Jabber." - #~ msgid "Account was created." #~ msgstr "Compte a été créé." diff --git a/mafiasi/base/templates/base/licenses.html b/mafiasi/base/templates/base/licenses.html index f5148a76..45a8a11f 100644 --- a/mafiasi/base/templates/base/licenses.html +++ b/mafiasi/base/templates/base/licenses.html @@ -154,7 +154,7 @@

Third-party assets

Glyphicons Halflings (as part of Bootstrap) Jan Kovařík See bootstrap license - Dashboard icons for "Dudel", "Jabber"; some icons in buttons + Dashboard icons for "Bitpoll"; some icons in buttons Redmine logo diff --git a/mafiasi/base/templates/base/technical_info.html b/mafiasi/base/templates/base/technical_info.html index 107cb2bf..b36763a8 100644 --- a/mafiasi/base/templates/base/technical_info.html +++ b/mafiasi/base/templates/base/technical_info.html @@ -63,7 +63,6 @@
  • subscript_and_superscript
  • SOGo
  • -
  • Ejabberd
  • Postfix
  • Sentry
  • diff --git a/mafiasi/gprot/admin.py b/mafiasi/gprot/admin.py index 803ec89b..7aabe1dd 100644 --- a/mafiasi/gprot/admin.py +++ b/mafiasi/gprot/admin.py @@ -1,7 +1,12 @@ -from django.contrib import admin +import hashlib + +from django.contrib import admin, messages +from django.shortcuts import get_object_or_404, redirect +from django.urls import path, reverse from mafiasi.gprot.models import ( Attachment, + BlockedGprots, Favorite, GProt, Label, @@ -18,6 +23,35 @@ class GProtAdmin(admin.ModelAdmin): list_filter = ("published", "is_pdf") search_fields = ("course__name",) + def get_urls(self): + urls = super().get_urls() + custom_urls = [ + path("/block/", self.admin_site.admin_view(self.block_view), name="gprot_block"), + ] + + return custom_urls + urls + + def block_view(self, request, object_id): + to_block = get_object_or_404(GProt, pk=object_id) + if not to_block.is_pdf: + messages.error(request, "Cannot block, not a PDF") + else: + to_block.published = False + to_block.save() + pdf_filefield = to_block.content_pdf + if not pdf_filefield: + messages.error(request, "Cannot block, no file") + else: + pdf_filefield.file.open() + contents = pdf_filefield.file.read() + pdf_filefield.file.close() + pdf_filefield.delete() + hash = hashlib.sha256(contents).hexdigest() + BlockedGprots.objects.create(pdf_hash=hash, gprot_title=str(to_block), blocked_by=request.user) + messages.success(request, "Successfully blocked") + + return redirect(reverse("admin:gprot_gprot_change", args=(object_id,))) + admin.site.register(GProt, GProtAdmin) @@ -25,3 +59,4 @@ class GProtAdmin(admin.ModelAdmin): admin.site.register(Reminder) admin.site.register(Label) admin.site.register(Favorite) +admin.site.register(BlockedGprots) diff --git a/mafiasi/gprot/migrations/0006_blockedgprots.py b/mafiasi/gprot/migrations/0006_blockedgprots.py new file mode 100644 index 00000000..532d2a74 --- /dev/null +++ b/mafiasi/gprot/migrations/0006_blockedgprots.py @@ -0,0 +1,27 @@ +# Generated by Django 4.1 on 2023-07-27 17:43 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ("gprot", "0005_alter_favorite_url"), + ] + + operations = [ + migrations.CreateModel( + name="BlockedGprots", + fields=[ + ("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")), + ("pdf_hash", models.CharField(max_length=64)), + ("gprot_title", models.CharField(max_length=100)), + ( + "blocked_by", + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ], + ), + ] diff --git a/mafiasi/gprot/models.py b/mafiasi/gprot/models.py index dcff4eb7..2e4a0b4e 100644 --- a/mafiasi/gprot/models.py +++ b/mafiasi/gprot/models.py @@ -60,6 +60,15 @@ def __str__(self): return "[{0}] {1}: {2}{3}".format(self.pk, self.exam_date, self.course, append) +class BlockedGprots(models.Model): + pdf_hash = models.CharField(max_length=64) + gprot_title = models.CharField(max_length=100) + blocked_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) + + def __str__(self): + return "BlockedGprot: {0}".format(self.gprot_title) + + class Attachment(models.Model): gprot = models.ForeignKey(GProt, on_delete=models.CASCADE) file = models.FileField(upload_to=make_attachment_filename) diff --git a/mafiasi/gprot/templates/admin/gprot/gprot/change_form.html b/mafiasi/gprot/templates/admin/gprot/gprot/change_form.html new file mode 100644 index 00000000..60fb762a --- /dev/null +++ b/mafiasi/gprot/templates/admin/gprot/gprot/change_form.html @@ -0,0 +1,37 @@ +{% extends "admin/change_form.html" %} +{% load i18n %} +{% block extrastyle %}{{ block.super }} + +{% endblock %} +{% block after_related_objects %} +
    +{% translate 'Block this Gprot' %} +

    {% blocktranslate %}When a Gprot is blocked, a hash is saved that ensures that the same file cannot be uploaded again.{% endblocktranslate %}

    +
    +
    +{% endblock %} diff --git a/mafiasi/gprot/views.py b/mafiasi/gprot/views.py index 7ca9e705..be6217fe 100644 --- a/mafiasi/gprot/views.py +++ b/mafiasi/gprot/views.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import hashlib import json import time from datetime import date @@ -24,7 +25,14 @@ from raven.contrib.django.raven_compat.models import client from mafiasi.gprot.forms import GProtBasicForm, GProtCreateForm, GProtSearchForm -from mafiasi.gprot.models import Attachment, Favorite, GProt, Notification, Reminder +from mafiasi.gprot.models import ( + Attachment, + BlockedGprots, + Favorite, + GProt, + Notification, + Reminder, +) from mafiasi.gprot.sanitize import clean_html from mafiasi.teaching.forms import CourseForm, TeacherForm from mafiasi.teaching.models import Course, Teacher, insert_autocomplete_courses @@ -195,6 +203,7 @@ def edit_gprot(request, gprot_pk): error = _("Only files up to {0} MB are allowed.").format(settings.GPROT_PDF_MAX_SIZE) if magic.from_buffer(upload.read(1024), mime=True) != "application/pdf": error = _("Only PDF files are allowed.") + else: error = _("Please select a file to upload.") @@ -204,6 +213,16 @@ def edit_gprot(request, gprot_pk): gprot.content_pdf = upload gprot.save() _clean_pdf_metadata(gprot) + # we have to calculate the hash after cleaning the file + gprot.content_pdf.file.open() + pdf_content = gprot.content_pdf.file.read() + gprot.content_pdf.file.close() + hash = hashlib.sha256(pdf_content).hexdigest() + if BlockedGprots.objects.filter(pdf_hash=hash).exists(): + error = _( + "This file was blocked because it is an original exam. Please do not try to upload it again because we will get problems with the university." + ) + gprot.content_pdf.delete() else: content = request.POST.get("content", "") diff --git a/mafiasi/jabber/__init__.py b/mafiasi/jabber/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/mafiasi/jabber/admin.py b/mafiasi/jabber/admin.py deleted file mode 100644 index 849332f0..00000000 --- a/mafiasi/jabber/admin.py +++ /dev/null @@ -1,25 +0,0 @@ -from django import forms -from django.contrib import admin - -from mafiasi.base.models import Yeargroup -from mafiasi.jabber.models import ( - DefaultGroup, - JabberUserMapping, - YeargroupSrGroupMapping, -) - - -class YeargroupSrGroupMappingForm(forms.ModelForm): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - yeargroups = Yeargroup.objects.values_list("id", "name") - self.fields["yeargroup_id"] = forms.ChoiceField(choices=yeargroups) - - -class YeargroupSrGroupMappingAdmin(admin.ModelAdmin): - form = YeargroupSrGroupMappingForm - - -admin.site.register(DefaultGroup) -admin.site.register(JabberUserMapping) -admin.site.register(YeargroupSrGroupMapping, YeargroupSrGroupMappingAdmin) diff --git a/mafiasi/jabber/apps.py b/mafiasi/jabber/apps.py deleted file mode 100644 index 6ba45408..00000000 --- a/mafiasi/jabber/apps.py +++ /dev/null @@ -1,15 +0,0 @@ -from django.utils.translation import gettext_lazy as _ - -from mafiasi.base.base_apps import BaseService - - -class JabberConfig(BaseService): - default = True - name = "mafiasi.jabber" - verbose_name = "Jabber" - title = _("Jabber") - description = _( - "On our Jabber server you can chat with your fellow students, which are already on your contact list." - ) - link = "/jabber/" - image = "img/services/jabber.svg" diff --git a/mafiasi/jabber/dbrouter.py b/mafiasi/jabber/dbrouter.py deleted file mode 100644 index 6c9898b1..00000000 --- a/mafiasi/jabber/dbrouter.py +++ /dev/null @@ -1,23 +0,0 @@ -class JabberRouter(object): - def db_for_read(self, model, **hints): - if model._meta.app_label == "jabber": - return "jabber" - return None - - def db_for_write(self, model, **hints): - if model._meta.app_label == "jabber": - return "jabber" - return None - - def allow_relation(self, obj1, obj2, **hints): - if obj1._meta.app_label == "jabber" or obj2._meta.app_label == "jabber": - return obj1._meta.app_label == obj2._meta.app_label - return None - - def allow_migrate(self, db, app_label, model_name=None, **hints): - if db == "jabber": - return app_label == "jabber" - else: - if app_label == "jabber": - return False - return None diff --git a/mafiasi/jabber/erlangparser.py b/mafiasi/jabber/erlangparser.py deleted file mode 100644 index bb40a2fd..00000000 --- a/mafiasi/jabber/erlangparser.py +++ /dev/null @@ -1,34 +0,0 @@ -import json -import re -from typing import Union - - -def parse(string: str) -> dict: - # To make the data json, the headers have to be quoted and the angle brackets have to be removed - # i.e. {key, <<"value">>} to {"key": "value"} - quoted_headers = re.sub(r"\{(\w+),", r'{"\1":', string) - no_angle_brackets = re.sub(r'<<("[^"]+")>>', r"\1", quoted_headers) - data = json.loads(no_angle_brackets) - # Now, the data is available in Python, but it is a list of one-element dictionaries - # These dictionaries are merged here. - result = dict() - for item in data: - result.update(item) - return result - - -def _sanitize(object_to_sanitize: Union[list, str]) -> Union[list, str]: - # To avoid possible code injections, keep only letters, digits, and whitespace - if isinstance(object_to_sanitize, list): - return [_sanitize(x) for x in object_to_sanitize] - return re.sub(r"[^\w\s]", "", object_to_sanitize) - - -def dump(object: dict) -> str: - # First, the merged dictionary has to be split in a list of one-element dictionaries - data = [{_sanitize(k): _sanitize(v)} for k, v in object.items()] - # Then, the data is stringified and the transformations from before (header quotes, angle brackets) are reverted - string = json.dumps(data) - no_quoted_headers = re.sub(r'\{"(\w+)":', r"{\1,", string) - angle_brackets = re.sub(r'("[^"]+")', r"<<\1>>", no_quoted_headers) - return angle_brackets diff --git a/mafiasi/jabber/migrations/0001_initial.py b/mafiasi/jabber/migrations/0001_initial.py deleted file mode 100644 index f171df0a..00000000 --- a/mafiasi/jabber/migrations/0001_initial.py +++ /dev/null @@ -1,203 +0,0 @@ -# -*- coding: utf-8 -*- - - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [] - - operations = [ - migrations.CreateModel( - name="DefaultGroup", - fields=[ - ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True)), - ("group_type", models.CharField(max_length=16, choices=[("student", "Student"), ("other", "Other")])), - ], - options={}, - bases=(models.Model,), - ), - migrations.CreateModel( - name="JabberUser", - fields=[ - ("username", models.TextField(serialize=False, primary_key=True)), - ("password", models.TextField()), - ("created_at", models.DateTimeField()), - ], - options={ - "db_table": "users", - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name="JabberUserMapping", - fields=[ - ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True)), - ("mafiasi_user_id", models.IntegerField(unique=True)), - ("jabber_user", models.OneToOneField(to="jabber.JabberUser", on_delete=models.CASCADE)), - ], - options={}, - bases=(models.Model,), - ), - migrations.CreateModel( - name="PrivacyDefaultList", - fields=[ - ("username", models.TextField(serialize=False, primary_key=True)), - ("name", models.TextField()), - ], - options={ - "db_table": "privacy_default_list", - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name="PrivacyList", - fields=[ - ("id", models.IntegerField(serialize=False, primary_key=True)), - ("username", models.TextField()), - ("name", models.TextField()), - ("created_at", models.DateTimeField()), - ], - options={ - "db_table": "privacy_list", - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name="PrivacyListData", - fields=[ - ( - "privacy_list", - models.ForeignKey( - related_name="data", - primary_key=True, - db_column="id", - serialize=False, - to="jabber.PrivacyList", - on_delete=models.CASCADE, - ), - ), - ("t", models.CharField(max_length=1)), - ("value", models.TextField()), - ("action", models.CharField(max_length=1)), - ("ord", models.IntegerField()), - ("match_all", models.BooleanField(default=False)), - ("match_iq", models.BooleanField(default=False)), - ("match_message", models.BooleanField(default=False)), - ("match_presence_in", models.BooleanField(default=False)), - ("match_presence_out", models.BooleanField(default=False)), - ], - options={ - "db_table": "privacy_list_data", - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name="PrivateStorage", - fields=[ - ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True)), - ("username", models.TextField()), - ("namespace", models.TextField()), - ("data", models.TextField()), - ("created_at", models.DateTimeField()), - ], - options={ - "db_table": "private_storage", - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name="Rostergroups", - fields=[ - ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True)), - ("username", models.TextField()), - ("jid", models.TextField()), - ("grp", models.TextField()), - ], - options={ - "db_table": "rostergroups", - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name="Rosteruser", - fields=[ - ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True)), - ("username", models.TextField()), - ("jid", models.TextField()), - ("nick", models.TextField()), - ("subscription", models.CharField(max_length=1)), - ("ask", models.CharField(max_length=1)), - ("askmessage", models.TextField()), - ("server", models.CharField(max_length=1)), - ("subscribe", models.TextField(blank=True)), - ("type", models.TextField(blank=True)), - ("created_at", models.DateTimeField()), - ], - options={ - "db_table": "rosterusers", - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name="SrGroup", - fields=[ - ("name", models.TextField(serialize=False, primary_key=True)), - ("opts", models.TextField()), - ("created_at", models.DateTimeField()), - ], - options={ - "db_table": "sr_group", - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name="SrUser", - fields=[ - ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True)), - ("jid", models.TextField()), - ("grp", models.TextField()), - ("created_at", models.DateTimeField()), - ], - options={ - "db_table": "sr_user", - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name="Vcard", - fields=[ - ("username", models.TextField(serialize=False, primary_key=True)), - ("vcard", models.TextField()), - ("created_at", models.DateTimeField()), - ], - options={ - "db_table": "vcard", - }, - bases=(models.Model,), - ), - migrations.CreateModel( - name="YeargroupSrGroupMapping", - fields=[ - ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True)), - ("yeargroup_id", models.IntegerField(unique=True)), - ("sr_group", models.ForeignKey(to="jabber.SrGroup", on_delete=models.CASCADE)), - ], - options={}, - bases=(models.Model,), - ), - migrations.AlterUniqueTogether( - name="sruser", - unique_together=set([("jid", "grp")]), - ), - migrations.AlterUniqueTogether( - name="jabberusermapping", - unique_together=set([("jabber_user", "mafiasi_user_id")]), - ), - migrations.AddField( - model_name="defaultgroup", - name="sr_group", - field=models.ForeignKey(to="jabber.SrGroup", on_delete=models.CASCADE), - preserve_default=True, - ), - ] diff --git a/mafiasi/jabber/migrations/0002_auto_20150515_0237.py b/mafiasi/jabber/migrations/0002_auto_20150515_0237.py deleted file mode 100644 index 2fa74888..00000000 --- a/mafiasi/jabber/migrations/0002_auto_20150515_0237.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- - - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("jabber", "0001_initial"), - ] - - operations = [ - migrations.AlterField( - model_name="privacylistdata", - name="privacy_list", - field=models.OneToOneField( - related_name="data", - primary_key=True, - db_column="id", - serialize=False, - to="jabber.PrivacyList", - on_delete=models.CASCADE, - ), - ), - ] diff --git a/mafiasi/jabber/migrations/0003_auto_20161011_2104.py b/mafiasi/jabber/migrations/0003_auto_20161011_2104.py deleted file mode 100644 index d8c7d58c..00000000 --- a/mafiasi/jabber/migrations/0003_auto_20161011_2104.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.2 on 2016-10-11 19:04 - - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("jabber", "0002_auto_20150515_0237"), - ] - - operations = [ - migrations.AlterField( - model_name="jabberuser", - name="password", - field=models.TextField(default="NO_PASSWORDS_IN_DB_ZYYJN53N3M5QMHNQKLOAQD7E"), - ), - ] diff --git a/mafiasi/jabber/migrations/0004_alter_created_at.py b/mafiasi/jabber/migrations/0004_alter_created_at.py deleted file mode 100644 index 0b1f906e..00000000 --- a/mafiasi/jabber/migrations/0004_alter_created_at.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 3.2 on 2021-09-03 12:41 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ("jabber", "0003_auto_20161011_2104"), - ] - - operations = [ - migrations.AlterField( - model_name="sruser", - name="created_at", - field=models.DateTimeField(auto_now_add=True), - ), - migrations.AlterField( - model_name="srgroup", - name="created_at", - field=models.DateTimeField(auto_now_add=True), - ), - ] diff --git a/mafiasi/jabber/migrations/__init__.py b/mafiasi/jabber/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/mafiasi/jabber/models.py b/mafiasi/jabber/models.py deleted file mode 100644 index fe871ee3..00000000 --- a/mafiasi/jabber/models.py +++ /dev/null @@ -1,310 +0,0 @@ -import logging -from html import escape - -from django.conf import settings -from django.contrib.auth import get_user_model -from django.db import models, transaction -from django.db.models.signals import post_save -from django.dispatch import receiver -from django.utils.timezone import now - -from mafiasi.base.models import Mafiasi, Yeargroup -from mafiasi.jabber import erlangparser - - -class PrivacyDefaultList(models.Model): - username = models.TextField(primary_key=True) - name = models.TextField() - - class Meta: - db_table = "privacy_default_list" - - def __str__(self): - return "{0}: {1}".format(self.username, self.name) - - -class PrivacyList(models.Model): - id = models.IntegerField(primary_key=True) - username = models.TextField() - name = models.TextField() - created_at = models.DateTimeField() - - class Meta: - db_table = "privacy_list" - - def __str__(self): - return "{0}: {1}".format(self.username, self.name) - - -class PrivacyListData(models.Model): - privacy_list = models.OneToOneField( - PrivacyList, on_delete=models.CASCADE, db_column="id", related_name="data", primary_key=True - ) - t = models.CharField(max_length=1) - value = models.TextField() - action = models.CharField(max_length=1) - ord = models.IntegerField() - match_all = models.BooleanField(default=False) - match_iq = models.BooleanField(default=False) - match_message = models.BooleanField(default=False) - match_presence_in = models.BooleanField(default=False) - match_presence_out = models.BooleanField(default=False) - - class Meta: - db_table = "privacy_list_data" - - def __str__(self): - return str(self.privacy_list) - - -class PrivateStorage(models.Model): - username = models.TextField() - namespace = models.TextField() - data = models.TextField() - created_at = models.DateTimeField() - - class Meta: - db_table = "private_storage" - - def __str__(self): - return self.username - - -class Rostergroups(models.Model): - username = models.TextField() - jid = models.TextField() - grp = models.TextField() - - class Meta: - db_table = "rostergroups" - - def __str__(self): - return "{0} {1}/{2}".format(self.username, self.grp, self.jid) - - -class Rosteruser(models.Model): - username = models.TextField() - jid = models.TextField() - nick = models.TextField() - subscription = models.CharField(max_length=1) - ask = models.CharField(max_length=1) - askmessage = models.TextField() - server = models.CharField(max_length=1) - subscribe = models.TextField(blank=True) - type = models.TextField(blank=True) - created_at = models.DateTimeField() - - class Meta: - db_table = "rosterusers" - - def __str__(self): - return "{0}: {1} ({2})".format(self.username, self.nick, self.jid) - - -class SrGroup(models.Model): - name = models.TextField(primary_key=True) - opts = models.TextField() - created_at = models.DateTimeField(auto_now_add=True) - - class Meta: - db_table = "sr_group" - - def __str__(self): - return self.name - - -class SrUser(models.Model): - jid = models.TextField() - grp = models.TextField() - created_at = models.DateTimeField(auto_now_add=True) - - class Meta: - db_table = "sr_user" - unique_together = ("jid", "grp") - - def __str__(self): - return "{0} in {1}".format(self.jid, self.grp) - - -class JabberUser(models.Model): - username = models.TextField(primary_key=True) - password = models.TextField(default="NO_PASSWORDS_IN_DB_ZYYJN53N3M5QMHNQKLOAQD7E") - created_at = models.DateTimeField() - - class Meta: - db_table = "users" - - def __str__(self): - return self.username - - def get_jid(self): - return "{0}@{1}".format(self.username, settings.JABBER_DOMAIN) - - def set_nickname(self, nickname): - Vcard.objects.filter(username=self.username).delete() - vcard_tpl = "{nick}" - vcard_xml = vcard_tpl.format(nick=escape(nickname, quote=True)) - try: - vcard = Vcard.objects.get(username=self.username) - vcard.vcard = vcard_xml - except Vcard.DoesNotExist: - vcard = Vcard(username=self.username, vcard=vcard_xml, created_at=now()) - vcard.save() - - -class Vcard(models.Model): - username = models.TextField(primary_key=True) - vcard = models.TextField() - created_at = models.DateTimeField() - - class Meta: - db_table = "vcard" - - def __str__(self): - return self.username - - -class JabberUserMapping(models.Model): - jabber_user = models.OneToOneField(JabberUser, on_delete=models.CASCADE) - mafiasi_user_id = models.IntegerField(unique=True) - - class Meta: - unique_together = ("jabber_user", "mafiasi_user_id") - - def __str__(self): - return "{0} owns {1}@{2}".format(self.mafiasi_user, self.jabber_user, settings.JABBER_DOMAIN) - - def _set_mafiasi_user(self, user): - self.mafiasi_user_id = user.pk - - def _get_mafiasi_user(self): - if not hasattr(self, "_mafiasi_user"): - User = get_user_model() - try: - self._mafiasi_user = User.objects.get(pk=self.mafiasi_user_id) - except User.DoesNotExist: - self._mafiasi_user = None - return self._mafiasi_user - - mafiasi_user = property(_get_mafiasi_user, _set_mafiasi_user) - - -class YeargroupSrGroupMapping(models.Model): - yeargroup_id = models.IntegerField(unique=True) - sr_group = models.ForeignKey(SrGroup, on_delete=models.CASCADE) - - def __str__(self): - return "{0} -> {1}".format(self.yeargroup, self.sr_group) - - def _get_yeargroup(self): - if not hasattr(self, "_yeargroup"): - self._yeargroup = Yeargroup.objects.get(pk=self.yeargroup_id) - return self._yeargroup - - def _set_yeargroup(self, yeargroup): - self.yeargroup_id = yeargroup.pk - - yeargroup = property(_get_yeargroup, _set_yeargroup) - - -GROUP_TYPE_CHOICES = ( - ("student", "Student"), - ("other", "Other"), -) - - -class DefaultGroup(models.Model): - group_type = models.CharField(max_length=16, choices=GROUP_TYPE_CHOICES) - sr_group = models.ForeignKey(SrGroup, on_delete=models.CASCADE) - - def __str__(self): - return "{0}: {1}".format(self.get_group_type_display(), self.sr_group) - - -def get_or_create_account(user): - try: - mapping = JabberUserMapping.objects.get(mafiasi_user_id=user.pk) - return mapping.jabber_user - except JabberUserMapping.DoesNotExist: - return create_jabber_account(user) - - -@receiver(post_save, sender=Mafiasi) -def _account_creation_cb(instance, created, **kwargs): - if created: - create_jabber_account(instance) - - -def create_jabber_account(mafiasi): - if mafiasi.is_student: - group_type = "student" - else: - group_type = "other" - - default_groups = DefaultGroup.objects.filter(group_type=group_type) - sr_groups = [dg.sr_group for dg in default_groups] - - if mafiasi.yeargroup: - try: - m = YeargroupSrGroupMapping.objects.get(yeargroup_id=mafiasi.yeargroup.pk) - sr_groups.append(m.sr_group) - except YeargroupSrGroupMapping.DoesNotExist: - logging.exception("Jabber yeargroup missing for user %s", mafiasi) - - user = JabberUser.objects.create(username=mafiasi.username, created_at=now()) - - if mafiasi.first_name: - nickname = "{0} ({1})".format(mafiasi.first_name, mafiasi.username) - else: - nickname = mafiasi.username - user.set_nickname(nickname) - - JabberUserMapping.objects.create(mafiasi_user_id=mafiasi.pk, jabber_user=user) - - jid = user.get_jid() - for sr_group in sr_groups: - SrUser.objects.create(jid=jid, grp=sr_group.name, created_at=now()) - - return user - - -@receiver(post_save, sender=Yeargroup) -def create_yeargroup(instance: Yeargroup, created, **kwargs): - if not created: - # No changes necessary - return - - jabber_group_name = instance.slug - # The sr_group table is the table containing the groups for the shared roster (sr). - # For each yeargroup, all students of the yeargroup are added to the corresponding - # sr_group automatically, via the create_jabber_account hook above. - sr_group = SrGroup.objects.create(name=jabber_group_name, opts=erlangparser.dump({"name": instance.name})) - # Then, the sr group is mapped to the correct yeargroup in mafiasi. - YeargroupSrGroupMapping.objects.create(yeargroup_id=instance.id, sr_group=sr_group) - - if instance.is_student_group: - # To make the new group visible to all other users, it is added to 'jxxxx_seher'. This - # is a group containing all users that should see the other users and the default group - # for new student users. Therefore, only student yeargroups should be added to the groups - # seen by jxxxx_seher, other groups should only see themselves. - # This code is in an atomic transaction to avoid other changes to the options string during - # the operation. Unfortunately, these options are stored as an Erlang string which has to be - # parsed manually. - with transaction.atomic(using=SrGroup.objects.db): - seher_group, _created = SrGroup.objects.get_or_create(name="jxxxx_seher", defaults={"opts": "[]"}) - current_group_options = seher_group.opts - # These options are in the erlang string format - options = erlangparser.parse(current_group_options) - displayed_groups = options.get("displayed_groups", []) - displayed_groups.append(jabber_group_name) - displayed_groups.sort() - options["displayed_groups"] = displayed_groups - seher_group.opts = erlangparser.dump(options) - seher_group.save() - else: - # For non-student groups, make the group view itself. - options = sr_group.opts - data = erlangparser.parse(options) - data["displayed_groups"] = [jabber_group_name] - sr_group.opts = erlangparser.dump(data) - sr_group.save() diff --git a/mafiasi/jabber/sql/srgroup.sql b/mafiasi/jabber/sql/srgroup.sql deleted file mode 100644 index d62d304e..00000000 --- a/mafiasi/jabber/sql/srgroup.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE sr_group ADD PRIMARY KEY(name); diff --git a/mafiasi/jabber/sql/sruser.sql b/mafiasi/jabber/sql/sruser.sql deleted file mode 100644 index 9ea7777a..00000000 --- a/mafiasi/jabber/sql/sruser.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE sr_user ADD COLUMN id SERIAL PRIMARY KEY; diff --git a/mafiasi/jabber/static/css/jabber.css b/mafiasi/jabber/static/css/jabber.css deleted file mode 100644 index dcdc0926..00000000 --- a/mafiasi/jabber/static/css/jabber.css +++ /dev/null @@ -1,77 +0,0 @@ -#gajim-jabber-config-img { - position: relative; - width: 531px; - height: 220px; - background: url(../img/gajim-en.png); - font-size: 14px; - margin: 1em; -} - -#gajim-jabber-config-username { - position: absolute; - top: 58px; - left: 103px; -} - -#gajim-jabber-config-server { - position: absolute; - top: 58px; - left: 315px; -} - -#dino-jabber-config-img { - position: relative; - width: 402px; - height: 255px; - background: url(../img/dino-en.png); - font-size: 15px; - margin: 1em; -} - -#dino-jabber-config-username { - position: absolute; - top: 128px; - left: 63px; -} - -#pidgin-jabber-config-img { - position: relative; - width: 397px; - height: 509px; - background: url(../img/pidgin-en.png); - font-size: 12px; - margin: 1em; -} - -#pidgin-jabber-config-username { - position: absolute; - top: 105px; - left: 190px; -} - -#pidgin-jabber-config-domain { - position: absolute; - top: 132px; - left: 190px; -} - -#pidgin-jabber-config-alias { - position: absolute; - top: 272px; - left: 190px; -} - -#conversations-jabber-config-img { - position: relative; - width: 400px; - height: 445px; - background: url(../img/conversations-en.png); - font-size: 15px; - margin: 1em; -} - -#conversations-jabber-config-username { - position: absolute; - top: 143px; - left: 33px; -} diff --git a/mafiasi/jabber/static/img/conversations-en.png b/mafiasi/jabber/static/img/conversations-en.png deleted file mode 100644 index 83761ee1..00000000 Binary files a/mafiasi/jabber/static/img/conversations-en.png and /dev/null differ diff --git a/mafiasi/jabber/static/img/dino-en.png b/mafiasi/jabber/static/img/dino-en.png deleted file mode 100644 index 6d1ef8e8..00000000 Binary files a/mafiasi/jabber/static/img/dino-en.png and /dev/null differ diff --git a/mafiasi/jabber/static/img/gajim-en.png b/mafiasi/jabber/static/img/gajim-en.png deleted file mode 100644 index 853f7fcb..00000000 Binary files a/mafiasi/jabber/static/img/gajim-en.png and /dev/null differ diff --git a/mafiasi/jabber/static/img/pidgin-en.png b/mafiasi/jabber/static/img/pidgin-en.png deleted file mode 100644 index 258fe508..00000000 Binary files a/mafiasi/jabber/static/img/pidgin-en.png and /dev/null differ diff --git a/mafiasi/jabber/static/js/jabber.js b/mafiasi/jabber/static/js/jabber.js deleted file mode 100644 index 18089fd5..00000000 --- a/mafiasi/jabber/static/js/jabber.js +++ /dev/null @@ -1,4 +0,0 @@ -$('#jabber-screenshot-tabs a').click(function (e) { - e.preventDefault() - $(this).tab('show') -}) diff --git a/mafiasi/jabber/templates/jabber/index.html b/mafiasi/jabber/templates/jabber/index.html deleted file mode 100644 index 725830d0..00000000 --- a/mafiasi/jabber/templates/jabber/index.html +++ /dev/null @@ -1,99 +0,0 @@ -{% extends "base.html" %} -{% load i18n %} -{% load static %} - -{% block wtitle %}{% block ptitle %}{% trans "Jabber" %}{% endblock %}{% endblock %} - -{% block content %} -
    -{% if user.username != jabber_user.username %} -{% blocktrans with username=jabber_user.username %}Your Jabber ID is {{ username }}@{{ jabber_domain }}. Note: it's different from your username.{% endblocktrans %} -{% else %} -{% blocktrans with username=jabber_user.username %}Your Jabber ID is {{ username }}@{{ jabber_domain }}.{% endblocktrans %} -{% endif %} -
    - -{% url 'registration_account' as account_url %} -{% blocktrans %}

    If you want to change your Jabber password, just change it in your account settings.

    {% endblocktrans %} - -

    {% trans "The fingerprint of the current SSL certificate is:" %}
    -{{ cert_fingerprint }}

    - -

    {% trans 'Configure your Jabber Client' %}

    -

    - {% blocktrans %} - In order to use Jabber, you need to install a Jabber client and configure it - to connect to the Mafiasi server. One option is Gajim, which is recommended by us. - {% endblocktrans %} -

    - -

    - {% blocktrans %} - For Android systems, we recommend using - Conversations, which is - a free Jabber client. It is available for free on F-Droid or paid on the - Play Store. - {% endblocktrans %} -

    - -

    - {% blocktrans %} - Below you can see the required configuration for Gajim, Dino, Pidgin and Conversations. - {% endblocktrans %} -

    - - -
    - - -
    -
    -
    -
    - {{ jabber_user.username }} -
    -
    - {{ jabber_domain }} -
    -
    -
    -
    -
    -
    - {{ jabber_user.username }}@{{ jabber_domain }} -
    -
    -
    -
    -
    -
    - {{ jabber_user.username }} -
    -
    {{ jabber_domain }}
    -
    {{ user_display_name }}
    -
    -
    -
    -
    -
    - {{ jabber_user.username }}@{{ jabber_domain }} -
    -
    -
    -
    -
    - -{% endblock %} - -{% block css %} - -{% endblock %} -{% block js %} - -{% endblock js %} diff --git a/mafiasi/jabber/urls.py b/mafiasi/jabber/urls.py deleted file mode 100644 index 45a00541..00000000 --- a/mafiasi/jabber/urls.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.urls import path - -from .views import index - -urlpatterns = [ - path("", index, name="jabber_index"), -] diff --git a/mafiasi/jabber/views.py b/mafiasi/jabber/views.py deleted file mode 100644 index d0710119..00000000 --- a/mafiasi/jabber/views.py +++ /dev/null @@ -1,26 +0,0 @@ -from django.conf import settings -from django.contrib import messages -from django.contrib.auth.decorators import login_required -from django.shortcuts import redirect -from django.template.response import TemplateResponse -from django.utils.translation import gettext_lazy as _ - -from mafiasi.jabber.models import get_or_create_account -from mafiasi.registration.forms import CheckPasswordForm - - -@login_required -def index(request): - jabber_user = get_or_create_account(request.user) - user_display_name = request.user.get_ldapuser().display_name - - return TemplateResponse( - request, - "jabber/index.html", - { - "jabber_user": jabber_user, - "user_display_name": user_display_name, - "jabber_domain": settings.JABBER_DOMAIN, - "cert_fingerprint": settings.JABBER_CERT_FINGERPRINT, - }, - ) diff --git a/mafiasi/mattermost/__init__.py b/mafiasi/mattermost/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/mafiasi/mattermost/apps.py b/mafiasi/mattermost/apps.py deleted file mode 100644 index 41823cd6..00000000 --- a/mafiasi/mattermost/apps.py +++ /dev/null @@ -1,14 +0,0 @@ -from django.conf import settings -from django.utils.translation import gettext_lazy as _ - -from mafiasi.base.base_apps import BaseService - - -class MattermostConfig(BaseService): - default = True - name = "mafiasi.mattermost" - verbose_name = "Mattermost" - title = _("Chat") - description = _("An online team chat service") - link = settings.MATTERMOST_URL - image = "img/services/mattermost.svg" diff --git a/mafiasi/mattermost/urls.py b/mafiasi/mattermost/urls.py deleted file mode 100644 index 43aeb0ff..00000000 --- a/mafiasi/mattermost/urls.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.urls import path - -from .views import get_user_info - -urlpatterns = [ - path("user", get_user_info, name="mattermost_get_user_info"), -] diff --git a/mafiasi/mattermost/views.py b/mafiasi/mattermost/views.py deleted file mode 100644 index 0dbdd34e..00000000 --- a/mafiasi/mattermost/views.py +++ /dev/null @@ -1,17 +0,0 @@ -from django.http import JsonResponse -from oauth2_provider.decorators import protected_resource - - -@protected_resource() -def get_user_info(request): - user = request.resource_owner - - return JsonResponse( - { - "id": user.id, - "username": user.get_username(), - "login": user.get_username(), - "email": user.email, - "name": user.get_full_name(), - } - ) diff --git a/mafiasi/settings.py b/mafiasi/settings.py index 92fcc30b..a3ef7fe2 100644 --- a/mafiasi/settings.py +++ b/mafiasi/settings.py @@ -13,7 +13,6 @@ TESTING = env.bool("MAFIASI_TESTING", default=False) # Feature toggles -ENABLE_JABBER_INTEGRATION = env.bool("MAFIASI_ENABLE_JABBER_INTEGRATION") ENABLE_EP_INTEGRATION = env.bool("MAFIASI_ENABLE_EP_INTEGRATION") ENABLE_VAULT_INTEGRATION = env.bool("MAFIASI_ENABLE_VAULT_INTEGRATION") @@ -164,7 +163,6 @@ "mafiasi.pks", "mafiasi.kanboard", "mafiasi.whiteboard", - "mafiasi.mattermost", "mafiasi.discourse", "mafiasi.fb18", ### @@ -274,20 +272,6 @@ }, ] -if ENABLE_JABBER_INTEGRATION: - JABBER_DOMAIN = "jabber.mafiasi.de" - JABBER_CERT_FINGERPRINT_FILE = str(env.path("MAFIASI_JABBER_CERT_FINGERPRINT_FILE")) - if os.path.isfile(JABBER_CERT_FINGERPRINT_FILE): - JABBER_CERT_FINGERPRINT = ( - subprocess.check_output(["openssl", "x509", "-in", JABBER_CERT_FINGERPRINT_FILE, "-noout", "-fingerprint"]) - .decode() - .strip() - ) - else: - JABBER_CERT_FINGERPRINT = "" - INSTALLED_APPS.insert(INSTALLED_APPS.index("mafiasi.mattermost"), "mafiasi.jabber") - DATABASES["jabber"] = env.dj_db_url("MAFIASI_DB_JABBER", default="sqlite://:memory:") - if ENABLE_EP_INTEGRATION: DATABASES["etherpad"] = env.dj_db_url("MAFIASI_DB_ETHERPAD", default="sqlite://:memory:") ETHERPAD_API_KEY = env.str("MAFIASI_EP_API_KEY") @@ -298,8 +282,6 @@ VAULT_URL = env.str("MAFIASI_VAULT_URL", default="https://vault.mafiasi.de") VAULT_ADMIN_TOKEN = env.str("MAFIASI_VAULT_ADMIN_TOKEN") -DATABASE_ROUTERS = ["mafiasi.jabber.dbrouter.JabberRouter", "ldapdb.router.Router"] - PROJECT_NAME = "mafiasi.de" PROJECT_BANNER = "Mafiasi Hub" BANNER_IMG = "" @@ -315,7 +297,6 @@ SOGO_URL = "https://sogo.mafiasi.de" GIT_URL = "https://git.mafiasi.de" TAUSCHEN_URL = "https://tauschen.mafiasi.de" -MATTERMOST_URL = "https://mattermost.mafiasi.de" NEXTCLOUD_URL = "https://cloud.mafiasi.de" JITSI_URL = "https://conference.mafiasi.de" DISCOURSE_URL = "https://archiv.mafiasi.de/forum/discourse"