mirror of
				https://github.com/zulip/zulip.git
				synced 2025-10-31 20:13:46 +00:00 
			
		
		
		
	Compare commits
	
		
			62 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 974b95b095 | ||
|  | 5a0553e18b | ||
|  | 9897036290 | ||
|  | 0101877f95 | ||
|  | 3215f70f4c | ||
|  | a771f4ef22 | ||
|  | ba403e0bff | ||
|  | 9329e4a304 | ||
|  | 525c66e328 | ||
|  | 8e692180e5 | ||
|  | c85e00e02e | ||
|  | c72fe95383 | ||
|  | 3b0dbdf2b4 | ||
|  | 7ae4629a4a | ||
|  | 34fbfe88ed | ||
|  | a58f541b63 | ||
|  | deec501da4 | ||
|  | 3b6406c971 | ||
|  | 68bf4156b3 | ||
|  | 62f8a75569 | ||
|  | 145f466dc5 | ||
|  | 2f4e6e4f2b | ||
|  | d42a17f798 | ||
|  | e470253b62 | ||
|  | 9a17d70cd7 | ||
|  | 1cc51972bb | ||
|  | 923c8bf55f | ||
|  | 7f3d55e6ea | ||
|  | a79e40182f | ||
|  | 4d8865b15e | ||
|  | 321a44a736 | ||
|  | 04c026fd24 | ||
|  | d7dbb029a9 | ||
|  | 93bb85d821 | ||
|  | 0aa67c0c99 | ||
|  | 8d67598ff2 | ||
|  | 34a13c8094 | ||
|  | 36ce1ce75e | ||
|  | f36b935f0e | ||
|  | c2508c0966 | ||
|  | deac48810d | ||
|  | c316f267e7 | ||
|  | 87e02760bf | ||
|  | 0b7be2610c | ||
|  | 94f57ad8bd | ||
|  | 17e4b34f10 | ||
|  | 5bf521fa55 | ||
|  | 29dd22e405 | ||
|  | efe9cbba29 | ||
|  | b0d2094967 | ||
|  | 584d71a221 | ||
|  | 12ac89ef3f | ||
|  | 3870a1b304 | ||
|  | 928b8ad031 | ||
|  | 31f7006309 | ||
|  | d8b966e528 | ||
|  | 444359ebd3 | ||
|  | c78bdd6330 | ||
|  | f4e02f0e80 | ||
|  | 77234ef40b | ||
|  | 00f9cd672b | ||
|  | c33a7dfff4 | 
| @@ -3,12 +3,13 @@ root = true | ||||
| [*] | ||||
| end_of_line = lf | ||||
| charset = utf-8 | ||||
| indent_size = 4 | ||||
| indent_style = space | ||||
| trim_trailing_whitespace = true | ||||
| insert_final_newline = true | ||||
|  | ||||
| [*.{sh,py,pyi,js,ts,json,xml,css,scss,hbs,html}] | ||||
| indent_style = space | ||||
| indent_size = 4 | ||||
| binary_next_line = true  # for shfmt | ||||
| switch_case_indent = true  # for shfmt | ||||
|  | ||||
| [*.py] | ||||
| max_line_length = 110 | ||||
| @@ -17,5 +18,4 @@ max_line_length = 110 | ||||
| max_line_length = 100 | ||||
|  | ||||
| [*.{svg,rb,pp}] | ||||
| indent_style = space | ||||
| indent_size = 2 | ||||
|   | ||||
| @@ -10,7 +10,7 @@ def clear_duplicate_counts(apps: StateApps, schema_editor: DatabaseSchemaEditor) | ||||
|     The backstory is that Django's unique_together indexes do not properly | ||||
|     handle the subgroup=None corner case (allowing duplicate rows that have a | ||||
|     subgroup of None), which meant that in race conditions, rather than updating | ||||
|     an existing row for the property/realm/time with subgroup=None, Django would | ||||
|     an existing row for the property/(realm, stream, user)/time with subgroup=None, Django would | ||||
|     create a duplicate row. | ||||
|  | ||||
|     In the next migration, we'll add a proper constraint to fix this bug, but | ||||
| @@ -20,26 +20,32 @@ def clear_duplicate_counts(apps: StateApps, schema_editor: DatabaseSchemaEditor) | ||||
|     this means deleting the extra rows, but for LoggingCountStat objects, we need to | ||||
|     additionally combine the sums. | ||||
|     """ | ||||
|     RealmCount = apps.get_model('analytics', 'RealmCount') | ||||
|     count_tables = dict(realm=apps.get_model('analytics', 'RealmCount'), | ||||
|                         user=apps.get_model('analytics', 'UserCount'), | ||||
|                         stream=apps.get_model('analytics', 'StreamCount'), | ||||
|                         installation=apps.get_model('analytics', 'InstallationCount')) | ||||
|  | ||||
|     realm_counts = RealmCount.objects.filter(subgroup=None).values( | ||||
|         'realm_id', 'property', 'end_time').annotate( | ||||
|     for name, count_table in count_tables.items(): | ||||
|         value = [name, 'property', 'end_time'] | ||||
|         if name == 'installation': | ||||
|             value = ['property', 'end_time'] | ||||
|         counts = count_table.objects.filter(subgroup=None).values(*value).annotate( | ||||
|             Count('id'), Sum('value')).filter(id__count__gt=1) | ||||
|  | ||||
|     for realm_count in realm_counts: | ||||
|         realm_count.pop('id__count') | ||||
|         total_value = realm_count.pop('value__sum') | ||||
|         duplicate_counts = list(RealmCount.objects.filter(**realm_count)) | ||||
|         first_count = duplicate_counts[0] | ||||
|         if realm_count['property'] in ["invites_sent::day", "active_users_log:is_bot:day"]: | ||||
|             # For LoggingCountStat objects, the right fix is to combine the totals; | ||||
|             # for other CountStat objects, we expect the duplicates to have the same value. | ||||
|             # And so all we need to do is delete them. | ||||
|             first_count.value = total_value | ||||
|             first_count.save() | ||||
|         to_cleanup = duplicate_counts[1:] | ||||
|         for duplicate_count in to_cleanup: | ||||
|             duplicate_count.delete() | ||||
|         for count in counts: | ||||
|             count.pop('id__count') | ||||
|             total_value = count.pop('value__sum') | ||||
|             duplicate_counts = list(count_table.objects.filter(**count)) | ||||
|             first_count = duplicate_counts[0] | ||||
|             if count['property'] in ["invites_sent::day", "active_users_log:is_bot:day"]: | ||||
|                 # For LoggingCountStat objects, the right fix is to combine the totals; | ||||
|                 # for other CountStat objects, we expect the duplicates to have the same value. | ||||
|                 # And so all we need to do is delete them. | ||||
|                 first_count.value = total_value | ||||
|                 first_count.save() | ||||
|             to_cleanup = duplicate_counts[1:] | ||||
|             for duplicate_count in to_cleanup: | ||||
|                 duplicate_count.delete() | ||||
|  | ||||
| class Migration(migrations.Migration): | ||||
|  | ||||
|   | ||||
| @@ -121,7 +121,7 @@ def stats_for_realm(request: HttpRequest, realm_str: str) -> HttpResponse: | ||||
|     try: | ||||
|         realm = get_realm(realm_str) | ||||
|     except Realm.DoesNotExist: | ||||
|         return HttpResponseNotFound(f"Realm {realm_str} does not exist") | ||||
|         return HttpResponseNotFound() | ||||
|  | ||||
|     return render_stats(request, f'/realm/{realm_str}', realm.name or realm.string_id, | ||||
|                         analytics_ready=is_analytics_ready(realm)) | ||||
| @@ -1486,7 +1486,7 @@ def get_realm_activity(request: HttpRequest, realm_str: str) -> HttpResponse: | ||||
|     try: | ||||
|         admins = Realm.objects.get(string_id=realm_str).get_human_admin_users() | ||||
|     except Realm.DoesNotExist: | ||||
|         return HttpResponseNotFound(f"Realm {realm_str} does not exist") | ||||
|         return HttpResponseNotFound() | ||||
|  | ||||
|     admin_emails = {admin.delivery_email for admin in admins} | ||||
|  | ||||
|   | ||||
| @@ -192,14 +192,7 @@ def sponsorship(request: HttpRequest, user: UserProfile, | ||||
|     realm = user.realm | ||||
|  | ||||
|     requested_by = user.full_name | ||||
|  | ||||
|     role_id_to_name_map = { | ||||
|         UserProfile.ROLE_REALM_OWNER: "Realm owner", | ||||
|         UserProfile.ROLE_REALM_ADMINISTRATOR: "Realm adminstrator", | ||||
|         UserProfile.ROLE_MEMBER: "Member", | ||||
|         UserProfile.ROLE_GUEST: "Guest" | ||||
|     } | ||||
|     user_role = role_id_to_name_map[user.role] | ||||
|     user_role = user.get_role_name() | ||||
|  | ||||
|     support_realm_uri = get_realm(settings.STAFF_SUBDOMAIN).uri | ||||
|     support_url = urljoin(support_realm_uri, urlunsplit(("", "", reverse('analytics.views.support'), | ||||
|   | ||||
							
								
								
									
										2
									
								
								docs/_templates/layout.html
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								docs/_templates/layout.html
									
									
									
									
										vendored
									
									
								
							| @@ -5,7 +5,7 @@ | ||||
|     # version e.g. to say that something is likely to have changed. | ||||
|     # For more info see: https://www.sphinx-doc.org/en/master/templating.html | ||||
|     #} | ||||
|     {% if pagename in ["production/management-commands", "production/email-gateway", "production/upgrade-or-modify", "production/zoom-configuration"] and release.endswith('+git') %} | ||||
|     {% if pagename in ["production/video-calls"] and release.endswith('+git') %} | ||||
|     {# | ||||
|     # This page doesn't exist in the stable documentation yet. | ||||
|     # This temporary workaround prevents CircleCI failure and should be removed after the next release. | ||||
|   | ||||
| @@ -177,7 +177,7 @@ git remote add -f upstream https://github.com/zulip/zulip.git | ||||
|  | ||||
| ``` | ||||
| doas pkg_add sudo bash gcc postgresql-server redis rabbitmq \ | ||||
|     memcached libmemcached py-Pillow py-cryptography py-cffi | ||||
|     memcached py-Pillow py-cryptography py-cffi | ||||
|  | ||||
| # Point environment to custom include locations and use newer GCC | ||||
| # (needed for Node modules): | ||||
|   | ||||
| @@ -7,6 +7,87 @@ All notable changes to the Zulip server are documented in this file. | ||||
| This section lists notable unreleased changes; it is generally updated | ||||
| in bursts. | ||||
|  | ||||
| ### 3.4 -- April 14, 2021 | ||||
|  | ||||
| - CVE-2021-30487: Prevent administrators from moving topics to | ||||
|   disallowed streams. | ||||
| - CVE-2021-30479: Prevent guest user access to `all_public_streams` | ||||
|   API. | ||||
| - CVE-2021-30478: Prevent API super users from forging messages to | ||||
|   other organizations. | ||||
| - CVE-2021-30477: Prevent outgoing webhook bots from sending arbitrary | ||||
|   messages to any stream. | ||||
| - Fixed a potential HTML injection bug in outgoing emails. | ||||
| - Fixed Postfix configuration error which would prevent outgoing email | ||||
|   to any email address containing `.`, `+`, or starting with `mm`, when | ||||
|   configured to use the local Postfix to deliver outgoing email. | ||||
| - Fixed a backporting error which caused the `manage.py | ||||
|   change_user_role` tool to not work for `admin`, `member`, or `guest` roles. | ||||
| - Add support for logout events sent from modern versions of the | ||||
|   desktop application. | ||||
| - Upgraded minor python dependencies. | ||||
| - Minor documentation fixes. | ||||
|  | ||||
| ### 3.3 -- December 1, 2020 | ||||
|  | ||||
| - Guest users should not be allowed to post to streams marked “Only | ||||
|   organization full members can post.”  This flaw has existed since | ||||
|   the feature was added in Zulip Server 3.0. | ||||
| - Permit outgoing mail from postfix; this resolves a bug introduced in | ||||
|   Zulip Server 3.2 which prevented Zulip from sending outgoing mail if | ||||
|   the local mail server (used mostly for incoming mail) was also used | ||||
|   for outgoing email (`MAIL_HOST='localhost'`). | ||||
| - Ensure that the `upgrade-postgres` tool upgrades the cluster’s data | ||||
|   to the specific PostgreSQL version requested; this resolves a bug | ||||
|   where, now that PostgreSQL 13 has been released, `upgrade-postgres` | ||||
|   would attempt to upgrade to that version and not PostgreSQL 12. | ||||
| - Replace the impenetrably-named `./manage.py knight` with | ||||
|   `./manage.py change_user_role`, and extend it to support | ||||
|   “Organization owner” roles. | ||||
| - Handle realm emojis that have been manually deleted more gracefully. | ||||
|  | ||||
| ### 3.2 -- September 15, 2020 | ||||
|  | ||||
| - Switched from `libmemcached` to `python-binary-memcached`, a | ||||
|   pure-Python implementation; this should eliminate memcached | ||||
|   connection problems affecting some installations. | ||||
| - Removed unnecessary `django-cookies-samesite` dependency, which had | ||||
|   its latest release removed from PyPI (breaking installation of Zulip | ||||
|   3.1). | ||||
| - Limited which local email addresses Postfix accepts when the | ||||
|   incoming email integration is enabled; this prevents the enumeration | ||||
|   of local users via the email system. | ||||
| - Fixed incorrectly case-sensitive email validation in `REMOTE_USER` | ||||
|   authentication. | ||||
| - Fixed search results for `has:image`. | ||||
| - Fixed ability to adjust "Who can post on the stream" configuration. | ||||
| - Fixed display of "Permission [to post] will be granted in n days" | ||||
|   for n > 365. | ||||
| - Support providing `nginx_listen_port` setting in conjunction with | ||||
|   `http_only` in `zulip.conf`. | ||||
| - Improved upgrade documentation. | ||||
| - Removed internal ID lists which could leak into the events API. | ||||
|  | ||||
| ### 3.1 -- July 30, 2020 | ||||
|  | ||||
| - Removed unused `short_name` field from the User model.  This field | ||||
|   had no purpose and could leak the local part of email addresses | ||||
|   when email address visiblity was restricted. | ||||
| - Fixed a bug where loading spinners would sometimes not be displayed. | ||||
| - Fixed incoming email gateway exception with unstructured headers. | ||||
| - Fixed AlertWords not being included in data import/export. | ||||
| - Fixed Twitter previews not including a clear link to the tweet. | ||||
| - Fixed compose box incorrectly opening after uploading a file in a | ||||
|   message edit widget. | ||||
| - Fixed exception in SAML integration with encrypted assertions. | ||||
| - Fixed an analytics migration bug that could cause upgrading from 2.x | ||||
|   releases to fail. | ||||
| - Added a Thinkst Canary integration (and renamed the old one, which | ||||
|   was actually an integration for canarytokens.org). | ||||
| - Reformatted the frontend codebase using prettier.  This change was | ||||
|   included in this maintenance release to ensure backporting patches | ||||
|   from master remains easy. | ||||
|  | ||||
| ### 3.0 -- July 16, 2020 | ||||
|  | ||||
| #### Highlights | ||||
|   | ||||
| @@ -65,8 +65,9 @@ su zulip -c '/home/zulip/deployments/current/manage.py backup' | ||||
| ``` | ||||
|  | ||||
| The backup tool provides the following options: | ||||
| - `--output`: Path where the output file should be stored. If no path is | ||||
|  provided, the output file is saved to a temporary directory. | ||||
| - `--output=/tmp/backup.tar.gz`: Filename to write the backup tarball | ||||
|   to (default: write to a file in `/tmp`).  On success, the | ||||
|   console output will show the path to the output tarball. | ||||
| - `--skip-db`: Skip backup of the database.  Useful if you're using a | ||||
|   remote postgres host with its own backup system and just need to | ||||
|   backup non-database state. | ||||
|   | ||||
| @@ -21,4 +21,4 @@ Zulip in Production | ||||
|    email | ||||
|    deployment | ||||
|    email-gateway | ||||
|    zoom-configuration | ||||
|    video-calls | ||||
|   | ||||
| @@ -74,11 +74,10 @@ If the script gives an error, consult [Troubleshooting](#troubleshooting) below. | ||||
| ## Step 3: Create a Zulip organization, and log in | ||||
|  | ||||
| On success, the install script prints a link.  If you're [restoring a | ||||
| backup][zulip-backups] or importing your data from [HipChat][hipchat-import], | ||||
| [Slack][slack-import], or another Zulip server, you should stop here | ||||
| backup][zulip-backups] or importing your data from [Slack][slack-import], | ||||
| or another Zulip server, you should stop here | ||||
| and return to the import instructions. | ||||
|  | ||||
| [hipchat-import]: https://zulip.com/help/import-from-hipchat | ||||
| [slack-import]: https://zulip.com/help/import-from-slack | ||||
| [zulip-backups]: ../production/export-and-import.html#backups | ||||
|  | ||||
| @@ -164,11 +163,13 @@ the bottom of `/var/log/zulip/errors.log` for a traceback, and consult | ||||
| the [troubleshooting section](troubleshooting.md) for advice on | ||||
| how to debug. | ||||
|  | ||||
| **Community.** | ||||
| If the tips above don't help, please visit | ||||
| [#production help](https://chat.zulip.org/#narrow/stream/31-production-help) | ||||
| in the [Zulip development community server](../contributing/chat-zulip-org.md) for | ||||
| realtime help or email zulip-help@googlegroups.com with the full | ||||
| traceback, and we'll try to help you out!  Please provide details like | ||||
| the full traceback from the bottom of `/var/log/zulip/errors.log` in | ||||
| your report. | ||||
| **Community.** If the tips above don't help, please visit [#production | ||||
| help][production-help] in the [Zulip development community | ||||
| server][chat-zulip-org] for realtime help, and we'll try to help you | ||||
| out!  Please provide details like the full traceback from the bottom | ||||
| of `/var/log/zulip/errors.log` in your report (ideally in a [code | ||||
| block][code-block]). | ||||
|  | ||||
| [chat-zulip-org]: ../contributing/chat-zulip-org.md | ||||
| [production-help]: https://chat.zulip.org/#narrow/stream/31-production-help | ||||
| [code-block]: https://zulip.com/help/format-your-message-using-markdown#code | ||||
|   | ||||
| @@ -117,11 +117,10 @@ There are dozens of useful management commands under | ||||
| * `./manage.py send_password_reset_email`: Sends password reset email(s) | ||||
|   to one or more users. | ||||
| * `./manage.py change_user_email`: Change a user's email address. | ||||
| * `./manage.py knight`: Can toggle whether a user is an administrator | ||||
| * `./manage.py change_user_role`: Can change are user's role | ||||
|   (easier done [via the | ||||
|   UI](https://zulip.com/help/change-a-users-role)) or create an | ||||
|   API super user bot (with `--permission=api_super_user`), which are | ||||
|   needed for some content mirroring integrations. | ||||
|   `api_super_user`, which are needed for certain special API features. | ||||
| * `./manage.py export_single_user` does a limited version of the [main | ||||
|   export tools](../production/export-and-import.md) containing just | ||||
|   the messages accessible by a single user. | ||||
|   | ||||
| @@ -193,7 +193,7 @@ strength allowed is controlled by two settings in | ||||
|  | ||||
|     API super user bots cannot be created by Zulip users, including | ||||
|     organization owners. They can only be created on the command | ||||
|     line (via `manage.py knight --permission=api_super_user`). | ||||
|     line (via `manage.py change_user_role api_super_user`). | ||||
|  | ||||
| ## User-uploaded content | ||||
|  | ||||
|   | ||||
| @@ -100,7 +100,7 @@ Some popular settings in `/etc/zulip/settings.py` include: | ||||
|   tweets. | ||||
| * The [email gateway](../production/email-gateway.md), which lets | ||||
|   users send emails into Zulip. | ||||
| * The [Zoom video call integration](zoom-configuration.md). | ||||
| * The [Video call integrations](../production/video-calls.md). | ||||
|  | ||||
| ## Zulip announcement list | ||||
|  | ||||
|   | ||||
| @@ -249,9 +249,9 @@ instructions for other supported platforms. | ||||
|         /home/zulip/deployments/current/ --ignore-static-assets --audit-fts-indexes | ||||
|     ``` | ||||
|  | ||||
| That last command will finish by restarting your Zulip server; you | ||||
| should now be able to navigate to its URL and confirm everything is | ||||
| working correctly. | ||||
|    This will finish by restarting your Zulip server; you should now be | ||||
|    able to navigate to its URL and confirm everything is working | ||||
|    correctly. | ||||
|  | ||||
| ### Upgrading from Ubuntu 16.04 Xenial to 18.04 Bionic | ||||
|  | ||||
| @@ -278,11 +278,28 @@ working correctly. | ||||
|     systemctl restart memcached | ||||
|     ``` | ||||
|  | ||||
| 5. Same as for Bionic to Focal. | ||||
| 5. Finally, we need to reinstall the current version of Zulip, which | ||||
|    among other things will recompile Zulip's Python module | ||||
|    dependencies for your new version of Python: | ||||
|  | ||||
| That last command will finish by restarting your Zulip server; you | ||||
| should now be able to navigate to its URL and confirm everything is | ||||
| working correctly. | ||||
|     ``` | ||||
|     rm -rf /srv/zulip-venv-cache/* | ||||
|     /home/zulip/deployments/current/scripts/lib/upgrade-zulip-stage-2 \ | ||||
|         /home/zulip/deployments/current/ --ignore-static-assets | ||||
|     ``` | ||||
|  | ||||
|    This will finish by restarting your Zulip server; you should now | ||||
|    be able to navigate to its URL and confirm everything is working | ||||
|    correctly. | ||||
|  | ||||
| 6. [Upgrade to the latest Zulip release](#upgrading-to-a-release), now | ||||
|    that your server is running a supported operating system. | ||||
|  | ||||
| 7. As root, finish by verifying the contents of the full-text indexes: | ||||
|  | ||||
|     ``` | ||||
|     /home/zulip/deployments/current/manage.py audit_fts_indexes | ||||
|     ``` | ||||
|  | ||||
| ### Upgrading from Ubuntu 14.04 Trusty to 16.04 Xenial | ||||
|  | ||||
| @@ -295,7 +312,7 @@ working correctly. | ||||
| 3. Same as for Bionic to Focal. | ||||
|  | ||||
| 4. As root, upgrade the database installation and OS configuration to | ||||
| match the new OS version: | ||||
|    match the new OS version: | ||||
|  | ||||
|     ``` | ||||
|     apt remove upstart -y | ||||
| @@ -309,11 +326,23 @@ match the new OS version: | ||||
|     service memcached restart | ||||
|     ``` | ||||
|  | ||||
| 5. Same as for Bionic to Focal. | ||||
| 5. Finally, we need to reinstall the current version of Zulip, which | ||||
|    among other things will recompile Zulip's Python module | ||||
|    dependencies for your new version of Python: | ||||
|  | ||||
| That last command will finish by restarting your Zulip server; you | ||||
| should now be able to navigate to its URL and confirm everything is | ||||
| working correctly. | ||||
|     ``` | ||||
|     rm -rf /srv/zulip-venv-cache/* | ||||
|     /home/zulip/deployments/current/scripts/lib/upgrade-zulip-stage-2 \ | ||||
|         /home/zulip/deployments/current/ --ignore-static-assets | ||||
|     ``` | ||||
|  | ||||
|    This will finish by restarting your Zulip server; you should now be | ||||
|    able to navigate to its URL and confirm everything is working | ||||
|    correctly. | ||||
|  | ||||
| 6. [Upgrade from Xenial to | ||||
|    Bionic](#upgrading-from-ubuntu-16-04-xenial-to-18-04-bionic), so | ||||
|    that you are running a supported operating system. | ||||
|  | ||||
| ### Upgrading from Debian Stretch to Debian Buster | ||||
|  | ||||
| @@ -339,20 +368,37 @@ working correctly. | ||||
|     ``` | ||||
|     apt remove upstart -y | ||||
|     /home/zulip/deployments/current/scripts/zulip-puppet-apply -f | ||||
|     pg_dropcluster 9.5 main --stop | ||||
|     pg_dropcluster 11 main --stop | ||||
|     systemctl stop postgresql | ||||
|     pg_upgradecluster -m upgrade 9.3 main | ||||
|     pg_dropcluster 9.3 main | ||||
|     apt remove postgresql-9.3 | ||||
|     pg_upgradecluster -m upgrade 9.6 main | ||||
|     pg_dropcluster 9.6 main | ||||
|     apt remove postgresql-9.6 | ||||
|     systemctl start postgresql | ||||
|     service memcached restart | ||||
|     ``` | ||||
|  | ||||
| 5. Same as for Bionic to Focal. | ||||
| 5. Finally, we need to reinstall the current version of Zulip, which | ||||
|    among other things will recompile Zulip's Python module | ||||
|    dependencies for your new version of Python: | ||||
|  | ||||
| That last command will finish by restarting your Zulip server; you | ||||
| should now be able to navigate to its URL and confirm everything is | ||||
| working correctly. | ||||
|     ``` | ||||
|     rm -rf /srv/zulip-venv-cache/* | ||||
|     /home/zulip/deployments/current/scripts/lib/upgrade-zulip-stage-2 \ | ||||
|         /home/zulip/deployments/current/ --ignore-static-assets | ||||
|     ``` | ||||
|  | ||||
|    This will finish by restarting your Zulip server; you should now | ||||
|    be able to navigate to its URL and confirm everything is working | ||||
|    correctly. | ||||
|  | ||||
| 6. [Upgrade to the latest Zulip release](#upgrading-to-a-release), now | ||||
|    that your server is running a supported operating system. | ||||
|  | ||||
| 7. As root, finish by verifying the contents of the full-text indexes: | ||||
|  | ||||
|     ``` | ||||
|     /home/zulip/deployments/current/manage.py audit_fts_indexes | ||||
|     ``` | ||||
|  | ||||
| ## Upgrading PostgreSQL | ||||
|  | ||||
|   | ||||
							
								
								
									
										77
									
								
								docs/production/video-calls.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								docs/production/video-calls.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | ||||
| # Video call providers | ||||
|  | ||||
| This page documents the server-level configuration required to support | ||||
| non-default [video call integration | ||||
| options](https://zulip.com/help/start-a-call) on a self-hosted Zulip | ||||
| server. | ||||
|  | ||||
| ## Zoom | ||||
|  | ||||
| To use the [Zoom](https://zoom.us) integration on a self-hosted | ||||
| installation, you'll need to register a custom Zoom app as follows: | ||||
|  | ||||
| 1. Select [**Build App**](https://marketplace.zoom.us/develop/create) | ||||
|    at the Zoom Marketplace. | ||||
|  | ||||
| 1. Create an app with the **OAuth** type. | ||||
|  | ||||
|    * Choose an app name such as "ExampleCorp Zulip". | ||||
|    * Select **User-managed app**. | ||||
|    * Disable the option to publish the app on the Marketplace. | ||||
|    * Click **Create**. | ||||
|  | ||||
| 1. Inside of the Zoom app management page: | ||||
|  | ||||
|    * On the **App Credentials** tab, set both the **Redirect URL for | ||||
|      OAuth** and the **Whitelist URL** to | ||||
|      `https://zulip.example.com/calls/zoom/complete` (replacing | ||||
|      `zulip.example.com` by your main Zulip hostname). | ||||
|    * On the **Scopes** tab, add the `meeting:write` scope. | ||||
|  | ||||
| You can then configure your Zulip server to use that Zoom app as | ||||
| follows: | ||||
|  | ||||
| 1. In `/etc/zulip/zulip-secrets.conf`, set `video_zoom_client_secret` | ||||
|    to be your app's "Client Secret". | ||||
|  | ||||
| 1. In `/etc/zulip/settings.py`, set `VIDEO_ZOOM_CLIENT_ID` to your | ||||
|    app's "Client ID". | ||||
|  | ||||
| 1. Restart the Zulip server with | ||||
|    `/home/zulip/deployments/current/scripts/restart-server`. | ||||
|  | ||||
| This enables Zoom support in your Zulip server.  Finally, [configure | ||||
| Zoom as the video call | ||||
| provider](https://zulip.com/help/start-a-call) in the Zulip | ||||
| organization(s) where you want to use it. | ||||
|  | ||||
| ## Big Blue Button | ||||
|  | ||||
| To use the [Big Blue Button](https://bigbluebutton.org/) video call | ||||
| integration on a self-hosted Zulip installation, you'll need to have a | ||||
| Big Blue Button server and configure it: | ||||
|  | ||||
| 1. Get the Shared Secret using the `bbb-conf --secret` command on your | ||||
|    Big Blue Button Server. See also [the Big Blue Button | ||||
|    documentation](https://docs.bigbluebutton.org/2.2/customize.html#extract-the-shared-secret). | ||||
|  | ||||
| 2. Get the URL to your Big Blue Button API. The URL has the form of | ||||
|    `https://bigbluebutton.example.com/bigbluebutton/` and can also be | ||||
|    found using the `bbb-conf --secret` command. | ||||
|  | ||||
| You can then configure your Zulip server to use that Big Blue Button | ||||
| Server as follows: | ||||
|  | ||||
| 1. In `/etc/zulip/zulip-secrets.conf`, set `big_blue_button_secret` | ||||
|    to be your Big Blue Button Server's shared secret. | ||||
|  | ||||
| 2. In `/etc/zulip/settings.py`, set `BIG_BLUE_BUTTON_URL` to your | ||||
|    to be your Big Blue Button Server's API URL. | ||||
|  | ||||
| 3. Restart the Zulip server with | ||||
|    `/home/zulip/deployments/current/scripts/restart-server`. | ||||
|  | ||||
| This enables Big Blue Button support in your Zulip server.  Finally, [configure | ||||
| Big Blue Button as the video call | ||||
| provider](https://zulip.com/help/start-a-call) in the Zulip | ||||
| organization(s) where you want to use it. | ||||
| @@ -1,36 +0,0 @@ | ||||
| # Zoom Video Calling OAuth Configuration | ||||
|  | ||||
| To use the [Zoom](https://zoom.us) integration on a self-hosted | ||||
| installation, you'll need to register a custom Zoom Application as | ||||
| follows: | ||||
|  | ||||
| 1. Visit the [Zoom Marketplace](https://marketplace.zoom.us/develop/create). | ||||
|  | ||||
| 1. Create a new application, choosing **OAuth** as the app type. | ||||
| We recommend using a name like "ExampleCorp Zulip". | ||||
|  | ||||
| 1. Select *account-level app* for the authentication type, disable | ||||
| the option to publish the app in the Marketplace, and click **Create**. | ||||
|  | ||||
| 1. Inside of the Zoom app management page, set the Redirect URL to | ||||
| `https://zulip.example.com/calls/zoom/complete` (replacing | ||||
| `zulip.example.com` by your main Zulip hostname). | ||||
|  | ||||
| 1. Set the "Scopes" to `meeting:write:admin`. | ||||
|  | ||||
| You can then configure your Zulip server to use that Zoom application | ||||
| as follows: | ||||
|  | ||||
| 1. In `/etc/zulip/zulip-secrets.conf`, set `video_zoom_client_secret` | ||||
| to be your app's "Client Secret". | ||||
|  | ||||
| 1. In `/etc/zulip/settings.py`, set `VIDEO_ZOOM_CLIENT_ID` to your | ||||
|    app's "Client ID". | ||||
|  | ||||
| 1. Restart the Zulip server with | ||||
|    `/home/zulip/deployments/current/scripts/restart-server`. | ||||
|  | ||||
| This enables Zoom support in your Zulip server.  Finally, [configure | ||||
| Zoom as the video call | ||||
| provider](https://zulip.com/help/start-a-call) in the Zulip | ||||
| organization(s) where you want to use it. | ||||
| @@ -137,8 +137,8 @@ Important considerations for any changes are: | ||||
| Zulip's markdown processor's rendering supports a number of features | ||||
| that depend on realm-specific or user-specific data.  For example, the | ||||
| realm could have | ||||
| [Linkifiers](https://zulip.com/help/add-a-custom-linkification-filter) | ||||
| or [Custom emoji](https://zulip.com/help/add-custom-emoji) | ||||
| [linkifiers](https://zulip.com/help/add-a-custom-linkifier) | ||||
| or [custom emoji](https://zulip.com/help/add-custom-emoji) | ||||
| configured, and Zulip supports mentions for streams, users, and user | ||||
| groups (which depend on data like users' names, IDs, etc.). | ||||
|  | ||||
|   | ||||
| @@ -364,7 +364,7 @@ run_test("validate_stream_message", () => { | ||||
|     assert($("#compose-all-everyone").visible()); | ||||
| }); | ||||
|  | ||||
| run_test("test_validate_stream_message_post_policy", () => { | ||||
| run_test("test_validate_stream_message_post_policy_admin_only", () => { | ||||
|     // This test is in continuation with test_validate but it has been separated out | ||||
|     // for better readability. Their relative position of execution should not be changed. | ||||
|     // Although the position with respect to test_validate_stream_message does not matter | ||||
| @@ -386,9 +386,45 @@ run_test("test_validate_stream_message_post_policy", () => { | ||||
|         i18n.t("Only organization admins are allowed to post to this stream."), | ||||
|     ); | ||||
|  | ||||
|     // reset compose_state.stream_name to 'social' again so that any tests occurung after this | ||||
|     // Reset error message. | ||||
|     compose_state.stream_name("social"); | ||||
|  | ||||
|     page_params.is_admin = false; | ||||
|     page_params.is_guest = true; | ||||
|  | ||||
|     compose_state.topic("subject102"); | ||||
|     compose_state.stream_name("stream102"); | ||||
|     assert(!compose.validate()); | ||||
|     assert.equal( | ||||
|         $("#compose-error-msg").html(), | ||||
|         i18n.t("Only organization admins are allowed to post to this stream."), | ||||
|     ); | ||||
| }); | ||||
|  | ||||
| run_test("test_validate_stream_message_post_policy_full_members_only", () => { | ||||
|     page_params.is_admin = false; | ||||
|     page_params.is_guest = true; | ||||
|     const sub = { | ||||
|         stream_id: 103, | ||||
|         name: "stream103", | ||||
|         subscribed: true, | ||||
|         stream_post_policy: stream_data.stream_post_policy_values.non_new_members.code, | ||||
|     }; | ||||
|  | ||||
|     compose_state.topic("subject103"); | ||||
|     compose_state.stream_name("stream103"); | ||||
|     stream_data.add_sub(sub); | ||||
|     assert(!compose.validate()); | ||||
|     assert.equal( | ||||
|         $("#compose-error-msg").html(), | ||||
|         i18n.t("Guests are not allowed to post to this stream."), | ||||
|     ); | ||||
|  | ||||
|     // reset compose_state.stream_name to 'social' again so that any tests occurring after this | ||||
|     // do not reproduce this error. | ||||
|     compose_state.stream_name("social"); | ||||
|     // Reset page_params | ||||
|     page_params.is_guest = false; | ||||
| }); | ||||
|  | ||||
| run_test("markdown_rtl", () => { | ||||
|   | ||||
| @@ -720,34 +720,40 @@ run_test("predicate_basics", () => { | ||||
|     // HTML content of message is used to determine if image have link, image or attachment. | ||||
|     // We are using jquery to parse the html and find existence of relevant tags/elements. | ||||
|     // In tests we need to stub the calls to jquery so using zjquery's .set_find_results method. | ||||
|     function set_find_results_for_msg_content(msg, jquery_selector, results) { | ||||
|         $(`<div>${msg.content}</div>`).set_find_results(jquery_selector, results); | ||||
|     } | ||||
|  | ||||
|     const has_link = get_predicate([["has", "link"]]); | ||||
|     $(img_msg.content).set_find_results("a", [$("<a>")]); | ||||
|     set_find_results_for_msg_content(img_msg, "a", [$("<a>")]); | ||||
|     assert(has_link(img_msg)); | ||||
|     $(non_img_attachment_msg.content).set_find_results("a", [$("<a>")]); | ||||
|     set_find_results_for_msg_content(non_img_attachment_msg, "a", [$("<a>")]); | ||||
|     assert(has_link(non_img_attachment_msg)); | ||||
|     $(link_msg.content).set_find_results("a", [$("<a>")]); | ||||
|     set_find_results_for_msg_content(link_msg, "a", [$("<a>")]); | ||||
|     assert(has_link(link_msg)); | ||||
|     $(no_has_filter_matching_msg.content).set_find_results("a", false); | ||||
|     set_find_results_for_msg_content(no_has_filter_matching_msg, "a", false); | ||||
|     assert(!has_link(no_has_filter_matching_msg)); | ||||
|  | ||||
|     const has_attachment = get_predicate([["has", "attachment"]]); | ||||
|     $(img_msg.content).set_find_results("a[href^='/user_uploads']", [$("<a>")]); | ||||
|     set_find_results_for_msg_content(img_msg, "a[href^='/user_uploads']", [$("<a>")]); | ||||
|     assert(has_attachment(img_msg)); | ||||
|     $(non_img_attachment_msg.content).set_find_results("a[href^='/user_uploads']", [$("<a>")]); | ||||
|     set_find_results_for_msg_content(non_img_attachment_msg, "a[href^='/user_uploads']", [ | ||||
|         $("<a>"), | ||||
|     ]); | ||||
|     assert(has_attachment(non_img_attachment_msg)); | ||||
|     $(link_msg.content).set_find_results("a[href^='/user_uploads']", false); | ||||
|     set_find_results_for_msg_content(link_msg, "a[href^='/user_uploads']", false); | ||||
|     assert(!has_attachment(link_msg)); | ||||
|     $(no_has_filter_matching_msg.content).set_find_results("a[href^='/user_uploads']", false); | ||||
|     set_find_results_for_msg_content(no_has_filter_matching_msg, "a[href^='/user_uploads']", false); | ||||
|     assert(!has_attachment(no_has_filter_matching_msg)); | ||||
|  | ||||
|     const has_image = get_predicate([["has", "image"]]); | ||||
|     $(img_msg.content).set_find_results(".message_inline_image", [$("<img>")]); | ||||
|     set_find_results_for_msg_content(img_msg, ".message_inline_image", [$("<img>")]); | ||||
|     assert(has_image(img_msg)); | ||||
|     $(non_img_attachment_msg.content).set_find_results(".message_inline_image", false); | ||||
|     set_find_results_for_msg_content(non_img_attachment_msg, ".message_inline_image", false); | ||||
|     assert(!has_image(non_img_attachment_msg)); | ||||
|     $(link_msg.content).set_find_results(".message_inline_image", false); | ||||
|     set_find_results_for_msg_content(link_msg, ".message_inline_image", false); | ||||
|     assert(!has_image(link_msg)); | ||||
|     $(no_has_filter_matching_msg.content).set_find_results(".message_inline_image", false); | ||||
|     set_find_results_for_msg_content(no_has_filter_matching_msg, ".message_inline_image", false); | ||||
|     assert(!has_image(no_has_filter_matching_msg)); | ||||
| }); | ||||
|  | ||||
|   | ||||
| @@ -67,14 +67,14 @@ run_test("get_and_set_muted_topics", () => { | ||||
|     assert.deepEqual(muting.get_muted_topics().sort(), [ | ||||
|         { | ||||
|             date_muted: 1577836800000, | ||||
|             date_muted_str: "Jan 01", | ||||
|             date_muted_str: "Jan\u00A001,\u00A02020", | ||||
|             stream: devel.name, | ||||
|             stream_id: devel.stream_id, | ||||
|             topic: "java", | ||||
|         }, | ||||
|         { | ||||
|             date_muted: 1577836800000, | ||||
|             date_muted_str: "Jan 01", | ||||
|             date_muted_str: "Jan\u00A001,\u00A02020", | ||||
|             stream: office.name, | ||||
|             stream_id: office.stream_id, | ||||
|             topic: "gossip", | ||||
| @@ -93,14 +93,14 @@ run_test("get_and_set_muted_topics", () => { | ||||
|     assert.deepEqual(muting.get_muted_topics().sort(), [ | ||||
|         { | ||||
|             date_muted: 1577836800000, | ||||
|             date_muted_str: "Jan 01", | ||||
|             date_muted_str: "Jan\u00A001,\u00A02020", | ||||
|             stream: social.name, | ||||
|             stream_id: social.stream_id, | ||||
|             topic: "breakfast", | ||||
|         }, | ||||
|         { | ||||
|             date_muted: 1577836800000, | ||||
|             date_muted_str: "Jan 01", | ||||
|             date_muted_str: "Jan\u00A001,\u00A02020", | ||||
|             stream: design.name, | ||||
|             stream_id: design.stream_id, | ||||
|             topic: "typography", | ||||
|   | ||||
| @@ -171,6 +171,24 @@ run_test("basics", () => { | ||||
|     assert.deepEqual(result, expected_result); | ||||
| }); | ||||
|  | ||||
| run_test("unknown realm emojis (add)", () => { | ||||
|     blueslip.expect("error", "Cannot find/add realm emoji for code 'broken'."); | ||||
|     reactions.add_clean_reaction({ | ||||
|         reaction_type: "realm_emoji", | ||||
|         emoji_code: "broken", | ||||
|         user_ids: [alice.user_id], | ||||
|     }); | ||||
| }); | ||||
|  | ||||
| run_test("unknown realm emojis (insert)", () => { | ||||
|     blueslip.expect("error", "Cannot find/insert realm emoji for code 'bogus'."); | ||||
|     reactions.view.insert_new_reaction({ | ||||
|         reaction_type: "realm_emoji", | ||||
|         emoji_code: "bogus", | ||||
|         user_id: bob.user_id, | ||||
|     }); | ||||
| }); | ||||
|  | ||||
| run_test("sending", () => { | ||||
|     const message_id = 1001; // see above for setup | ||||
|     let emoji_name = "smile"; // should be a current reaction | ||||
|   | ||||
| @@ -23,7 +23,7 @@ run_test("settings", () => { | ||||
|         assert.deepEqual(opts, [ | ||||
|             { | ||||
|                 date_muted: 1577836800000, | ||||
|                 date_muted_str: "Jan 01", | ||||
|                 date_muted_str: "Jan\u00A001,\u00A02020", | ||||
|                 stream: frontend.name, | ||||
|                 stream_id: frontend.stream_id, | ||||
|                 topic: "js", | ||||
|   | ||||
| @@ -15,12 +15,10 @@ fi | ||||
| cd /home/zulip/deployments/current | ||||
| BACKLOG="$(./manage.py print_email_delivery_backlog)" | ||||
|  | ||||
| if [ "$BACKLOG" -gt 0 ] && [ "$BACKLOG" -lt 10 ] | ||||
| then | ||||
| if [ "$BACKLOG" -gt 0 ] && [ "$BACKLOG" -lt 10 ]; then | ||||
|     echo "backlog of $BACKLOG" | ||||
|     exit 1 | ||||
| elif [ "$BACKLOG" -ge 10 ] | ||||
| then | ||||
| elif [ "$BACKLOG" -ge 10 ]; then | ||||
|     echo "backlog of $BACKLOG" | ||||
|     exit 2 | ||||
| else | ||||
|   | ||||
| @@ -8,13 +8,12 @@ | ||||
| SUPERVISOR_STATUS=$(supervisorctl status zulip-workers:zulip_deliver_enqueued_emails 2>&1) | ||||
| STATUS=$(echo "$SUPERVISOR_STATUS" | awk '{ print $2 }') | ||||
|  | ||||
|  | ||||
| case "$STATUS" in | ||||
|     RUNNING) | ||||
|         echo "Running" | ||||
|         exit 0 | ||||
|         ;; | ||||
|     STOPPED|STARTING|BACKOFF|STOPPING|EXITED|FATAL|UNKNOWN) | ||||
|     STOPPED | STARTING | BACKOFF | STOPPING | EXITED | FATAL | UNKNOWN) | ||||
|         # not "RUNNING", but a recognized supervisor status | ||||
|         echo "$STATUS" | ||||
|         exit 1 | ||||
|   | ||||
| @@ -9,16 +9,16 @@ if [ -z "$processes" ]; then | ||||
|     echo "No workers running" | ||||
|     exit 0 | ||||
| fi | ||||
| mapfile -t processes <<< "$processes" | ||||
| ps -o vsize,size,pid,user,command --sort -vsize "${processes[@]}" > "$datafile" | ||||
| mapfile -t processes <<<"$processes" | ||||
| ps -o vsize,size,pid,user,command --sort -vsize "${processes[@]}" >"$datafile" | ||||
| cat "$datafile" | ||||
| top_worker=$(head -n2 "$datafile" | tail -n1) | ||||
| top_worker_memory_usage=$(echo "$top_worker" | cut -f1 -d" ") | ||||
| rm -f "$datafile" | ||||
| if [ "$top_worker_memory_usage" -gt 800000 ]; then | ||||
|    exit 2 | ||||
|     exit 2 | ||||
| elif [ "$top_worker_memory_usage" -gt 600000 ]; then | ||||
|    exit 1 | ||||
|     exit 1 | ||||
| else | ||||
|    exit 0 | ||||
|     exit 0 | ||||
| fi | ||||
|   | ||||
							
								
								
									
										9
									
								
								puppet/zulip/files/postfix/access
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								puppet/zulip/files/postfix/access
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| # This is the list of email addresses that are accepted via SMTP; | ||||
| # these consist of only the addresses in `virtual`, as well as the | ||||
| # RFC822-specified postmaster. | ||||
|  | ||||
| /\+.*@/         OK | ||||
| /\..*@/         OK | ||||
| /^mm/           OK | ||||
|  | ||||
| /^postmaster@/  OK | ||||
| @@ -1,3 +0,0 @@ | ||||
| /\+.*@/ zulip@localhost | ||||
| /\..*@/ zulip@localhost | ||||
| /^mm/ zulip@localhost | ||||
| @@ -5,7 +5,11 @@ class zulip::app_frontend { | ||||
|   include zulip::app_frontend_once | ||||
|  | ||||
|   $nginx_http_only = zulipconf('application_server', 'http_only', undef) | ||||
|   $nginx_listen_port = zulipconf('application_server', 'nginx_listen_port', 443) | ||||
|   if $nginx_http_only != '' { | ||||
|     $nginx_listen_port = zulipconf('application_server', 'nginx_listen_port', 80) | ||||
|   } else { | ||||
|     $nginx_listen_port = zulipconf('application_server', 'nginx_listen_port', 443) | ||||
|   } | ||||
|   $no_serve_uploads = zulipconf('application_server', 'no_serve_uploads', undef) | ||||
|   $ssl_dir = $::osfamily ? { | ||||
|     'debian' => '/etc/ssl', | ||||
|   | ||||
| @@ -151,15 +151,4 @@ class zulip::app_frontend_base { | ||||
|     mode    => '0755', | ||||
|     source  => 'puppet:///modules/zulip/nagios_plugins/zulip_app_frontend', | ||||
|   } | ||||
|  | ||||
|   if $::osfamily == 'debian' { | ||||
|     # The pylibmc wheel looks for SASL plugins in the wrong place. | ||||
|     file { '/usr/lib64': | ||||
|       ensure => directory, | ||||
|     } | ||||
|     file { '/usr/lib64/sasl2': | ||||
|       ensure => link, | ||||
|       target => "/usr/lib/${::rubyplatform}/sasl2", | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -45,7 +45,7 @@ class zulip::postfix_localmail { | ||||
|     mode    => '0644', | ||||
|     owner   => root, | ||||
|     group   => root, | ||||
|     source  => 'puppet:///modules/zulip/postfix/virtual', | ||||
|     content => template('zulip/postfix/virtual.erb'), | ||||
|     require => Package[postfix], | ||||
|     notify  => Service['postfix'], | ||||
|   } | ||||
| @@ -67,4 +67,12 @@ class zulip::postfix_localmail { | ||||
|     ], | ||||
|   } | ||||
|  | ||||
|   file {'/etc/postfix/access': | ||||
|     ensure  => file, | ||||
|     mode    => '0644', | ||||
|     owner   => root, | ||||
|     group   => root, | ||||
|     source  => 'puppet:///modules/zulip/postfix/access', | ||||
|     require => Package[postfix], | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -16,8 +16,8 @@ include /etc/nginx/zulip-include/upstreams; | ||||
|  | ||||
| server { | ||||
| <% if @nginx_http_only != '' -%> | ||||
|     listen 80; | ||||
|     listen [::]:80; | ||||
|     listen <%= @nginx_listen_port %>; | ||||
|     listen [::]:<%= @nginx_listen_port %>; | ||||
| <% else -%> | ||||
|     listen <%= @nginx_listen_port %> http2; | ||||
|     listen [::]:<%= @nginx_listen_port %> http2; | ||||
|   | ||||
| @@ -16,6 +16,7 @@ smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache | ||||
| smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache | ||||
|  | ||||
| smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination | ||||
| smtpd_recipient_restrictions = permit_mynetworks, check_recipient_access regexp:/etc/postfix/access, reject | ||||
| myhostname = <%= @fqdn %> | ||||
| alias_maps = hash:/etc/aliases | ||||
| alias_database = hash:/etc/aliases | ||||
|   | ||||
							
								
								
									
										7
									
								
								puppet/zulip/templates/postfix/virtual.erb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								puppet/zulip/templates/postfix/virtual.erb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| if /@<%= Regexp.escape(@postfix_mailname) %>\.?$/ | ||||
| # Changes to this list require a corresponding change to `access` as | ||||
| # well. | ||||
| /\+.*@/  zulip@localhost | ||||
| /\..*@/  zulip@localhost | ||||
| /^mm/    zulip@localhost | ||||
| endif | ||||
| @@ -20,8 +20,8 @@ | ||||
| # always be included. | ||||
|  | ||||
| if [ "$1" = "autoconf" ]; then | ||||
| 	echo yes | ||||
| 	exit 0 | ||||
|     echo yes | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| HOME=/tmp/ | ||||
| @@ -30,33 +30,33 @@ HOME=/tmp/ | ||||
| # graphs should look. | ||||
|  | ||||
| if [ "$1" = "config" ]; then | ||||
|         CONN_WARN=${queue_warn:-500} | ||||
|         CONN_CRIT=${queue_crit:-1000} | ||||
|     CONN_WARN=${queue_warn:-500} | ||||
|     CONN_CRIT=${queue_crit:-1000} | ||||
|  | ||||
| 	# The host name this plugin is for. (Can be overridden to have | ||||
| 	# one machine answer for several) | ||||
|     # The host name this plugin is for. (Can be overridden to have | ||||
|     # one machine answer for several) | ||||
|  | ||||
| 	# The title of the graph | ||||
| 	echo 'graph_title RabbitMQ connections' | ||||
| 	# Arguments to "rrdtool graph". In this case, tell it that the | ||||
| 	# lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
| 	echo 'graph_args --base 1000 -l 0' | ||||
| 	# The Y-axis label | ||||
| 	echo 'graph_vlabel connections' | ||||
| 	# We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
| 	# 420 milliload) | ||||
| 	#echo 'graph_scale no' | ||||
| 	echo 'graph_category RabbitMQ' | ||||
|     # The title of the graph | ||||
|     echo 'graph_title RabbitMQ connections' | ||||
|     # Arguments to "rrdtool graph". In this case, tell it that the | ||||
|     # lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
|     echo 'graph_args --base 1000 -l 0' | ||||
|     # The Y-axis label | ||||
|     echo 'graph_vlabel connections' | ||||
|     # We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
|     # 420 milliload) | ||||
|     #echo 'graph_scale no' | ||||
|     echo 'graph_category RabbitMQ' | ||||
|  | ||||
| 	echo "connections.label Connections" | ||||
| 	echo "connections.warning $CONN_WARN" | ||||
| 	echo "connections.critical $CONN_CRIT" | ||||
| 	echo "connections.info Number of active connections" | ||||
|     echo "connections.label Connections" | ||||
|     echo "connections.warning $CONN_WARN" | ||||
|     echo "connections.critical $CONN_CRIT" | ||||
|     echo "connections.info Number of active connections" | ||||
|  | ||||
| 	echo 'graph_info Shows the number of connections to RabbitMQ' | ||||
| 	# Last, if run with the "config"-parameter, quit here (don't | ||||
| 	# display any data) | ||||
| 	exit 0 | ||||
|     echo 'graph_info Shows the number of connections to RabbitMQ' | ||||
|     # Last, if run with the "config"-parameter, quit here (don't | ||||
|     # display any data) | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| # If not run with any parameters at all (or only unknown ones), do the | ||||
|   | ||||
| @@ -20,54 +20,54 @@ | ||||
| # always be included. | ||||
|  | ||||
| if [ "$1" = "autoconf" ]; then | ||||
| 	echo yes | ||||
| 	exit 0 | ||||
|     echo yes | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| # If run with the "config"-parameter, give out information on how the | ||||
| # graphs should look. | ||||
|  | ||||
| HOME=/tmp/ | ||||
| QUEUES=$(HOME=$HOME rabbitmqctl list_queues name | \ | ||||
| 		grep -v '^Listing' | \ | ||||
| 		grep -v 'done\.$' | sed -e 's/[.=-]/_/g' ) | ||||
| QUEUES=$(HOME=$HOME rabbitmqctl list_queues name \ | ||||
|     | grep -v '^Listing' \ | ||||
|     | grep -v 'done\.$' | sed -e 's/[.=-]/_/g') | ||||
|  | ||||
| if [ "$1" = "config" ]; then | ||||
|         QUEUE_WARN=${queue_warn:-100} | ||||
|         QUEUE_CRIT=${queue_crit:-500} | ||||
|     QUEUE_WARN=${queue_warn:-100} | ||||
|     QUEUE_CRIT=${queue_crit:-500} | ||||
|  | ||||
| 	# The host name this plugin is for. (Can be overridden to have | ||||
| 	# one machine answer for several) | ||||
|     # The host name this plugin is for. (Can be overridden to have | ||||
|     # one machine answer for several) | ||||
|  | ||||
| 	# The title of the graph | ||||
| 	echo "graph_title RabbitMQ consumers" | ||||
| 	# Arguments to "rrdtool graph". In this case, tell it that the | ||||
| 	# lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
| 	echo 'graph_args --base 1000 -l 0' | ||||
| 	# The Y-axis label | ||||
| 	echo 'graph_vlabel consumers' | ||||
| 	# We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
| 	# 420 milliload) | ||||
| 	#echo 'graph_scale no' | ||||
| 	echo 'graph_category RabbitMQ' | ||||
|     # The title of the graph | ||||
|     echo "graph_title RabbitMQ consumers" | ||||
|     # Arguments to "rrdtool graph". In this case, tell it that the | ||||
|     # lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
|     echo 'graph_args --base 1000 -l 0' | ||||
|     # The Y-axis label | ||||
|     echo 'graph_vlabel consumers' | ||||
|     # We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
|     # 420 milliload) | ||||
|     #echo 'graph_scale no' | ||||
|     echo 'graph_category RabbitMQ' | ||||
|  | ||||
| 	for queue in $QUEUES; do | ||||
| 		echo "$queue.label $queue" | ||||
| 		echo "$queue.warning $QUEUE_WARN" | ||||
| 		echo "$queue.critical $QUEUE_CRIT" | ||||
| 		echo "$queue.info Active consumers for $queue" | ||||
| 	done | ||||
|     for queue in $QUEUES; do | ||||
|         echo "$queue.label $queue" | ||||
|         echo "$queue.warning $QUEUE_WARN" | ||||
|         echo "$queue.critical $QUEUE_CRIT" | ||||
|         echo "$queue.info Active consumers for $queue" | ||||
|     done | ||||
|  | ||||
| 	echo 'graph_info Lists active consumers for a queue.' | ||||
| 	# Last, if run with the "config"-parameter, quit here (don't | ||||
| 	# display any data) | ||||
| 	exit 0 | ||||
|     echo 'graph_info Lists active consumers for a queue.' | ||||
|     # Last, if run with the "config"-parameter, quit here (don't | ||||
|     # display any data) | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| # If not run with any parameters at all (or only unknown ones), do the | ||||
| # real work - i.e. display the data. Almost always this will be | ||||
| # "value" subfield for every data field. | ||||
|  | ||||
| HOME=$HOME rabbitmqctl list_queues name consumers| \ | ||||
| 	grep -v "^Listing" | grep -v "done.$" | \ | ||||
|     perl -nle'($q, $s) = split; $q =~ s/[.=-]/_/g; print("$q.value $s")' | ||||
| HOME=$HOME rabbitmqctl list_queues name consumers \ | ||||
|     | grep -v "^Listing" | grep -v "done.$" \ | ||||
|     | perl -nle'($q, $s) = split; $q =~ s/[.=-]/_/g; print("$q.value $s")' | ||||
|   | ||||
| @@ -20,54 +20,54 @@ | ||||
| # always be included. | ||||
|  | ||||
| if [ "$1" = "autoconf" ]; then | ||||
| 	echo yes | ||||
| 	exit 0 | ||||
|     echo yes | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| # If run with the "config"-parameter, give out information on how the | ||||
| # graphs should look. | ||||
|  | ||||
| HOME=/tmp/ | ||||
| QUEUES=$(HOME=$HOME rabbitmqctl list_queues name | \ | ||||
| 		grep -v '^Listing' | \ | ||||
| 		grep -v 'done\.$' | sed -e 's/[.=-]/_/g' ) | ||||
| QUEUES=$(HOME=$HOME rabbitmqctl list_queues name \ | ||||
|     | grep -v '^Listing' \ | ||||
|     | grep -v 'done\.$' | sed -e 's/[.=-]/_/g') | ||||
|  | ||||
| if [ "$1" = "config" ]; then | ||||
|         QUEUE_WARN=${queue_warn:-10000} | ||||
|         QUEUE_CRIT=${queue_crit:-20000} | ||||
|     QUEUE_WARN=${queue_warn:-10000} | ||||
|     QUEUE_CRIT=${queue_crit:-20000} | ||||
|  | ||||
| 	# The host name this plugin is for. (Can be overridden to have | ||||
| 	# one machine answer for several) | ||||
|     # The host name this plugin is for. (Can be overridden to have | ||||
|     # one machine answer for several) | ||||
|  | ||||
| 	# The title of the graph | ||||
| 	echo "graph_title RabbitMQ list_queues" | ||||
| 	# Arguments to "rrdtool graph". In this case, tell it that the | ||||
| 	# lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
| 	echo 'graph_args --base 1000 -l 0' | ||||
| 	# The Y-axis label | ||||
| 	echo 'graph_vlabel queue_size' | ||||
| 	# We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
| 	# 420 milliload) | ||||
| 	#echo 'graph_scale no' | ||||
| 	echo 'graph_category RabbitMQ' | ||||
|     # The title of the graph | ||||
|     echo "graph_title RabbitMQ list_queues" | ||||
|     # Arguments to "rrdtool graph". In this case, tell it that the | ||||
|     # lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
|     echo 'graph_args --base 1000 -l 0' | ||||
|     # The Y-axis label | ||||
|     echo 'graph_vlabel queue_size' | ||||
|     # We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
|     # 420 milliload) | ||||
|     #echo 'graph_scale no' | ||||
|     echo 'graph_category RabbitMQ' | ||||
|  | ||||
| 	for queue in $QUEUES; do | ||||
| 		echo "$queue.label $queue" | ||||
| 		echo "$queue.warning $QUEUE_WARN" | ||||
| 		echo "$queue.critical $QUEUE_CRIT" | ||||
| 		echo "$queue.info Queue size for $queue" | ||||
| 	done | ||||
|     for queue in $QUEUES; do | ||||
|         echo "$queue.label $queue" | ||||
|         echo "$queue.warning $QUEUE_WARN" | ||||
|         echo "$queue.critical $QUEUE_CRIT" | ||||
|         echo "$queue.info Queue size for $queue" | ||||
|     done | ||||
|  | ||||
| 	echo 'graph_info Lists how many messages are in each queue.' | ||||
| 	# Last, if run with the "config"-parameter, quit here (don't | ||||
| 	# display any data) | ||||
| 	exit 0 | ||||
|     echo 'graph_info Lists how many messages are in each queue.' | ||||
|     # Last, if run with the "config"-parameter, quit here (don't | ||||
|     # display any data) | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| # If not run with any parameters at all (or only unknown ones), do the | ||||
| # real work - i.e. display the data. Almost always this will be | ||||
| # "value" subfield for every data field. | ||||
|  | ||||
| HOME=$HOME rabbitmqctl list_queues | \ | ||||
| 	grep -v "^Listing" | grep -v "done.$" | \ | ||||
| 	perl -nle'($q, $s) = split; $q =~ s/[.=-]/_/g; print("$q.value $s")' | ||||
| HOME=$HOME rabbitmqctl list_queues \ | ||||
|     | grep -v "^Listing" | grep -v "done.$" \ | ||||
|     | perl -nle'($q, $s) = split; $q =~ s/[.=-]/_/g; print("$q.value $s")' | ||||
|   | ||||
| @@ -20,54 +20,54 @@ | ||||
| # always be included. | ||||
|  | ||||
| if [ "$1" = "autoconf" ]; then | ||||
| 	echo yes | ||||
| 	exit 0 | ||||
|     echo yes | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| # If run with the "config"-parameter, give out information on how the | ||||
| # graphs should look. | ||||
|  | ||||
| HOME=/tmp/ | ||||
| QUEUES=$(HOME=$HOME rabbitmqctl list_queues name | \ | ||||
| 		grep -v '^Listing' | \ | ||||
| 		grep -v 'done\.$' | sed -e 's/[.=-]/_/g' ) | ||||
| QUEUES=$(HOME=$HOME rabbitmqctl list_queues name \ | ||||
|     | grep -v '^Listing' \ | ||||
|     | grep -v 'done\.$' | sed -e 's/[.=-]/_/g') | ||||
|  | ||||
| if [ "$1" = "config" ]; then | ||||
|         QUEUE_WARN=${queue_warn:-10000} | ||||
|         QUEUE_CRIT=${queue_crit:-20000} | ||||
|     QUEUE_WARN=${queue_warn:-10000} | ||||
|     QUEUE_CRIT=${queue_crit:-20000} | ||||
|  | ||||
| 	# The host name this plugin is for. (Can be overridden to have | ||||
| 	# one machine answer for several) | ||||
|     # The host name this plugin is for. (Can be overridden to have | ||||
|     # one machine answer for several) | ||||
|  | ||||
| 	# The title of the graph | ||||
| 	echo "graph_title RabbitMQ Unacknowledged Messages" | ||||
| 	# Arguments to "rrdtool graph". In this case, tell it that the | ||||
| 	# lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
| 	echo 'graph_args --base 1000 -l 0' | ||||
| 	# The Y-axis label | ||||
| 	echo 'graph_vlabel unacknowledged' | ||||
| 	# We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
| 	# 420 milliload) | ||||
| 	#echo 'graph_scale no' | ||||
| 	echo 'graph_category RabbitMQ' | ||||
|     # The title of the graph | ||||
|     echo "graph_title RabbitMQ Unacknowledged Messages" | ||||
|     # Arguments to "rrdtool graph". In this case, tell it that the | ||||
|     # lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
|     echo 'graph_args --base 1000 -l 0' | ||||
|     # The Y-axis label | ||||
|     echo 'graph_vlabel unacknowledged' | ||||
|     # We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
|     # 420 milliload) | ||||
|     #echo 'graph_scale no' | ||||
|     echo 'graph_category RabbitMQ' | ||||
|  | ||||
| 	for queue in $QUEUES; do | ||||
| 		echo "$queue.label $queue" | ||||
| 		echo "$queue.warning $QUEUE_WARN" | ||||
| 		echo "$queue.critical $QUEUE_CRIT" | ||||
| 		echo "$queue.info Unacknowledged messages for $queue" | ||||
| 	done | ||||
|     for queue in $QUEUES; do | ||||
|         echo "$queue.label $queue" | ||||
|         echo "$queue.warning $QUEUE_WARN" | ||||
|         echo "$queue.critical $QUEUE_CRIT" | ||||
|         echo "$queue.info Unacknowledged messages for $queue" | ||||
|     done | ||||
|  | ||||
| 	echo 'graph_info Lists how many messages are in each queue.' | ||||
| 	# Last, if run with the "config"-parameter, quit here (don't | ||||
| 	# display any data) | ||||
| 	exit 0 | ||||
|     echo 'graph_info Lists how many messages are in each queue.' | ||||
|     # Last, if run with the "config"-parameter, quit here (don't | ||||
|     # display any data) | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| # If not run with any parameters at all (or only unknown ones), do the | ||||
| # real work - i.e. display the data. Almost always this will be | ||||
| # "value" subfield for every data field. | ||||
|  | ||||
| HOME=$HOME rabbitmqctl list_queues name messages_unacknowledged | \ | ||||
| 	grep -v "^Listing" | grep -v "done.$" | \ | ||||
|     perl -nle'($q, $s) = split; $q =~ s/[.=-]/_/g; print("$q.value $s")' | ||||
| HOME=$HOME rabbitmqctl list_queues name messages_unacknowledged \ | ||||
|     | grep -v "^Listing" | grep -v "done.$" \ | ||||
|     | perl -nle'($q, $s) = split; $q =~ s/[.=-]/_/g; print("$q.value $s")' | ||||
|   | ||||
| @@ -20,54 +20,54 @@ | ||||
| # always be included. | ||||
|  | ||||
| if [ "$1" = "autoconf" ]; then | ||||
| 	echo yes | ||||
| 	exit 0 | ||||
|     echo yes | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| # If run with the "config"-parameter, give out information on how the | ||||
| # graphs should look. | ||||
|  | ||||
| HOME=/tmp/ | ||||
| QUEUES=$(HOME=$HOME rabbitmqctl list_queues name | \ | ||||
| 		grep -v '^Listing' | \ | ||||
| 		grep -v 'done\.$' | sed -e 's/[.=-]/_/g' ) | ||||
| QUEUES=$(HOME=$HOME rabbitmqctl list_queues name \ | ||||
|     | grep -v '^Listing' \ | ||||
|     | grep -v 'done\.$' | sed -e 's/[.=-]/_/g') | ||||
|  | ||||
| if [ "$1" = "config" ]; then | ||||
|         QUEUE_WARN=${queue_warn:-10000} | ||||
|         QUEUE_CRIT=${queue_crit:-20000} | ||||
|     QUEUE_WARN=${queue_warn:-10000} | ||||
|     QUEUE_CRIT=${queue_crit:-20000} | ||||
|  | ||||
| 	# The host name this plugin is for. (Can be overridden to have | ||||
| 	# one machine answer for several) | ||||
|     # The host name this plugin is for. (Can be overridden to have | ||||
|     # one machine answer for several) | ||||
|  | ||||
| 	# The title of the graph | ||||
| 	echo "graph_title RabbitMQ Uncommitted Messages" | ||||
| 	# Arguments to "rrdtool graph". In this case, tell it that the | ||||
| 	# lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
| 	echo 'graph_args --base 1000 -l 0' | ||||
| 	# The Y-axis label | ||||
| 	echo 'graph_vlabel uncommitted' | ||||
| 	# We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
| 	# 420 milliload) | ||||
| 	#echo 'graph_scale no' | ||||
| 	echo 'graph_category RabbitMQ' | ||||
|     # The title of the graph | ||||
|     echo "graph_title RabbitMQ Uncommitted Messages" | ||||
|     # Arguments to "rrdtool graph". In this case, tell it that the | ||||
|     # lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
|     echo 'graph_args --base 1000 -l 0' | ||||
|     # The Y-axis label | ||||
|     echo 'graph_vlabel uncommitted' | ||||
|     # We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
|     # 420 milliload) | ||||
|     #echo 'graph_scale no' | ||||
|     echo 'graph_category RabbitMQ' | ||||
|  | ||||
| 	for queue in $QUEUES; do | ||||
| 		echo "$queue.label $queue" | ||||
| 		echo "$queue.warning $QUEUE_WARN" | ||||
| 		echo "$queue.critical $QUEUE_CRIT" | ||||
| 		echo "$queue.info Uncommitted messages for $queue" | ||||
| 	done | ||||
|     for queue in $QUEUES; do | ||||
|         echo "$queue.label $queue" | ||||
|         echo "$queue.warning $QUEUE_WARN" | ||||
|         echo "$queue.critical $QUEUE_CRIT" | ||||
|         echo "$queue.info Uncommitted messages for $queue" | ||||
|     done | ||||
|  | ||||
| 	echo 'graph_info Lists how many messages are in each queue.' | ||||
| 	# Last, if run with the "config"-parameter, quit here (don't | ||||
| 	# display any data) | ||||
| 	exit 0 | ||||
|     echo 'graph_info Lists how many messages are in each queue.' | ||||
|     # Last, if run with the "config"-parameter, quit here (don't | ||||
|     # display any data) | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| # If not run with any parameters at all (or only unknown ones), do the | ||||
| # real work - i.e. display the data. Almost always this will be | ||||
| # "value" subfield for every data field. | ||||
|  | ||||
| HOME=$HOME rabbitmqctl list_channels name messages_uncommitted | \ | ||||
| 	grep -v "^Listing" | grep -v "done.$" | \ | ||||
|     perl -nle'($q, $s) = /^(.*)\s+(\d+)$/; $q =~ s/[.=-]/_/g; print("$q.value $s")' | ||||
| HOME=$HOME rabbitmqctl list_channels name messages_uncommitted \ | ||||
|     | grep -v "^Listing" | grep -v "done.$" \ | ||||
|     | perl -nle'($q, $s) = /^(.*)\s+(\d+)$/; $q =~ s/[.=-]/_/g; print("$q.value $s")' | ||||
|   | ||||
| @@ -20,54 +20,54 @@ | ||||
| # always be included. | ||||
|  | ||||
| if [ "$1" = "autoconf" ]; then | ||||
| 	echo yes | ||||
| 	exit 0 | ||||
|     echo yes | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| # If run with the "config"-parameter, give out information on how the | ||||
| # graphs should look. | ||||
|  | ||||
| HOME=/tmp/ | ||||
| QUEUES=$(rabbitmqctl list_queues name | \ | ||||
| 		grep -v '^Listing' | \ | ||||
| 		grep -v 'done\.$' | sed -e 's/[.=-]/_/g' ) | ||||
| QUEUES=$(rabbitmqctl list_queues name \ | ||||
|     | grep -v '^Listing' \ | ||||
|     | grep -v 'done\.$' | sed -e 's/[.=-]/_/g') | ||||
|  | ||||
| if [ "$1" = "config" ]; then | ||||
|         QUEUE_WARN=${queue_warn:-10000} | ||||
|         QUEUE_CRIT=${queue_crit:-20000} | ||||
|     QUEUE_WARN=${queue_warn:-10000} | ||||
|     QUEUE_CRIT=${queue_crit:-20000} | ||||
|  | ||||
| 	# The host name this plugin is for. (Can be overridden to have | ||||
| 	# one machine answer for several) | ||||
|     # The host name this plugin is for. (Can be overridden to have | ||||
|     # one machine answer for several) | ||||
|  | ||||
| 	# The title of the graph | ||||
| 	echo "graph_title RabbitMQ Memory used by queue" | ||||
| 	# Arguments to "rrdtool graph". In this case, tell it that the | ||||
| 	# lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
| 	echo 'graph_args --base 1024 --vertical-label Bytes -l 0' | ||||
| 	# The Y-axis label | ||||
| 	echo 'graph_vlabel memory' | ||||
| 	# We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
| 	# 420 milliload) | ||||
| 	#echo 'graph_scale no' | ||||
| 	echo 'graph_category RabbitMQ' | ||||
|     # The title of the graph | ||||
|     echo "graph_title RabbitMQ Memory used by queue" | ||||
|     # Arguments to "rrdtool graph". In this case, tell it that the | ||||
|     # lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
|     echo 'graph_args --base 1024 --vertical-label Bytes -l 0' | ||||
|     # The Y-axis label | ||||
|     echo 'graph_vlabel memory' | ||||
|     # We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
|     # 420 milliload) | ||||
|     #echo 'graph_scale no' | ||||
|     echo 'graph_category RabbitMQ' | ||||
|  | ||||
| 	for queue in $QUEUES; do | ||||
| 		echo "$queue.label $queue" | ||||
| 		echo "$queue.warning $QUEUE_WARN" | ||||
| 		echo "$queue.critical $QUEUE_CRIT" | ||||
| 		echo "$queue.info Memory used by $queue" | ||||
| 	done | ||||
|     for queue in $QUEUES; do | ||||
|         echo "$queue.label $queue" | ||||
|         echo "$queue.warning $QUEUE_WARN" | ||||
|         echo "$queue.critical $QUEUE_CRIT" | ||||
|         echo "$queue.info Memory used by $queue" | ||||
|     done | ||||
|  | ||||
| 	echo 'graph_info Show memory usage by queue' | ||||
| 	# Last, if run with the "config"-parameter, quit here (don't | ||||
| 	# display any data) | ||||
| 	exit 0 | ||||
|     echo 'graph_info Show memory usage by queue' | ||||
|     # Last, if run with the "config"-parameter, quit here (don't | ||||
|     # display any data) | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| # If not run with any parameters at all (or only unknown ones), do the | ||||
| # real work - i.e. display the data. Almost always this will be | ||||
| # "value" subfield for every data field. | ||||
|  | ||||
| HOME=$HOME rabbitmqctl list_queues name memory | \ | ||||
| 	grep -v "^Listing" | grep -v "done.$" | \ | ||||
|     perl -nle'($q, $s) = split; $q =~ s/[.=-]/_/g; print("$q.value $s")' | ||||
| HOME=$HOME rabbitmqctl list_queues name memory \ | ||||
|     | grep -v "^Listing" | grep -v "done.$" \ | ||||
|     | perl -nle'($q, $s) = split; $q =~ s/[.=-]/_/g; print("$q.value $s")' | ||||
|   | ||||
| @@ -18,8 +18,8 @@ | ||||
| # always be included. | ||||
|  | ||||
| if [ "$1" = "autoconf" ]; then | ||||
| 	echo yes | ||||
| 	exit 0 | ||||
|     echo yes | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| HOME=/tmp/ | ||||
| @@ -28,30 +28,30 @@ HOME=/tmp/ | ||||
| # graphs should look. | ||||
|  | ||||
| if [ "$1" = "config" ]; then | ||||
| 	# The host name this plugin is for. (Can be overridden to have | ||||
| 	# one machine answer for several) | ||||
|     # The host name this plugin is for. (Can be overridden to have | ||||
|     # one machine answer for several) | ||||
|  | ||||
| 	# The title of the graph | ||||
| 	echo 'graph_title Event queues' | ||||
| 	# Arguments to "rrdtool graph". In this case, tell it that the | ||||
| 	# lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
| 	echo 'graph_args --base 1000 -l 0' | ||||
| 	# The Y-axis label | ||||
| 	echo 'graph_vlabel Number' | ||||
| 	# We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
| 	# 420 milliload) | ||||
| 	#echo 'graph_scale no' | ||||
| 	echo 'graph_category Tornado' | ||||
|     # The title of the graph | ||||
|     echo 'graph_title Event queues' | ||||
|     # Arguments to "rrdtool graph". In this case, tell it that the | ||||
|     # lower limit of the graph is '0', and that 1k=1000 (not 1024) | ||||
|     echo 'graph_args --base 1000 -l 0' | ||||
|     # The Y-axis label | ||||
|     echo 'graph_vlabel Number' | ||||
|     # We want Cur/Min/Avg/Max unscaled (i.e. 0.42 load instead of | ||||
|     # 420 milliload) | ||||
|     #echo 'graph_scale no' | ||||
|     echo 'graph_category Tornado' | ||||
|  | ||||
| 	echo "active_queues.label Total active event queues" | ||||
| 	echo "active_queues.info Total number of active event queues" | ||||
| 	echo "active_users.label Users with active event queues" | ||||
| 	echo "active_users.info Number of users with active event queues" | ||||
|     echo "active_queues.label Total active event queues" | ||||
|     echo "active_queues.info Total number of active event queues" | ||||
|     echo "active_users.label Users with active event queues" | ||||
|     echo "active_users.info Number of users with active event queues" | ||||
|  | ||||
| 	echo 'graph_info Shows the number of active event queues' | ||||
| 	# Last, if run with the "config"-parameter, quit here (don't | ||||
| 	# display any data) | ||||
| 	exit 0 | ||||
|     echo 'graph_info Shows the number of active event queues' | ||||
|     # Last, if run with the "config"-parameter, quit here (don't | ||||
|     # display any data) | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| # If not run with any parameters at all (or only unknown ones), do the | ||||
|   | ||||
| @@ -5,7 +5,7 @@ set -e | ||||
| LOCALDISK=/dev/nvme0n1 | ||||
|  | ||||
| if ! grep -q $LOCALDISK /etc/fstab; then | ||||
|     echo "$LOCALDISK   /srv  xfs    nofail,noatime 1 1" >> /etc/fstab | ||||
|     echo "$LOCALDISK   /srv  xfs    nofail,noatime 1 1" >>/etc/fstab | ||||
| fi | ||||
|  | ||||
| if ! mountpoint -q /srv; then | ||||
|   | ||||
| @@ -5,9 +5,9 @@ set -e | ||||
|  | ||||
| # Only run from ifup. | ||||
| if [ "$MODE" != start ]; then | ||||
| 	exit 0 | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| if [ "$IFACE" = eth0 ]; then | ||||
| 	/usr/local/sbin/zulip-ec2-configure-interfaces | ||||
|     /usr/local/sbin/zulip-ec2-configure-interfaces | ||||
| fi | ||||
|   | ||||
| @@ -3,7 +3,7 @@ | ||||
| # and requirements/prod.txt. | ||||
| # See requirements/README.md for more detail. | ||||
| # Django itself | ||||
| Django==2.2.* | ||||
| Django[argon2]==2.2.* | ||||
|  | ||||
| # needed for Literal, TypedDict | ||||
| typing-extensions | ||||
| @@ -30,9 +30,6 @@ Pillow | ||||
| # Needed for building complex DB queries | ||||
| SQLAlchemy | ||||
|  | ||||
| # Needed for password hashing | ||||
| argon2-cffi | ||||
|  | ||||
| # Needed for S3 file uploads | ||||
| boto3 | ||||
|  | ||||
| @@ -56,7 +53,6 @@ python-gcm | ||||
|  | ||||
| # Needed for the email mirror | ||||
| html2text | ||||
| httplib2 | ||||
| # Forked to avoid pulling in scipy: https://github.com/mailgun/talon/issues/130 | ||||
| https://github.com/zulip/talon/archive/7d8bdc4dbcfcc5a73298747293b99fe53da55315.zip#egg=talon==1.2.10.zulip1 | ||||
|  | ||||
| @@ -79,10 +75,10 @@ pika | ||||
| psycopg2 --no-binary psycopg2 | ||||
|  | ||||
| # Needed for memcached usage | ||||
| pylibmc | ||||
| python-binary-memcached | ||||
|  | ||||
| # Needed for compression support in memcached via pylibmc | ||||
| django-pylibmc | ||||
| # Needed for compression support in memcached via python-binary-memcached | ||||
| django-bmemcached | ||||
|  | ||||
| # Needed for zerver/tests/test_timestamp.py | ||||
| python-dateutil | ||||
| @@ -150,9 +146,7 @@ cryptography | ||||
| lxml | ||||
|  | ||||
| # Needed for 2-factor authentication | ||||
| django-two-factor-auth[phonenumberslite] | ||||
|  | ||||
| twilio | ||||
| django-two-factor-auth[call,phonenumberslite,sms] | ||||
|  | ||||
| # Needed for processing payments (in corporate) | ||||
| stripe | ||||
| @@ -177,9 +171,6 @@ pyahocorasick | ||||
| # Used for rate limiting authentication. | ||||
| decorator | ||||
|  | ||||
| # Use SameSite cookies in legacy Django (remove with Django 2.1) | ||||
| django-cookies-samesite | ||||
|  | ||||
| # For server-side enforcement of password strength | ||||
| zxcvbn | ||||
|  | ||||
|   | ||||
| @@ -21,7 +21,7 @@ coverage | ||||
| fakeldap | ||||
|  | ||||
| # For testing mock http requests | ||||
| responses | ||||
| responses==0.12.0  # https://github.com/spulec/moto/issues/3460 | ||||
|  | ||||
| # For sorting imports | ||||
| isort | ||||
| @@ -54,7 +54,7 @@ python-digitalocean | ||||
| pip-tools | ||||
|  | ||||
| # zulip's linting framework - zulint | ||||
| https://github.com/zulip/zulint/archive/204a02dbc730253061af08f67a26858dc73754cb.zip#egg=zulint==0.0.1 | ||||
| https://github.com/zulip/zulint/archive/e8c7e42440e8b1a2e58316e16437e815cacfd495.zip#egg=zulint==0.0.1 | ||||
|  | ||||
| -r mypy.in | ||||
|  | ||||
|   | ||||
							
								
								
									
										1967
									
								
								requirements/dev.txt
									
									
									
									
									
								
							
							
						
						
									
										1967
									
								
								requirements/dev.txt
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -9,40 +9,41 @@ | ||||
| # | ||||
| alabaster==0.7.12 \ | ||||
|     --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ | ||||
|     --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 \ | ||||
|     --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 | ||||
|     # via sphinx | ||||
| babel==2.8.0 \ | ||||
|     --hash=sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38 \ | ||||
|     --hash=sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4 \ | ||||
| babel==2.9.0 \ | ||||
|     --hash=sha256:9d35c22fcc79893c3ecc85ac4a56cde1ecf3f19c540bba0922308a6c06ca6fa5 \ | ||||
|     --hash=sha256:da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05 | ||||
|     # via sphinx | ||||
| certifi==2020.6.20 \ | ||||
|     --hash=sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3 \ | ||||
|     --hash=sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41 \ | ||||
| certifi==2020.12.5 \ | ||||
|     --hash=sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c \ | ||||
|     --hash=sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830 | ||||
|     # via requests | ||||
| chardet==3.0.4 \ | ||||
|     --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ | ||||
|     --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \ | ||||
| chardet==4.0.0 \ | ||||
|     --hash=sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa \ | ||||
|     --hash=sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5 | ||||
|     # via requests | ||||
| commonmark==0.9.1 \ | ||||
|     --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ | ||||
|     --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 \ | ||||
|     --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 | ||||
|     # via recommonmark | ||||
| docutils==0.15.2 \ | ||||
|     --hash=sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0 \ | ||||
|     --hash=sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827 \ | ||||
|     --hash=sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99 \ | ||||
|     # via recommonmark, sphinx | ||||
| docutils==0.16 \ | ||||
|     --hash=sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af \ | ||||
|     --hash=sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc | ||||
|     # via | ||||
|     #   recommonmark | ||||
|     #   sphinx | ||||
| idna==2.8 \ | ||||
|     --hash=sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407 \ | ||||
|     --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c \ | ||||
|     --hash=sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c | ||||
|     # via requests | ||||
| imagesize==1.2.0 \ | ||||
|     --hash=sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1 \ | ||||
|     --hash=sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1 \ | ||||
|     --hash=sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1 | ||||
|     # via sphinx | ||||
| jinja2==2.11.2 \ | ||||
|     --hash=sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0 \ | ||||
|     --hash=sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035 \ | ||||
|     --hash=sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035 | ||||
|     # via sphinx | ||||
| markupsafe==1.1.1 \ | ||||
|     --hash=sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473 \ | ||||
| @@ -77,79 +78,78 @@ markupsafe==1.1.1 \ | ||||
|     --hash=sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f \ | ||||
|     --hash=sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2 \ | ||||
|     --hash=sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7 \ | ||||
|     --hash=sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be \ | ||||
|     --hash=sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be | ||||
|     # via jinja2 | ||||
| packaging==20.4 \ | ||||
|     --hash=sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8 \ | ||||
|     --hash=sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181 \ | ||||
| packaging==20.8 \ | ||||
|     --hash=sha256:24e0da08660a87484d1602c30bb4902d74816b6985b93de36926f5bc95741858 \ | ||||
|     --hash=sha256:78598185a7008a470d64526a8059de9aaa449238f280fc9eb6b13ba6c4109093 | ||||
|     # via sphinx | ||||
| pygments==2.6.1 \ | ||||
|     --hash=sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44 \ | ||||
|     --hash=sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324 \ | ||||
| pygments==2.7.4 \ | ||||
|     --hash=sha256:bc9591213a8f0e0ca1a5e68a479b4887fdc3e75d0774e5c71c31920c427de435 \ | ||||
|     --hash=sha256:df49d09b498e83c1a73128295860250b0b7edd4c723a32e9bc0d295c7c2ec337 | ||||
|     # via sphinx | ||||
| pyparsing==2.4.7 \ | ||||
|     --hash=sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1 \ | ||||
|     --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b \ | ||||
|     --hash=sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b | ||||
|     # via packaging | ||||
| pytz==2020.1 \ | ||||
|     --hash=sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed \ | ||||
|     --hash=sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048 \ | ||||
| pytz==2020.5 \ | ||||
|     --hash=sha256:16962c5fb8db4a8f63a26646d8886e9d769b6c511543557bc84e9569fb9a9cb4 \ | ||||
|     --hash=sha256:180befebb1927b16f6b57101720075a984c019ac16b1b7575673bea42c6c3da5 | ||||
|     # via babel | ||||
| recommonmark==0.6.0 \ | ||||
|     --hash=sha256:29cd4faeb6c5268c633634f2d69aef9431e0f4d347f90659fd0aab20e541efeb \ | ||||
|     --hash=sha256:2ec4207a574289355d5b6ae4ae4abb29043346ca12cdd5f07d374dc5987d2852 \ | ||||
| recommonmark==0.7.1 \ | ||||
|     --hash=sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f \ | ||||
|     --hash=sha256:bdb4db649f2222dcd8d2d844f0006b958d627f732415d399791ee436a3686d67 | ||||
|     # via -r requirements/docs.in | ||||
| requests==2.24.0 \ | ||||
|     --hash=sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b \ | ||||
|     --hash=sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898 \ | ||||
| requests==2.25.1 \ | ||||
|     --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 \ | ||||
|     --hash=sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e | ||||
|     # via sphinx | ||||
| six==1.15.0 \ | ||||
|     --hash=sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259 \ | ||||
|     --hash=sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced \ | ||||
|     # via packaging | ||||
| snowballstemmer==2.0.0 \ | ||||
|     --hash=sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0 \ | ||||
|     --hash=sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52 \ | ||||
| snowballstemmer==2.1.0 \ | ||||
|     --hash=sha256:b51b447bea85f9968c13b650126a888aabd4cb4463fca868ec596826325dedc2 \ | ||||
|     --hash=sha256:e997baa4f2e9139951b6f4c631bad912dfd3c792467e2f03d7239464af90e914 | ||||
|     # via sphinx | ||||
| sphinx-rtd-theme==0.5.0 \ | ||||
|     --hash=sha256:22c795ba2832a169ca301cd0a083f7a434e09c538c70beb42782c073651b707d \ | ||||
|     --hash=sha256:373413d0f82425aaa28fb288009bf0d0964711d347763af2f1b65cafcb028c82 \ | ||||
| sphinx-rtd-theme==0.5.1 \ | ||||
|     --hash=sha256:eda689eda0c7301a80cf122dad28b1861e5605cbf455558f3775e1e8200e83a5 \ | ||||
|     --hash=sha256:fa6bebd5ab9a73da8e102509a86f3fcc36dec04a0b52ea80e5a033b2aba00113 | ||||
|     # via -r requirements/docs.in | ||||
| sphinx==3.1.2 \ | ||||
|     --hash=sha256:97dbf2e31fc5684bb805104b8ad34434ed70e6c588f6896991b2fdfd2bef8c00 \ | ||||
|     --hash=sha256:b9daeb9b39aa1ffefc2809b43604109825300300b987a24f45976c001ba1a8fd \ | ||||
|     # via -r requirements/docs.in, recommonmark, sphinx-rtd-theme | ||||
| sphinx==3.4.3 \ | ||||
|     --hash=sha256:41cad293f954f7d37f803d97eb184158cfd90f51195131e94875bc07cd08b93c \ | ||||
|     --hash=sha256:c314c857e7cd47c856d2c5adff514ac2e6495f8b8e0f886a8a37e9305dfea0d8 | ||||
|     # via | ||||
|     #   -r requirements/docs.in | ||||
|     #   recommonmark | ||||
|     #   sphinx-rtd-theme | ||||
| sphinxcontrib-applehelp==1.0.2 \ | ||||
|     --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a \ | ||||
|     --hash=sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58 \ | ||||
|     --hash=sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58 | ||||
|     # via sphinx | ||||
| sphinxcontrib-devhelp==1.0.2 \ | ||||
|     --hash=sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e \ | ||||
|     --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 \ | ||||
|     --hash=sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4 | ||||
|     # via sphinx | ||||
| sphinxcontrib-htmlhelp==1.0.3 \ | ||||
|     --hash=sha256:3c0bc24a2c41e340ac37c85ced6dafc879ab485c095b1d65d2461ac2f7cca86f \ | ||||
|     --hash=sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b \ | ||||
|     --hash=sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b | ||||
|     # via sphinx | ||||
| sphinxcontrib-jsmath==1.0.1 \ | ||||
|     --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ | ||||
|     --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 \ | ||||
|     --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 | ||||
|     # via sphinx | ||||
| sphinxcontrib-qthelp==1.0.3 \ | ||||
|     --hash=sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72 \ | ||||
|     --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 \ | ||||
|     --hash=sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6 | ||||
|     # via sphinx | ||||
| sphinxcontrib-serializinghtml==1.1.4 \ | ||||
|     --hash=sha256:eaa0eccc86e982a9b939b2b82d12cc5d013385ba5eadcc7e4fed23f4405f77bc \ | ||||
|     --hash=sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a \ | ||||
|     --hash=sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a | ||||
|     # via sphinx | ||||
| urllib3==1.25.9 \ | ||||
|     --hash=sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527 \ | ||||
|     --hash=sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115 \ | ||||
| urllib3==1.26.2 \ | ||||
|     --hash=sha256:19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08 \ | ||||
|     --hash=sha256:d8ff90d979214d7b4f8ce956e80f4028fc6860e4431f731ea4a8c08f23f99473 | ||||
|     # via requests | ||||
|  | ||||
| # The following packages are considered to be unsafe in a requirements file: | ||||
| setuptools==49.1.0 \ | ||||
|     --hash=sha256:60351853f8c093ef57224695ee989d5d074168f6b93dae000fa9996072adaba3 \ | ||||
|     --hash=sha256:daf2e1c215f805b0ddc3b4262886bb6667ae0d4563887a8374fb766adc47c324 \ | ||||
| setuptools==52.0.0 \ | ||||
|     --hash=sha256:0a6f1f18249f78cffdad842efadf1ed7b039fa3355d93f3890f56bd66a48cf27 \ | ||||
|     --hash=sha256:fb3a1ee622509550dbf1d419f241296169d7f09cb1eb5b1736f2f10965932b96 | ||||
|     # via sphinx | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
| # | ||||
| mypy-extensions==0.4.3 \ | ||||
|     --hash=sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d \ | ||||
|     --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 \ | ||||
|     --hash=sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8 | ||||
|     # via mypy | ||||
| mypy==0.782 \ | ||||
|     --hash=sha256:2c6cde8aa3426c1682d35190b59b71f661237d74b053822ea3d748e2c9578a7c \ | ||||
| @@ -25,33 +25,42 @@ mypy==0.782 \ | ||||
|     --hash=sha256:d7df6eddb6054d21ca4d3c6249cae5578cb4602951fd2b6ee2f5510ffb098707 \ | ||||
|     --hash=sha256:e0b61738ab504e656d1fe4ff0c0601387a5489ca122d55390ade31f9ca0e252d \ | ||||
|     --hash=sha256:eff7d4a85e9eea55afa34888dfeaccde99e7520b51f867ac28a48492c0b1130c \ | ||||
|     --hash=sha256:f05644db6779387ccdb468cc47a44b4356fc2ffa9287135d05b70a98dc83b89a \ | ||||
|     --hash=sha256:f05644db6779387ccdb468cc47a44b4356fc2ffa9287135d05b70a98dc83b89a | ||||
|     # via -r requirements/mypy.in | ||||
| typed-ast==1.4.1 \ | ||||
|     --hash=sha256:0666aa36131496aed8f7be0410ff974562ab7eeac11ef351def9ea6fa28f6355 \ | ||||
|     --hash=sha256:0c2c07682d61a629b68433afb159376e24e5b2fd4641d35424e462169c0a7919 \ | ||||
|     --hash=sha256:249862707802d40f7f29f6e1aad8d84b5aa9e44552d2cc17384b209f091276aa \ | ||||
|     --hash=sha256:24995c843eb0ad11a4527b026b4dde3da70e1f2d8806c99b7b4a7cf491612652 \ | ||||
|     --hash=sha256:269151951236b0f9a6f04015a9004084a5ab0d5f19b57de779f908621e7d8b75 \ | ||||
|     --hash=sha256:4083861b0aa07990b619bd7ddc365eb7fa4b817e99cf5f8d9cf21a42780f6e01 \ | ||||
|     --hash=sha256:498b0f36cc7054c1fead3d7fc59d2150f4d5c6c56ba7fb150c013fbc683a8d2d \ | ||||
|     --hash=sha256:4e3e5da80ccbebfff202a67bf900d081906c358ccc3d5e3c8aea42fdfdfd51c1 \ | ||||
|     --hash=sha256:6daac9731f172c2a22ade6ed0c00197ee7cc1221aa84cfdf9c31defeb059a907 \ | ||||
|     --hash=sha256:715ff2f2df46121071622063fc7543d9b1fd19ebfc4f5c8895af64a77a8c852c \ | ||||
|     --hash=sha256:73d785a950fc82dd2a25897d525d003f6378d1cb23ab305578394694202a58c3 \ | ||||
|     --hash=sha256:8c8aaad94455178e3187ab22c8b01a3837f8ee50e09cf31f1ba129eb293ec30b \ | ||||
|     --hash=sha256:8ce678dbaf790dbdb3eba24056d5364fb45944f33553dd5869b7580cdbb83614 \ | ||||
|     --hash=sha256:aaee9905aee35ba5905cfb3c62f3e83b3bec7b39413f0a7f19be4e547ea01ebb \ | ||||
|     --hash=sha256:bcd3b13b56ea479b3650b82cabd6b5343a625b0ced5429e4ccad28a8973f301b \ | ||||
|     --hash=sha256:c9e348e02e4d2b4a8b2eedb48210430658df6951fa484e59de33ff773fbd4b41 \ | ||||
|     --hash=sha256:d205b1b46085271b4e15f670058ce182bd1199e56b317bf2ec004b6a44f911f6 \ | ||||
|     --hash=sha256:d43943ef777f9a1c42bf4e552ba23ac77a6351de620aa9acf64ad54933ad4d34 \ | ||||
|     --hash=sha256:d5d33e9e7af3b34a40dc05f498939f0ebf187f07c385fd58d591c533ad8562fe \ | ||||
|     --hash=sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4 \ | ||||
|     --hash=sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7 \ | ||||
| typed-ast==1.4.2 \ | ||||
|     --hash=sha256:07d49388d5bf7e863f7fa2f124b1b1d89d8aa0e2f7812faff0a5658c01c59aa1 \ | ||||
|     --hash=sha256:14bf1522cdee369e8f5581238edac09150c765ec1cb33615855889cf33dcb92d \ | ||||
|     --hash=sha256:240296b27397e4e37874abb1df2a608a92df85cf3e2a04d0d4d61055c8305ba6 \ | ||||
|     --hash=sha256:36d829b31ab67d6fcb30e185ec996e1f72b892255a745d3a82138c97d21ed1cd \ | ||||
|     --hash=sha256:37f48d46d733d57cc70fd5f30572d11ab8ed92da6e6b28e024e4a3edfb456e37 \ | ||||
|     --hash=sha256:4c790331247081ea7c632a76d5b2a265e6d325ecd3179d06e9cf8d46d90dd151 \ | ||||
|     --hash=sha256:5dcfc2e264bd8a1db8b11a892bd1647154ce03eeba94b461effe68790d8b8e07 \ | ||||
|     --hash=sha256:7147e2a76c75f0f64c4319886e7639e490fee87c9d25cb1d4faef1d8cf83a440 \ | ||||
|     --hash=sha256:7703620125e4fb79b64aa52427ec192822e9f45d37d4b6625ab37ef403e1df70 \ | ||||
|     --hash=sha256:8368f83e93c7156ccd40e49a783a6a6850ca25b556c0fa0240ed0f659d2fe496 \ | ||||
|     --hash=sha256:84aa6223d71012c68d577c83f4e7db50d11d6b1399a9c779046d75e24bed74ea \ | ||||
|     --hash=sha256:85f95aa97a35bdb2f2f7d10ec5bbdac0aeb9dafdaf88e17492da0504de2e6400 \ | ||||
|     --hash=sha256:8db0e856712f79c45956da0c9a40ca4246abc3485ae0d7ecc86a20f5e4c09abc \ | ||||
|     --hash=sha256:9044ef2df88d7f33692ae3f18d3be63dec69c4fb1b5a4a9ac950f9b4ba571606 \ | ||||
|     --hash=sha256:963c80b583b0661918718b095e02303d8078950b26cc00b5e5ea9ababe0de1fc \ | ||||
|     --hash=sha256:987f15737aba2ab5f3928c617ccf1ce412e2e321c77ab16ca5a293e7bbffd581 \ | ||||
|     --hash=sha256:9ec45db0c766f196ae629e509f059ff05fc3148f9ffd28f3cfe75d4afb485412 \ | ||||
|     --hash=sha256:9fc0b3cb5d1720e7141d103cf4819aea239f7d136acf9ee4a69b047b7986175a \ | ||||
|     --hash=sha256:a2c927c49f2029291fbabd673d51a2180038f8cd5a5b2f290f78c4516be48be2 \ | ||||
|     --hash=sha256:a38878a223bdd37c9709d07cd357bb79f4c760b29210e14ad0fb395294583787 \ | ||||
|     --hash=sha256:b4fcdcfa302538f70929eb7b392f536a237cbe2ed9cba88e3bf5027b39f5f77f \ | ||||
|     --hash=sha256:c0c74e5579af4b977c8b932f40a5464764b2f86681327410aa028a22d2f54937 \ | ||||
|     --hash=sha256:c1c876fd795b36126f773db9cbb393f19808edd2637e00fd6caba0e25f2c7b64 \ | ||||
|     --hash=sha256:c9aadc4924d4b5799112837b226160428524a9a45f830e0d0f184b19e4090487 \ | ||||
|     --hash=sha256:cc7b98bf58167b7f2db91a4327da24fb93368838eb84a44c472283778fc2446b \ | ||||
|     --hash=sha256:cf54cfa843f297991b7388c281cb3855d911137223c6b6d2dd82a47ae5125a41 \ | ||||
|     --hash=sha256:d003156bb6a59cda9050e983441b7fa2487f7800d76bdc065566b7d728b4581a \ | ||||
|     --hash=sha256:d175297e9533d8d37437abc14e8a83cbc68af93cc9c1c59c2c292ec59a0697a3 \ | ||||
|     --hash=sha256:d746a437cdbca200622385305aedd9aef68e8a645e385cc483bdc5e488f07166 \ | ||||
|     --hash=sha256:e683e409e5c45d5c9082dc1daf13f6374300806240719f95dc783d1fc942af10 | ||||
|     # via mypy | ||||
| typing-extensions==3.7.4.2 \ | ||||
|     --hash=sha256:6e95524d8a547a91e08f404ae485bbb71962de46967e1b71a0cb89af24e761c5 \ | ||||
|     --hash=sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae \ | ||||
|     --hash=sha256:f8d2bd89d25bc39dabe7d23df520442fa1d8969b82544370e03d88b5a591c392 \ | ||||
| typing-extensions==3.7.4.3 \ | ||||
|     --hash=sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918 \ | ||||
|     --hash=sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c \ | ||||
|     --hash=sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f | ||||
|     # via mypy | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| pip | ||||
| pip==20.2.*  # Our hack for installing specific commits from Git fails in 20.3 | ||||
| setuptools | ||||
| wheel | ||||
|   | ||||
| @@ -7,17 +7,17 @@ | ||||
| # | ||||
| # For details, see requirements/README.md . | ||||
| # | ||||
| wheel==0.34.2 \ | ||||
|     --hash=sha256:8788e9155fe14f54164c1b9eb0a319d98ef02c160725587ad60f14ddc57b6f96 \ | ||||
|     --hash=sha256:df277cb51e61359aba502208d680f90c0493adec6f0e848af94948778aed386e \ | ||||
| wheel==0.36.2 \ | ||||
|     --hash=sha256:78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e \ | ||||
|     --hash=sha256:e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e | ||||
|     # via -r requirements/pip.in | ||||
|  | ||||
| # The following packages are considered to be unsafe in a requirements file: | ||||
| pip==20.1.1 \ | ||||
|     --hash=sha256:27f8dc29387dd83249e06e681ce087e6061826582198a425085e0bf4c1cf3a55 \ | ||||
|     --hash=sha256:b27c4dedae8c41aa59108f2fa38bf78e0890e590545bc8ece7cdceb4ba60f6e4 \ | ||||
| pip==20.2.4 \ | ||||
|     --hash=sha256:51f1c7514530bd5c145d8f13ed936ad6b8bfcb8cf74e10403d0890bc986f0033 \ | ||||
|     --hash=sha256:85c99a857ea0fb0aedf23833d9be5c40cf253fe24443f0829c7b472e23c364a1 | ||||
|     # via -r requirements/pip.in | ||||
| setuptools==49.1.0 \ | ||||
|     --hash=sha256:60351853f8c093ef57224695ee989d5d074168f6b93dae000fa9996072adaba3 \ | ||||
|     --hash=sha256:daf2e1c215f805b0ddc3b4262886bb6667ae0d4563887a8374fb766adc47c324 \ | ||||
| setuptools==52.0.0 \ | ||||
|     --hash=sha256:0a6f1f18249f78cffdad842efadf1ed7b039fa3355d93f3890f56bd66a48cf27 \ | ||||
|     --hash=sha256:fb3a1ee622509550dbf1d419f241296169d7f09cb1eb5b1736f2f10965932b96 | ||||
|     # via -r requirements/pip.in | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -7,146 +7,205 @@ | ||||
| # | ||||
| # For details, see requirements/README.md . | ||||
| # | ||||
| aiobotocore==1.0.7 \ | ||||
|     --hash=sha256:9589d812714a5b78f0b8249916c17374e507dd7edfd5038a85cd6f25028506f3 \ | ||||
|     --hash=sha256:d3183a22a376a97ed0a739854408fcf4ee9f24a629b38f84451b7e2111622ae3 \ | ||||
| aiobotocore==1.2.0 \ | ||||
|     --hash=sha256:852b75ba7b7f50c89aba4693545d0c5450024886c55cd6ecefb736d474f9ea53 | ||||
|     # via tc-aws | ||||
| aiohttp==3.6.2 \ | ||||
|     --hash=sha256:1e984191d1ec186881ffaed4581092ba04f7c61582a177b187d3a2f07ed9719e \ | ||||
|     --hash=sha256:259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326 \ | ||||
|     --hash=sha256:2f4d1a4fdce595c947162333353d4a44952a724fba9ca3205a3df99a33d1307a \ | ||||
|     --hash=sha256:32e5f3b7e511aa850829fbe5aa32eb455e5534eaa4b1ce93231d00e2f76e5654 \ | ||||
|     --hash=sha256:344c780466b73095a72c616fac5ea9c4665add7fc129f285fbdbca3cccf4612a \ | ||||
|     --hash=sha256:460bd4237d2dbecc3b5ed57e122992f60188afe46e7319116da5eb8a9dfedba4 \ | ||||
|     --hash=sha256:4c6efd824d44ae697814a2a85604d8e992b875462c6655da161ff18fd4f29f17 \ | ||||
|     --hash=sha256:50aaad128e6ac62e7bf7bd1f0c0a24bc968a0c0590a726d5a955af193544bcec \ | ||||
|     --hash=sha256:6206a135d072f88da3e71cc501c59d5abffa9d0bb43269a6dcd28d66bfafdbdd \ | ||||
|     --hash=sha256:65f31b622af739a802ca6fd1a3076fd0ae523f8485c52924a89561ba10c49b48 \ | ||||
|     --hash=sha256:ae55bac364c405caa23a4f2d6cfecc6a0daada500274ffca4a9230e7129eac59 \ | ||||
|     --hash=sha256:b778ce0c909a2653741cb4b1ac7015b5c130ab9c897611df43ae6a58523cb965 \ | ||||
| aiohttp==3.7.3 \ | ||||
|     --hash=sha256:0b795072bb1bf87b8620120a6373a3c61bfcb8da7e5c2377f4bb23ff4f0b62c9 \ | ||||
|     --hash=sha256:0d438c8ca703b1b714e82ed5b7a4412c82577040dadff479c08405e2a715564f \ | ||||
|     --hash=sha256:16a3cb5df5c56f696234ea9e65e227d1ebe9c18aa774d36ff42f532139066a5f \ | ||||
|     --hash=sha256:1edfd82a98c5161497bbb111b2b70c0813102ad7e0aa81cbeb34e64c93863005 \ | ||||
|     --hash=sha256:2406dc1dda01c7f6060ab586e4601f18affb7a6b965c50a8c90ff07569cf782a \ | ||||
|     --hash=sha256:2858b2504c8697beb9357be01dc47ef86438cc1cb36ecb6991796d19475faa3e \ | ||||
|     --hash=sha256:2a7b7640167ab536c3cb90cfc3977c7094f1c5890d7eeede8b273c175c3910fd \ | ||||
|     --hash=sha256:3228b7a51e3ed533f5472f54f70fd0b0a64c48dc1649a0f0e809bec312934d7a \ | ||||
|     --hash=sha256:328b552513d4f95b0a2eea4c8573e112866107227661834652a8984766aa7656 \ | ||||
|     --hash=sha256:39f4b0a6ae22a1c567cb0630c30dd082481f95c13ca528dc501a7766b9c718c0 \ | ||||
|     --hash=sha256:3b0036c978cbcc4a4512278e98e3e6d9e6b834dc973206162eddf98b586ef1c6 \ | ||||
|     --hash=sha256:3ea8c252d8df5e9166bcf3d9edced2af132f4ead8ac422eac723c5781063709a \ | ||||
|     --hash=sha256:41608c0acbe0899c852281978492f9ce2c6fbfaf60aff0cefc54a7c4516b822c \ | ||||
|     --hash=sha256:59d11674964b74a81b149d4ceaff2b674b3b0e4d0f10f0be1533e49c4a28408b \ | ||||
|     --hash=sha256:5e479df4b2d0f8f02133b7e4430098699450e1b2a826438af6bec9a400530957 \ | ||||
|     --hash=sha256:684850fb1e3e55c9220aad007f8386d8e3e477c4ec9211ae54d968ecdca8c6f9 \ | ||||
|     --hash=sha256:6ccc43d68b81c424e46192a778f97da94ee0630337c9bbe5b2ecc9b0c1c59001 \ | ||||
|     --hash=sha256:6d42debaf55450643146fabe4b6817bb2a55b23698b0434107e892a43117285e \ | ||||
|     --hash=sha256:710376bf67d8ff4500a31d0c207b8941ff4fba5de6890a701d71680474fe2a60 \ | ||||
|     --hash=sha256:756ae7efddd68d4ea7d89c636b703e14a0c686688d42f588b90778a3c2fc0564 \ | ||||
|     --hash=sha256:77149002d9386fae303a4a162e6bce75cc2161347ad2ba06c2f0182561875d45 \ | ||||
|     --hash=sha256:78e2f18a82b88cbc37d22365cf8d2b879a492faedb3f2975adb4ed8dfe994d3a \ | ||||
|     --hash=sha256:7d9b42127a6c0bdcc25c3dcf252bb3ddc70454fac593b1b6933ae091396deb13 \ | ||||
|     --hash=sha256:8389d6044ee4e2037dca83e3f6994738550f6ee8cfb746762283fad9b932868f \ | ||||
|     --hash=sha256:9c1a81af067e72261c9cbe33ea792893e83bc6aa987bfbd6fdc1e5e7b22777c4 \ | ||||
|     --hash=sha256:c1e0920909d916d3375c7a1fdb0b1c78e46170e8bb42792312b6eb6676b2f87f \ | ||||
|     --hash=sha256:c68fdf21c6f3573ae19c7ee65f9ff185649a060c9a06535e9c3a0ee0bbac9235 \ | ||||
|     --hash=sha256:c733ef3bdcfe52a1a75564389bad4064352274036e7e234730526d155f04d914 \ | ||||
|     --hash=sha256:c9c58b0b84055d8bc27b7df5a9d141df4ee6ff59821f922dd73155861282f6a3 \ | ||||
|     --hash=sha256:d03abec50df423b026a5aa09656bd9d37f1e6a49271f123f31f9b8aed5dc3ea3 \ | ||||
|     --hash=sha256:d2cfac21e31e841d60dc28c0ec7d4ec47a35c608cb8906435d47ef83ffb22150 \ | ||||
|     --hash=sha256:dcc119db14757b0c7bce64042158307b9b1c76471e655751a61b57f5a0e4d78e \ | ||||
|     --hash=sha256:df3a7b258cc230a65245167a202dd07320a5af05f3d41da1488ba0fa05bc9347 \ | ||||
|     --hash=sha256:df48a623c58180874d7407b4d9ec06a19b84ed47f60a3884345b1a5099c1818b \ | ||||
|     --hash=sha256:e1b95972a0ae3f248a899cdbac92ba2e01d731225f566569311043ce2226f5e7 \ | ||||
|     --hash=sha256:f326b3c1bbfda5b9308252ee0dcb30b612ee92b0e105d4abec70335fab5b1245 \ | ||||
|     --hash=sha256:f411cb22115cb15452d099fec0ee636b06cf81bfb40ed9c02d30c8dc2bc2e3d1 | ||||
|     # via aiobotocore | ||||
| aioitertools==0.7.0 \ | ||||
|     --hash=sha256:341cb05a0903177ef1b73d4cc12c92aee18e81c364e0138f4efc7ec3c47b8177 \ | ||||
|     --hash=sha256:e931a2f0dcabd4a8446b5cc2fc71b8bb14716e6adf37728a70869213f1f741cd \ | ||||
| aioitertools==0.7.1 \ | ||||
|     --hash=sha256:54a56c7cf3b5290d1cb5e8974353c9f52c677612b5d69a859369a020c53414a3 \ | ||||
|     --hash=sha256:8972308474c41ed5e0636819f948ebff32f2318e70f7e7d23cd208c4357cc773 | ||||
|     # via aiobotocore | ||||
| async-timeout==3.0.1 \ | ||||
|     --hash=sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f \ | ||||
|     --hash=sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3 \ | ||||
|     --hash=sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3 | ||||
|     # via aiohttp | ||||
| attrs==19.3.0 \ | ||||
|     --hash=sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c \ | ||||
|     --hash=sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72 \ | ||||
| attrs==20.3.0 \ | ||||
|     --hash=sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6 \ | ||||
|     --hash=sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700 | ||||
|     # via aiohttp | ||||
| botocore==1.15.32 \ | ||||
|     --hash=sha256:3ea89601ee452b65084005278bd832be854cfde5166685dcb14b6c8f19d3fc6d \ | ||||
|     --hash=sha256:a963af564d94107787ff3d2c534e8b7aed7f12e014cdd609f8fcb17bf9d9b19a \ | ||||
| botocore==1.19.52 \ | ||||
|     --hash=sha256:d8f50e4162012ccfab64c2db4fcc99313d46d57789072251bab56013d66546e2 \ | ||||
|     --hash=sha256:dc5ec23deadbe9327d3c81d03fddf80805c549059baabd80dea605941fe6a221 | ||||
|     # via aiobotocore | ||||
| chardet==3.0.4 \ | ||||
|     --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ | ||||
|     --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \ | ||||
|     --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 | ||||
|     # via aiohttp | ||||
| colorful==0.5.4 \ | ||||
|     --hash=sha256:86848ad4e2eda60cd2519d8698945d22f6f6551e23e95f3f14dfbb60997807ea \ | ||||
|     --hash=sha256:8d264b52a39aae4c0ba3e2a46afbaec81b0559a99be0d2cfe2aba4cf94531348 \ | ||||
|     --hash=sha256:8d264b52a39aae4c0ba3e2a46afbaec81b0559a99be0d2cfe2aba4cf94531348 | ||||
|     # via thumbor | ||||
| derpconf==0.8.3 \ | ||||
|     --hash=sha256:1bb152d8a1cf5c2a6d629bf29acd4af0c00811339642fc0a56172b0a83b31a15 \ | ||||
|     --hash=sha256:1bb152d8a1cf5c2a6d629bf29acd4af0c00811339642fc0a56172b0a83b31a15 | ||||
|     # via thumbor | ||||
| django-auth-ldap==2.2.0 \ | ||||
|     --hash=sha256:0ed2d88d81c39be915a9ab53b97ec0a33a3d16055518ab4c9bcffe8236d40370 \ | ||||
|     --hash=sha256:11af1773b08613339d2c3a0cec1308a4d563518f17b1719c3759994d0b4d04bf \ | ||||
|     --hash=sha256:11af1773b08613339d2c3a0cec1308a4d563518f17b1719c3759994d0b4d04bf | ||||
|     # via -r requirements/thumbor.in | ||||
| django==2.2.14 \ | ||||
|     --hash=sha256:edf0ecf6657713b0435b6757e6069466925cae70d634a3283c96b80c01e06191 \ | ||||
|     --hash=sha256:f2250bd35d0f6c23e930c544629934144e5dd39a4c06092e1050c731c1712ba8 \ | ||||
|     # via -r requirements/thumbor.in, django-auth-ldap | ||||
| docutils==0.15.2 \ | ||||
|     --hash=sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0 \ | ||||
|     --hash=sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827 \ | ||||
|     --hash=sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99 \ | ||||
|     # via botocore | ||||
| django==2.2.17 \ | ||||
|     --hash=sha256:558cb27930defd9a6042133258caf797b2d1dee233959f537e3dc475cb49bd7c \ | ||||
|     --hash=sha256:cf5370a4d7765a9dd6d42a7b96b53c74f9446cd38209211304b210fe0404b861 | ||||
|     # via | ||||
|     #   -r requirements/thumbor.in | ||||
|     #   django-auth-ldap | ||||
| idna-ssl==1.1.0 \ | ||||
|     --hash=sha256:a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c \ | ||||
|     --hash=sha256:a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c | ||||
|     # via aiohttp | ||||
| idna==2.10 \ | ||||
|     --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ | ||||
|     --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 \ | ||||
|     # via idna-ssl, yarl | ||||
| idna==3.1 \ | ||||
|     --hash=sha256:5205d03e7bcbb919cc9c19885f9920d622ca52448306f2377daede5cf3faac16 \ | ||||
|     --hash=sha256:c5b02147e01ea9920e6b0a3f1f7bb833612d507592c837a6c49552768f4054e1 | ||||
|     # via | ||||
|     #   idna-ssl | ||||
|     #   yarl | ||||
| jmespath==0.10.0 \ | ||||
|     --hash=sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9 \ | ||||
|     --hash=sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f \ | ||||
|     --hash=sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f | ||||
|     # via botocore | ||||
| libthumbor==2.0.1 \ | ||||
|     --hash=sha256:3c4e1a59c019d22f868d225315c06f97fad30fb5e78112d6a230b978e7d24e38 \ | ||||
|     --hash=sha256:ed4fe5f27f8f90e7285b7e6dce99c1b67d43a140bf370e989080b43d80ce25f0 \ | ||||
|     --hash=sha256:ed4fe5f27f8f90e7285b7e6dce99c1b67d43a140bf370e989080b43d80ce25f0 | ||||
|     # via thumbor | ||||
| multidict==4.7.6 \ | ||||
|     --hash=sha256:1ece5a3369835c20ed57adadc663400b5525904e53bae59ec854a5d36b39b21a \ | ||||
|     --hash=sha256:275ca32383bc5d1894b6975bb4ca6a7ff16ab76fa622967625baeebcf8079000 \ | ||||
|     --hash=sha256:3750f2205b800aac4bb03b5ae48025a64e474d2c6cc79547988ba1d4122a09e2 \ | ||||
|     --hash=sha256:4538273208e7294b2659b1602490f4ed3ab1c8cf9dbdd817e0e9db8e64be2507 \ | ||||
|     --hash=sha256:5141c13374e6b25fe6bf092052ab55c0c03d21bd66c94a0e3ae371d3e4d865a5 \ | ||||
|     --hash=sha256:51a4d210404ac61d32dada00a50ea7ba412e6ea945bbe992e4d7a595276d2ec7 \ | ||||
|     --hash=sha256:5cf311a0f5ef80fe73e4f4c0f0998ec08f954a6ec72b746f3c179e37de1d210d \ | ||||
|     --hash=sha256:6513728873f4326999429a8b00fc7ceddb2509b01d5fd3f3be7881a257b8d463 \ | ||||
|     --hash=sha256:7388d2ef3c55a8ba80da62ecfafa06a1c097c18032a501ffd4cabbc52d7f2b19 \ | ||||
|     --hash=sha256:9456e90649005ad40558f4cf51dbb842e32807df75146c6d940b6f5abb4a78f3 \ | ||||
|     --hash=sha256:c026fe9a05130e44157b98fea3ab12969e5b60691a276150db9eda71710cd10b \ | ||||
|     --hash=sha256:d14842362ed4cf63751648e7672f7174c9818459d169231d03c56e84daf90b7c \ | ||||
|     --hash=sha256:e0d072ae0f2a179c375f67e3da300b47e1a83293c554450b29c900e50afaae87 \ | ||||
|     --hash=sha256:f07acae137b71af3bb548bd8da720956a3bc9f9a0b87733e0899226a2317aeb7 \ | ||||
|     --hash=sha256:fbb77a75e529021e7c4a8d4e823d88ef4d23674a202be4f5addffc72cbb91430 \ | ||||
|     --hash=sha256:fcfbb44c59af3f8ea984de67ec7c306f618a3ec771c2843804069917a8f2e255 \ | ||||
|     --hash=sha256:feed85993dbdb1dbc29102f50bca65bdc68f2c0c8d352468c25b54874f23c39d \ | ||||
|     # via aiohttp, yarl | ||||
| numpy==1.19.0 \ | ||||
|     --hash=sha256:13af0184177469192d80db9bd02619f6fa8b922f9f327e077d6f2a6acb1ce1c0 \ | ||||
|     --hash=sha256:26a45798ca2a4e168d00de75d4a524abf5907949231512f372b217ede3429e98 \ | ||||
|     --hash=sha256:26f509450db547e4dfa3ec739419b31edad646d21fb8d0ed0734188b35ff6b27 \ | ||||
|     --hash=sha256:30a59fb41bb6b8c465ab50d60a1b298d1cd7b85274e71f38af5a75d6c475d2d2 \ | ||||
|     --hash=sha256:33c623ef9ca5e19e05991f127c1be5aeb1ab5cdf30cb1c5cf3960752e58b599b \ | ||||
|     --hash=sha256:356f96c9fbec59974a592452ab6a036cd6f180822a60b529a975c9467fcd5f23 \ | ||||
|     --hash=sha256:3c40c827d36c6d1c3cf413694d7dc843d50997ebffbc7c87d888a203ed6403a7 \ | ||||
|     --hash=sha256:4d054f013a1983551254e2379385e359884e5af105e3efe00418977d02f634a7 \ | ||||
|     --hash=sha256:63d971bb211ad3ca37b2adecdd5365f40f3b741a455beecba70fd0dde8b2a4cb \ | ||||
|     --hash=sha256:658624a11f6e1c252b2cd170d94bf28c8f9410acab9f2fd4369e11e1cd4e1aaf \ | ||||
|     --hash=sha256:76766cc80d6128750075378d3bb7812cf146415bd29b588616f72c943c00d598 \ | ||||
|     --hash=sha256:7b57f26e5e6ee2f14f960db46bd58ffdca25ca06dd997729b1b179fddd35f5a3 \ | ||||
|     --hash=sha256:7b852817800eb02e109ae4a9cef2beda8dd50d98b76b6cfb7b5c0099d27b52d4 \ | ||||
|     --hash=sha256:8cde829f14bd38f6da7b2954be0f2837043e8b8d7a9110ec5e318ae6bf706610 \ | ||||
|     --hash=sha256:a2e3a39f43f0ce95204beb8fe0831199542ccab1e0c6e486a0b4947256215632 \ | ||||
|     --hash=sha256:a86c962e211f37edd61d6e11bb4df7eddc4a519a38a856e20a6498c319efa6b0 \ | ||||
|     --hash=sha256:a8705c5073fe3fcc297fb8e0b31aa794e05af6a329e81b7ca4ffecab7f2b95ef \ | ||||
|     --hash=sha256:b6aaeadf1e4866ca0fdf7bb4eed25e521ae21a7947c59f78154b24fc7abbe1dd \ | ||||
|     --hash=sha256:be62aeff8f2f054eff7725f502f6228298891fd648dc2630e03e44bf63e8cee0 \ | ||||
|     --hash=sha256:c2edbb783c841e36ca0fa159f0ae97a88ce8137fb3a6cd82eae77349ba4b607b \ | ||||
|     --hash=sha256:cbe326f6d364375a8e5a8ccb7e9cd73f4b2f6dc3b2ed205633a0db8243e2a96a \ | ||||
|     --hash=sha256:d34fbb98ad0d6b563b95de852a284074514331e6b9da0a9fc894fb1cdae7a79e \ | ||||
|     --hash=sha256:d97a86937cf9970453c3b62abb55a6475f173347b4cde7f8dcdb48c8e1b9952d \ | ||||
|     --hash=sha256:dd53d7c4a69e766e4900f29db5872f5824a06827d594427cf1a4aa542818b796 \ | ||||
|     --hash=sha256:df1889701e2dfd8ba4dc9b1a010f0a60950077fb5242bb92c8b5c7f1a6f2668a \ | ||||
|     --hash=sha256:fa1fe75b4a9e18b66ae7f0b122543c42debcf800aaafa0212aaff3ad273c2596 \ | ||||
| multidict==5.1.0 \ | ||||
|     --hash=sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a \ | ||||
|     --hash=sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93 \ | ||||
|     --hash=sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632 \ | ||||
|     --hash=sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656 \ | ||||
|     --hash=sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79 \ | ||||
|     --hash=sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7 \ | ||||
|     --hash=sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d \ | ||||
|     --hash=sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5 \ | ||||
|     --hash=sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224 \ | ||||
|     --hash=sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26 \ | ||||
|     --hash=sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea \ | ||||
|     --hash=sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348 \ | ||||
|     --hash=sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6 \ | ||||
|     --hash=sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76 \ | ||||
|     --hash=sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1 \ | ||||
|     --hash=sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f \ | ||||
|     --hash=sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952 \ | ||||
|     --hash=sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a \ | ||||
|     --hash=sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37 \ | ||||
|     --hash=sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9 \ | ||||
|     --hash=sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359 \ | ||||
|     --hash=sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8 \ | ||||
|     --hash=sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da \ | ||||
|     --hash=sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3 \ | ||||
|     --hash=sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d \ | ||||
|     --hash=sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf \ | ||||
|     --hash=sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841 \ | ||||
|     --hash=sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d \ | ||||
|     --hash=sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93 \ | ||||
|     --hash=sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f \ | ||||
|     --hash=sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647 \ | ||||
|     --hash=sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635 \ | ||||
|     --hash=sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456 \ | ||||
|     --hash=sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda \ | ||||
|     --hash=sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5 \ | ||||
|     --hash=sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281 \ | ||||
|     --hash=sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80 | ||||
|     # via | ||||
|     #   aiohttp | ||||
|     #   yarl | ||||
| numpy==1.19.5 \ | ||||
|     --hash=sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94 \ | ||||
|     --hash=sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080 \ | ||||
|     --hash=sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e \ | ||||
|     --hash=sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c \ | ||||
|     --hash=sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76 \ | ||||
|     --hash=sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371 \ | ||||
|     --hash=sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c \ | ||||
|     --hash=sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2 \ | ||||
|     --hash=sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a \ | ||||
|     --hash=sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb \ | ||||
|     --hash=sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140 \ | ||||
|     --hash=sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28 \ | ||||
|     --hash=sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f \ | ||||
|     --hash=sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d \ | ||||
|     --hash=sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff \ | ||||
|     --hash=sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8 \ | ||||
|     --hash=sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa \ | ||||
|     --hash=sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea \ | ||||
|     --hash=sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc \ | ||||
|     --hash=sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73 \ | ||||
|     --hash=sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d \ | ||||
|     --hash=sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d \ | ||||
|     --hash=sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4 \ | ||||
|     --hash=sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c \ | ||||
|     --hash=sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e \ | ||||
|     --hash=sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea \ | ||||
|     --hash=sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd \ | ||||
|     --hash=sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f \ | ||||
|     --hash=sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff \ | ||||
|     --hash=sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e \ | ||||
|     --hash=sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7 \ | ||||
|     --hash=sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa \ | ||||
|     --hash=sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827 \ | ||||
|     --hash=sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60 | ||||
|     # via opencv-python-headless | ||||
| opencv-python-headless==4.3.0.36 \ | ||||
|     --hash=sha256:065c6fc2efc61ebc3dd7de7774895e200b2c050d4e8b499cee717a9db526880e \ | ||||
|     --hash=sha256:103c705540603f349e714edff93606c66d0e0a6a36d22aca8f4c2a3f8f25823c \ | ||||
|     --hash=sha256:1b1dcdd4ccf4b71767add0b674f876aad666395471ccdce5455209329f036109 \ | ||||
|     --hash=sha256:271d7de7655f8d3a55100565b486d9f63da7465722e7a7ab834c853a2ee67b6e \ | ||||
|     --hash=sha256:2f71a14ccd109948f9c4c1761794e3512e7eff1e3b893619de6443467cec9052 \ | ||||
|     --hash=sha256:325fc39fcee0d07df07b409cefe3868086ed60f7286798c32765dce393c6951d \ | ||||
|     --hash=sha256:3cf602a40750cbab284cb9d6f508d9110a3c79d4e18a261cb09957e2ca6f07d6 \ | ||||
|     --hash=sha256:3d8b3e2b2dc5796cc1f34a6bd5e43d646818843a14554be55bb9e92dcb78ada0 \ | ||||
|     --hash=sha256:4b303ae6b207ed79071e2ab930a0f39d7e97bc176b730d552accdf7d0ea8ef5a \ | ||||
|     --hash=sha256:5fabfc789d6b8cffbb01f4e224d3583cce12666bbebafa15e8bca69111a21153 \ | ||||
|     --hash=sha256:653459f61b44f1d7f20ce36c6112925b351e2abadb4be6f3007440b237bafffd \ | ||||
|     --hash=sha256:8c496eb24af0ff16844f5b12fcbb28469151822fe19ece7b6cf66279c451981d \ | ||||
|     --hash=sha256:9b0e9fa11f203c39a51044471f01d5db0dd493b13e6da209cc8945b12e6eef9e \ | ||||
|     --hash=sha256:baaeef03220c48430768503af990b3ca5582a3c1a1bf03519db122e2ddcd78a3 \ | ||||
|     --hash=sha256:d269133ebfe8c99b7abe096358c0644212103b4806ae6e8ef5149d4e0d5edb36 \ | ||||
|     --hash=sha256:e204a75a00bee4c10875a94ccc8e102d9ab7e1259cc0f4ddf64cee777da6bbc9 \ | ||||
|     --hash=sha256:e217bbbbb7dc06d77c799edac196f2f706601f4f6a8b2d44ae25eda4cda23e08 \ | ||||
|     --hash=sha256:f5a29918dd8d8c3f4d7710a324fd3c733a91ad269c4863b32b920cb90801e22b \ | ||||
|     --hash=sha256:fe28cfc3b6285f7e92905c53d42426f4f03e7af134712061329333e8fb8ea3d6 \ | ||||
| opencv-python-headless==4.5.1.48 \ | ||||
|     --hash=sha256:0e02809db2968e54f3c23340be6ff9a1428b3f03f5dca7cd5aceda66e319ce86 \ | ||||
|     --hash=sha256:1f7c14f5d4e5af4dc4669fc6b4a983b36072a934c439ac11266b930496da8255 \ | ||||
|     --hash=sha256:243aea91cc1e36a47c46da4cc408071af39444a48df1fe1539ea8d7990500fd2 \ | ||||
|     --hash=sha256:2560dcf3c1158226b066302f777bfe0f65282410b8d90871dd872306c967d1f1 \ | ||||
|     --hash=sha256:2e6a9a88617a0ef7219cff24ba78a58416670a77e6ac63975f9009af3319ab63 \ | ||||
|     --hash=sha256:372149d007e20bf556b7687591d22b58b56b3c225f492da051d81587e5dc7411 \ | ||||
|     --hash=sha256:522f12dd994e064a30562adfd63b9439099bd7c80819f5261c37ebe593283c9e \ | ||||
|     --hash=sha256:526b9e19cf6300f0891d8f427eac1048091912332bb781eb4957a4994bfbe608 \ | ||||
|     --hash=sha256:5f0c7d34fa9953706c2a1a6d2760a91dc5a68cab3df16af61609894c6c8586f1 \ | ||||
|     --hash=sha256:657cdd9fbbbbb7e898ae3d9b0649b367d0e440d429c714104d069c5612d578bb \ | ||||
|     --hash=sha256:65c9ea57be5ebcaed009b3fee14fe59f3b6aa1e573fe08c5039ff057ad593c53 \ | ||||
|     --hash=sha256:777fb596e04331f73ef5b0c1faa4d33348f29ca58216d9286355c16f5489c939 \ | ||||
|     --hash=sha256:7c75680ffdf32d7044415a215d1fc60dbec14a7f2f0b59a85f0f74ef5efcb6ad \ | ||||
|     --hash=sha256:924aa4c34ead0b817309f42291dc526b2a7755476afe3009d1e275fc3090d92d \ | ||||
|     --hash=sha256:96d1da6ad061d8f3509668d398d14dd8265e529d6407f87eb26e7f4ddf043cc0 \ | ||||
|     --hash=sha256:9aa04a491c534531029fbac61da961fae0bf4abb1786eed9c91befde4ca7bd81 \ | ||||
|     --hash=sha256:a322d4df14c3a5f19701a023b3da91e9b8af8653b0d2ee0c50b0b341212f7343 \ | ||||
|     --hash=sha256:aa562c520f46283423ba8fac29099458e42deab697a9abd0491622e421c5c454 \ | ||||
|     --hash=sha256:ba2f0bd46e9534f29969e39f7895cbea9764173102b0c04b7818b8a9910d66e4 \ | ||||
|     --hash=sha256:d16825755e7b5a6d8737f93e116670229e1510199e0af9213004e187ae0dbcc5 \ | ||||
|     --hash=sha256:e3027e0d1b71b68b5cfe1ea9c627e323dff71112c854ba19805258d8fc6c630e \ | ||||
|     --hash=sha256:f2011ecb3980bbed283d17d43e0f1221bac88c0cac1a6fb59a056544de2df2f7 \ | ||||
|     --hash=sha256:f5e40a06116460ef2fd2d1c24be3b65f8bfb5fcdfe433f3fc01bcb4c2eb485bf \ | ||||
|     --hash=sha256:f7f8e4f7c63c8e95eb210f4cba88d0069a0a964d6335d7a35b07f0d0baa13558 \ | ||||
|     --hash=sha256:fe02a943b1a28b505e954fbce24e867119a3eb4351f93adad55c6cfe81a70484 | ||||
|     # via thumbor | ||||
| pillow==7.2.0 \ | ||||
|     --hash=sha256:0295442429645fa16d05bd567ef5cff178482439c9aad0411d3f0ce9b88b3a6f \ | ||||
| @@ -166,114 +225,185 @@ pillow==7.2.0 \ | ||||
|     --hash=sha256:94cf49723928eb6070a892cb39d6c156f7b5a2db4e8971cb958f7b6b104fb4c4 \ | ||||
|     --hash=sha256:97f9e7953a77d5a70f49b9a48da7776dc51e9b738151b22dacf101641594a626 \ | ||||
|     --hash=sha256:9ad7f865eebde135d526bb3163d0b23ffff365cf87e767c649550964ad72785d \ | ||||
|     --hash=sha256:9c87ef410a58dd54b92424ffd7e28fd2ec65d2f7fc02b76f5e9b2067e355ebf6 \ | ||||
|     --hash=sha256:a060cf8aa332052df2158e5a119303965be92c3da6f2d93b6878f0ebca80b2f6 \ | ||||
|     --hash=sha256:c79f9c5fb846285f943aafeafda3358992d64f0ef58566e23484132ecd8d7d63 \ | ||||
|     --hash=sha256:c92302a33138409e8f1ad16731568c55c9053eee71bb05b6b744067e1b62380f \ | ||||
|     --hash=sha256:d08b23fdb388c0715990cbc06866db554e1822c4bdcf6d4166cf30ac82df8c41 \ | ||||
|     --hash=sha256:d350f0f2c2421e65fbc62690f26b59b0bcda1b614beb318c81e38647e0f673a1 \ | ||||
|     --hash=sha256:e901964262a56d9ea3c2693df68bc9860b8bdda2b04768821e4c44ae797de117 \ | ||||
|     --hash=sha256:ec29604081f10f16a7aea809ad42e27764188fc258b02259a03a8ff7ded3808d \ | ||||
|     --hash=sha256:edf31f1150778abd4322444c393ab9c7bd2af271dd4dafb4208fb613b1f3cdc9 \ | ||||
|     --hash=sha256:f7e30c27477dffc3e85c2463b3e649f751789e0f6c8456099eea7ddd53be4a8a \ | ||||
|     --hash=sha256:ffe538682dc19cc542ae7c3e504fdf54ca7f86fb8a135e59dd6bc8627eae6cce \ | ||||
|     --hash=sha256:ffe538682dc19cc542ae7c3e504fdf54ca7f86fb8a135e59dd6bc8627eae6cce | ||||
|     # via thumbor | ||||
| pyasn1-modules==0.2.8 \ | ||||
|     --hash=sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e \ | ||||
|     --hash=sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74 \ | ||||
|     --hash=sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74 | ||||
|     # via python-ldap | ||||
| pyasn1==0.4.8 \ | ||||
|     --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \ | ||||
|     --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba \ | ||||
|     # via pyasn1-modules, python-ldap | ||||
|     --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba | ||||
|     # via | ||||
|     #   pyasn1-modules | ||||
|     #   python-ldap | ||||
| pycurl==7.43.0.6 \ | ||||
|     --hash=sha256:8301518689daefa53726b59ded6b48f33751c383cf987b0ccfbbc4ed40281325 | ||||
|     # via -r requirements/thumbor.in | ||||
| python-dateutil==2.8.1 \ | ||||
|     --hash=sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c \ | ||||
|     --hash=sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a \ | ||||
|     # via botocore, tc-aws | ||||
|     --hash=sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a | ||||
|     # via | ||||
|     #   botocore | ||||
|     #   tc-aws | ||||
| python-ldap==3.3.1 \ | ||||
|     --hash=sha256:4711cacf013e298754abd70058ccc995758177fb425f1c2d30e71adfc1d00aa5 \ | ||||
|     --hash=sha256:4711cacf013e298754abd70058ccc995758177fb425f1c2d30e71adfc1d00aa5 | ||||
|     # via django-auth-ldap | ||||
| pytz==2019.3 \ | ||||
|     --hash=sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d \ | ||||
|     --hash=sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be \ | ||||
|     # via django, thumbor | ||||
|     --hash=sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be | ||||
|     # via | ||||
|     #   django | ||||
|     #   thumbor | ||||
| six==1.15.0 \ | ||||
|     --hash=sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259 \ | ||||
|     --hash=sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced \ | ||||
|     # via derpconf, libthumbor, python-dateutil | ||||
| sqlparse==0.3.1 \ | ||||
|     --hash=sha256:022fb9c87b524d1f7862b3037e541f68597a730a8843245c349fc93e1643dc4e \ | ||||
|     --hash=sha256:e162203737712307dfe78860cc56c8da8a852ab2ee33750e33aeadf38d12c548 \ | ||||
|     --hash=sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced | ||||
|     # via | ||||
|     #   derpconf | ||||
|     #   libthumbor | ||||
|     #   python-dateutil | ||||
| sqlparse==0.4.1 \ | ||||
|     --hash=sha256:017cde379adbd6a1f15a61873f43e8274179378e95ef3fede90b5aa64d304ed0 \ | ||||
|     --hash=sha256:0f91fd2e829c44362cbcfab3e9ae12e22badaa8a29ad5ff599f9ec109f0454e8 | ||||
|     # via django | ||||
| statsd==3.3.0 \ | ||||
|     --hash=sha256:c610fb80347fca0ef62666d241bce64184bd7cc1efe582f9690e045c25535eaa \ | ||||
|     --hash=sha256:e3e6db4c246f7c59003e51c9720a51a7f39a396541cb9b147ff4b14d15b5dd1f \ | ||||
|     --hash=sha256:e3e6db4c246f7c59003e51c9720a51a7f39a396541cb9b147ff4b14d15b5dd1f | ||||
|     # via thumbor | ||||
| https://github.com/kkopachev/aws/archive/0d02528b47273e143be750ba237f71a076e8f251.zip#egg=tc_aws==6.3 \ | ||||
|     --hash=sha256:866d18ffbfd5a1627ed3973757e4c282745de8f30ed85f5ce8e80ae04932f8f3 \ | ||||
| https://github.com/kkopachev/aws/archive/b5058e6b9fec7354629acc6d5df423e0310bb0cd.zip#egg=tc_aws==6.3 \ | ||||
|     --hash=sha256:8a28437b0dfab88c89f280a2d6ec55a6abfa3e26d495dc15e1b3f38744e27f0c | ||||
|     # via -r requirements/thumbor.in | ||||
| thumbor==7.0.0a5 \ | ||||
|     --hash=sha256:5042c9c8facf0da028a22f1aee717f856d213ec037835ca0edaa0282217654bb \ | ||||
|     # via -r requirements/thumbor.in, tc-aws | ||||
| tornado==6.0.4 \ | ||||
|     --hash=sha256:0fe2d45ba43b00a41cd73f8be321a44936dc1aba233dee979f17a042b83eb6dc \ | ||||
|     --hash=sha256:22aed82c2ea340c3771e3babc5ef220272f6fd06b5108a53b4976d0d722bcd52 \ | ||||
|     --hash=sha256:2c027eb2a393d964b22b5c154d1a23a5f8727db6fda837118a776b29e2b8ebc6 \ | ||||
|     --hash=sha256:5217e601700f24e966ddab689f90b7ea4bd91ff3357c3600fa1045e26d68e55d \ | ||||
|     --hash=sha256:5618f72e947533832cbc3dec54e1dffc1747a5cb17d1fd91577ed14fa0dc081b \ | ||||
|     --hash=sha256:5f6a07e62e799be5d2330e68d808c8ac41d4a259b9cea61da4101b83cb5dc673 \ | ||||
|     --hash=sha256:c58d56003daf1b616336781b26d184023ea4af13ae143d9dda65e31e534940b9 \ | ||||
|     --hash=sha256:c952975c8ba74f546ae6de2e226ab3cc3cc11ae47baf607459a6728585bb542a \ | ||||
|     --hash=sha256:c98232a3ac391f5faea6821b53db8db461157baa788f5d6222a193e9456e1740 \ | ||||
|     --hash=sha256:5042c9c8facf0da028a22f1aee717f856d213ec037835ca0edaa0282217654bb | ||||
|     # via | ||||
|     #   -r requirements/thumbor.in | ||||
|     #   tc-aws | ||||
| tornado==6.1 \ | ||||
|     --hash=sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb \ | ||||
|     --hash=sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c \ | ||||
|     --hash=sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288 \ | ||||
|     --hash=sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95 \ | ||||
|     --hash=sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558 \ | ||||
|     --hash=sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe \ | ||||
|     --hash=sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791 \ | ||||
|     --hash=sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d \ | ||||
|     --hash=sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326 \ | ||||
|     --hash=sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b \ | ||||
|     --hash=sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4 \ | ||||
|     --hash=sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c \ | ||||
|     --hash=sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910 \ | ||||
|     --hash=sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5 \ | ||||
|     --hash=sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c \ | ||||
|     --hash=sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0 \ | ||||
|     --hash=sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675 \ | ||||
|     --hash=sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd \ | ||||
|     --hash=sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f \ | ||||
|     --hash=sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c \ | ||||
|     --hash=sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea \ | ||||
|     --hash=sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6 \ | ||||
|     --hash=sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05 \ | ||||
|     --hash=sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd \ | ||||
|     --hash=sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575 \ | ||||
|     --hash=sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a \ | ||||
|     --hash=sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37 \ | ||||
|     --hash=sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795 \ | ||||
|     --hash=sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f \ | ||||
|     --hash=sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32 \ | ||||
|     --hash=sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c \ | ||||
|     --hash=sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01 \ | ||||
|     --hash=sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4 \ | ||||
|     --hash=sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2 \ | ||||
|     --hash=sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921 \ | ||||
|     --hash=sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085 \ | ||||
|     --hash=sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df \ | ||||
|     --hash=sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102 \ | ||||
|     --hash=sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5 \ | ||||
|     --hash=sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68 \ | ||||
|     --hash=sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5 | ||||
|     # via thumbor | ||||
| typing-extensions==3.7.4.2 \ | ||||
|     --hash=sha256:6e95524d8a547a91e08f404ae485bbb71962de46967e1b71a0cb89af24e761c5 \ | ||||
|     --hash=sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae \ | ||||
|     --hash=sha256:f8d2bd89d25bc39dabe7d23df520442fa1d8969b82544370e03d88b5a591c392 \ | ||||
|     # via aiohttp, aioitertools | ||||
| urllib3==1.25.9 \ | ||||
|     --hash=sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527 \ | ||||
|     --hash=sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115 \ | ||||
| typing-extensions==3.7.4.3 \ | ||||
|     --hash=sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918 \ | ||||
|     --hash=sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c \ | ||||
|     --hash=sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f | ||||
|     # via | ||||
|     #   aiohttp | ||||
|     #   aioitertools | ||||
|     #   yarl | ||||
| urllib3==1.26.3 \ | ||||
|     --hash=sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80 \ | ||||
|     --hash=sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73 | ||||
|     # via botocore | ||||
| virtualenv-clone==0.5.4 \ | ||||
|     --hash=sha256:07e74418b7cc64f4fda987bf5bc71ebd59af27a7bc9e8a8ee9fd54b1f2390a27 \ | ||||
|     --hash=sha256:665e48dd54c84b98b71a657acb49104c54e7652bce9c1c4f6c6976ed4c827a29 \ | ||||
|     --hash=sha256:665e48dd54c84b98b71a657acb49104c54e7652bce9c1c4f6c6976ed4c827a29 | ||||
|     # via -r requirements/thumbor.in | ||||
| webcolors==1.11.1 \ | ||||
|     --hash=sha256:76f360636957d1c976db7466bc71dcb713bb95ac8911944dffc55c01cb516de6 \ | ||||
|     --hash=sha256:b8cd5d865a25c51ff1218f0c90d0c0781fc64312a49b746b320cf50de1648f6e \ | ||||
|     --hash=sha256:b8cd5d865a25c51ff1218f0c90d0c0781fc64312a49b746b320cf50de1648f6e | ||||
|     # via thumbor | ||||
| wheel==0.34.2 \ | ||||
|     --hash=sha256:8788e9155fe14f54164c1b9eb0a319d98ef02c160725587ad60f14ddc57b6f96 \ | ||||
|     --hash=sha256:df277cb51e61359aba502208d680f90c0493adec6f0e848af94948778aed386e \ | ||||
| wheel==0.36.2 \ | ||||
|     --hash=sha256:78b5b185f0e5763c26ca1e324373aadd49182ca90e825f7853f4b2509215dc0e \ | ||||
|     --hash=sha256:e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e | ||||
|     # via -r requirements/pip.in | ||||
| wrapt==1.12.1 \ | ||||
|     --hash=sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 \ | ||||
|     --hash=sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 | ||||
|     # via aiobotocore | ||||
| yarl==1.4.2 \ | ||||
|     --hash=sha256:0c2ab325d33f1b824734b3ef51d4d54a54e0e7a23d13b86974507602334c2cce \ | ||||
|     --hash=sha256:0ca2f395591bbd85ddd50a82eb1fde9c1066fafe888c5c7cc1d810cf03fd3cc6 \ | ||||
|     --hash=sha256:2098a4b4b9d75ee352807a95cdf5f10180db903bc5b7270715c6bbe2551f64ce \ | ||||
|     --hash=sha256:25e66e5e2007c7a39541ca13b559cd8ebc2ad8fe00ea94a2aad28a9b1e44e5ae \ | ||||
|     --hash=sha256:26d7c90cb04dee1665282a5d1a998defc1a9e012fdca0f33396f81508f49696d \ | ||||
|     --hash=sha256:308b98b0c8cd1dfef1a0311dc5e38ae8f9b58349226aa0533f15a16717ad702f \ | ||||
|     --hash=sha256:3ce3d4f7c6b69c4e4f0704b32eca8123b9c58ae91af740481aa57d7857b5e41b \ | ||||
|     --hash=sha256:58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b \ | ||||
|     --hash=sha256:5b10eb0e7f044cf0b035112446b26a3a2946bca9d7d7edb5e54a2ad2f6652abb \ | ||||
|     --hash=sha256:6faa19d3824c21bcbfdfce5171e193c8b4ddafdf0ac3f129ccf0cdfcb083e462 \ | ||||
|     --hash=sha256:944494be42fa630134bf907714d40207e646fd5a94423c90d5b514f7b0713fea \ | ||||
|     --hash=sha256:a161de7e50224e8e3de6e184707476b5a989037dcb24292b391a3d66ff158e70 \ | ||||
|     --hash=sha256:a4844ebb2be14768f7994f2017f70aca39d658a96c786211be5ddbe1c68794c1 \ | ||||
|     --hash=sha256:c2b509ac3d4b988ae8769901c66345425e361d518aecbe4acbfc2567e416626a \ | ||||
|     --hash=sha256:c9959d49a77b0e07559e579f38b2f3711c2b8716b8410b320bf9713013215a1b \ | ||||
|     --hash=sha256:d8cdee92bc930d8b09d8bd2043cedd544d9c8bd7436a77678dd602467a993080 \ | ||||
|     --hash=sha256:e15199cdb423316e15f108f51249e44eb156ae5dba232cb73be555324a1d49c2 \ | ||||
| yarl==1.6.3 \ | ||||
|     --hash=sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e \ | ||||
|     --hash=sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434 \ | ||||
|     --hash=sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366 \ | ||||
|     --hash=sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3 \ | ||||
|     --hash=sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec \ | ||||
|     --hash=sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959 \ | ||||
|     --hash=sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e \ | ||||
|     --hash=sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c \ | ||||
|     --hash=sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6 \ | ||||
|     --hash=sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a \ | ||||
|     --hash=sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6 \ | ||||
|     --hash=sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424 \ | ||||
|     --hash=sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e \ | ||||
|     --hash=sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f \ | ||||
|     --hash=sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50 \ | ||||
|     --hash=sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2 \ | ||||
|     --hash=sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc \ | ||||
|     --hash=sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4 \ | ||||
|     --hash=sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970 \ | ||||
|     --hash=sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10 \ | ||||
|     --hash=sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0 \ | ||||
|     --hash=sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406 \ | ||||
|     --hash=sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896 \ | ||||
|     --hash=sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643 \ | ||||
|     --hash=sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721 \ | ||||
|     --hash=sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478 \ | ||||
|     --hash=sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724 \ | ||||
|     --hash=sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e \ | ||||
|     --hash=sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8 \ | ||||
|     --hash=sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96 \ | ||||
|     --hash=sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25 \ | ||||
|     --hash=sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76 \ | ||||
|     --hash=sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2 \ | ||||
|     --hash=sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2 \ | ||||
|     --hash=sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c \ | ||||
|     --hash=sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a \ | ||||
|     --hash=sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71 | ||||
|     # via aiohttp | ||||
|  | ||||
| # The following packages are considered to be unsafe in a requirements file: | ||||
| pip==20.1.1 \ | ||||
|     --hash=sha256:27f8dc29387dd83249e06e681ce087e6061826582198a425085e0bf4c1cf3a55 \ | ||||
|     --hash=sha256:b27c4dedae8c41aa59108f2fa38bf78e0890e590545bc8ece7cdceb4ba60f6e4 \ | ||||
| pip==20.2.4 \ | ||||
|     --hash=sha256:51f1c7514530bd5c145d8f13ed936ad6b8bfcb8cf74e10403d0890bc986f0033 \ | ||||
|     --hash=sha256:85c99a857ea0fb0aedf23833d9be5c40cf253fe24443f0829c7b472e23c364a1 | ||||
|     # via -r requirements/pip.in | ||||
| setuptools==49.1.0 \ | ||||
|     --hash=sha256:60351853f8c093ef57224695ee989d5d074168f6b93dae000fa9996072adaba3 \ | ||||
|     --hash=sha256:daf2e1c215f805b0ddc3b4262886bb6667ae0d4563887a8374fb766adc47c324 \ | ||||
| setuptools==52.0.0 \ | ||||
|     --hash=sha256:0a6f1f18249f78cffdad842efadf1ed7b039fa3355d93f3890f56bd66a48cf27 \ | ||||
|     --hash=sha256:fb3a1ee622509550dbf1d419f241296169d7f09cb1eb5b1736f2f10965932b96 | ||||
|     # via -r requirements/pip.in | ||||
|   | ||||
| @@ -1,6 +1,9 @@ | ||||
| https://github.com/kkopachev/aws/archive/0d02528b47273e143be750ba237f71a076e8f251.zip#egg=tc_aws==6.3 | ||||
| https://github.com/kkopachev/aws/archive/b5058e6b9fec7354629acc6d5df423e0310bb0cd.zip#egg=tc_aws==6.3 | ||||
| thumbor>=7.dev | ||||
|  | ||||
| # Not required by Thumbor, but recommended | ||||
| pycurl | ||||
|  | ||||
| # Required for just importing settings from our main django app. | ||||
| django-auth-ldap | ||||
| Django==2.2.* | ||||
|   | ||||
| @@ -7,146 +7,205 @@ | ||||
| # | ||||
| # For details, see requirements/README.md . | ||||
| # | ||||
| aiobotocore==1.0.7 \ | ||||
|     --hash=sha256:9589d812714a5b78f0b8249916c17374e507dd7edfd5038a85cd6f25028506f3 \ | ||||
|     --hash=sha256:d3183a22a376a97ed0a739854408fcf4ee9f24a629b38f84451b7e2111622ae3 \ | ||||
| aiobotocore==1.2.0 \ | ||||
|     --hash=sha256:852b75ba7b7f50c89aba4693545d0c5450024886c55cd6ecefb736d474f9ea53 | ||||
|     # via tc-aws | ||||
| aiohttp==3.6.2 \ | ||||
|     --hash=sha256:1e984191d1ec186881ffaed4581092ba04f7c61582a177b187d3a2f07ed9719e \ | ||||
|     --hash=sha256:259ab809ff0727d0e834ac5e8a283dc5e3e0ecc30c4d80b3cd17a4139ce1f326 \ | ||||
|     --hash=sha256:2f4d1a4fdce595c947162333353d4a44952a724fba9ca3205a3df99a33d1307a \ | ||||
|     --hash=sha256:32e5f3b7e511aa850829fbe5aa32eb455e5534eaa4b1ce93231d00e2f76e5654 \ | ||||
|     --hash=sha256:344c780466b73095a72c616fac5ea9c4665add7fc129f285fbdbca3cccf4612a \ | ||||
|     --hash=sha256:460bd4237d2dbecc3b5ed57e122992f60188afe46e7319116da5eb8a9dfedba4 \ | ||||
|     --hash=sha256:4c6efd824d44ae697814a2a85604d8e992b875462c6655da161ff18fd4f29f17 \ | ||||
|     --hash=sha256:50aaad128e6ac62e7bf7bd1f0c0a24bc968a0c0590a726d5a955af193544bcec \ | ||||
|     --hash=sha256:6206a135d072f88da3e71cc501c59d5abffa9d0bb43269a6dcd28d66bfafdbdd \ | ||||
|     --hash=sha256:65f31b622af739a802ca6fd1a3076fd0ae523f8485c52924a89561ba10c49b48 \ | ||||
|     --hash=sha256:ae55bac364c405caa23a4f2d6cfecc6a0daada500274ffca4a9230e7129eac59 \ | ||||
|     --hash=sha256:b778ce0c909a2653741cb4b1ac7015b5c130ab9c897611df43ae6a58523cb965 \ | ||||
| aiohttp==3.7.3 \ | ||||
|     --hash=sha256:0b795072bb1bf87b8620120a6373a3c61bfcb8da7e5c2377f4bb23ff4f0b62c9 \ | ||||
|     --hash=sha256:0d438c8ca703b1b714e82ed5b7a4412c82577040dadff479c08405e2a715564f \ | ||||
|     --hash=sha256:16a3cb5df5c56f696234ea9e65e227d1ebe9c18aa774d36ff42f532139066a5f \ | ||||
|     --hash=sha256:1edfd82a98c5161497bbb111b2b70c0813102ad7e0aa81cbeb34e64c93863005 \ | ||||
|     --hash=sha256:2406dc1dda01c7f6060ab586e4601f18affb7a6b965c50a8c90ff07569cf782a \ | ||||
|     --hash=sha256:2858b2504c8697beb9357be01dc47ef86438cc1cb36ecb6991796d19475faa3e \ | ||||
|     --hash=sha256:2a7b7640167ab536c3cb90cfc3977c7094f1c5890d7eeede8b273c175c3910fd \ | ||||
|     --hash=sha256:3228b7a51e3ed533f5472f54f70fd0b0a64c48dc1649a0f0e809bec312934d7a \ | ||||
|     --hash=sha256:328b552513d4f95b0a2eea4c8573e112866107227661834652a8984766aa7656 \ | ||||
|     --hash=sha256:39f4b0a6ae22a1c567cb0630c30dd082481f95c13ca528dc501a7766b9c718c0 \ | ||||
|     --hash=sha256:3b0036c978cbcc4a4512278e98e3e6d9e6b834dc973206162eddf98b586ef1c6 \ | ||||
|     --hash=sha256:3ea8c252d8df5e9166bcf3d9edced2af132f4ead8ac422eac723c5781063709a \ | ||||
|     --hash=sha256:41608c0acbe0899c852281978492f9ce2c6fbfaf60aff0cefc54a7c4516b822c \ | ||||
|     --hash=sha256:59d11674964b74a81b149d4ceaff2b674b3b0e4d0f10f0be1533e49c4a28408b \ | ||||
|     --hash=sha256:5e479df4b2d0f8f02133b7e4430098699450e1b2a826438af6bec9a400530957 \ | ||||
|     --hash=sha256:684850fb1e3e55c9220aad007f8386d8e3e477c4ec9211ae54d968ecdca8c6f9 \ | ||||
|     --hash=sha256:6ccc43d68b81c424e46192a778f97da94ee0630337c9bbe5b2ecc9b0c1c59001 \ | ||||
|     --hash=sha256:6d42debaf55450643146fabe4b6817bb2a55b23698b0434107e892a43117285e \ | ||||
|     --hash=sha256:710376bf67d8ff4500a31d0c207b8941ff4fba5de6890a701d71680474fe2a60 \ | ||||
|     --hash=sha256:756ae7efddd68d4ea7d89c636b703e14a0c686688d42f588b90778a3c2fc0564 \ | ||||
|     --hash=sha256:77149002d9386fae303a4a162e6bce75cc2161347ad2ba06c2f0182561875d45 \ | ||||
|     --hash=sha256:78e2f18a82b88cbc37d22365cf8d2b879a492faedb3f2975adb4ed8dfe994d3a \ | ||||
|     --hash=sha256:7d9b42127a6c0bdcc25c3dcf252bb3ddc70454fac593b1b6933ae091396deb13 \ | ||||
|     --hash=sha256:8389d6044ee4e2037dca83e3f6994738550f6ee8cfb746762283fad9b932868f \ | ||||
|     --hash=sha256:9c1a81af067e72261c9cbe33ea792893e83bc6aa987bfbd6fdc1e5e7b22777c4 \ | ||||
|     --hash=sha256:c1e0920909d916d3375c7a1fdb0b1c78e46170e8bb42792312b6eb6676b2f87f \ | ||||
|     --hash=sha256:c68fdf21c6f3573ae19c7ee65f9ff185649a060c9a06535e9c3a0ee0bbac9235 \ | ||||
|     --hash=sha256:c733ef3bdcfe52a1a75564389bad4064352274036e7e234730526d155f04d914 \ | ||||
|     --hash=sha256:c9c58b0b84055d8bc27b7df5a9d141df4ee6ff59821f922dd73155861282f6a3 \ | ||||
|     --hash=sha256:d03abec50df423b026a5aa09656bd9d37f1e6a49271f123f31f9b8aed5dc3ea3 \ | ||||
|     --hash=sha256:d2cfac21e31e841d60dc28c0ec7d4ec47a35c608cb8906435d47ef83ffb22150 \ | ||||
|     --hash=sha256:dcc119db14757b0c7bce64042158307b9b1c76471e655751a61b57f5a0e4d78e \ | ||||
|     --hash=sha256:df3a7b258cc230a65245167a202dd07320a5af05f3d41da1488ba0fa05bc9347 \ | ||||
|     --hash=sha256:df48a623c58180874d7407b4d9ec06a19b84ed47f60a3884345b1a5099c1818b \ | ||||
|     --hash=sha256:e1b95972a0ae3f248a899cdbac92ba2e01d731225f566569311043ce2226f5e7 \ | ||||
|     --hash=sha256:f326b3c1bbfda5b9308252ee0dcb30b612ee92b0e105d4abec70335fab5b1245 \ | ||||
|     --hash=sha256:f411cb22115cb15452d099fec0ee636b06cf81bfb40ed9c02d30c8dc2bc2e3d1 | ||||
|     # via aiobotocore | ||||
| aioitertools==0.7.0 \ | ||||
|     --hash=sha256:341cb05a0903177ef1b73d4cc12c92aee18e81c364e0138f4efc7ec3c47b8177 \ | ||||
|     --hash=sha256:e931a2f0dcabd4a8446b5cc2fc71b8bb14716e6adf37728a70869213f1f741cd \ | ||||
| aioitertools==0.7.1 \ | ||||
|     --hash=sha256:54a56c7cf3b5290d1cb5e8974353c9f52c677612b5d69a859369a020c53414a3 \ | ||||
|     --hash=sha256:8972308474c41ed5e0636819f948ebff32f2318e70f7e7d23cd208c4357cc773 | ||||
|     # via aiobotocore | ||||
| async-timeout==3.0.1 \ | ||||
|     --hash=sha256:0c3c816a028d47f659d6ff5c745cb2acf1f966da1fe5c19c77a70282b25f4c5f \ | ||||
|     --hash=sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3 \ | ||||
|     --hash=sha256:4291ca197d287d274d0b6cb5d6f8f8f82d434ed288f962539ff18cc9012f9ea3 | ||||
|     # via aiohttp | ||||
| attrs==19.3.0 \ | ||||
|     --hash=sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c \ | ||||
|     --hash=sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72 \ | ||||
| attrs==20.3.0 \ | ||||
|     --hash=sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6 \ | ||||
|     --hash=sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700 | ||||
|     # via aiohttp | ||||
| botocore==1.15.32 \ | ||||
|     --hash=sha256:3ea89601ee452b65084005278bd832be854cfde5166685dcb14b6c8f19d3fc6d \ | ||||
|     --hash=sha256:a963af564d94107787ff3d2c534e8b7aed7f12e014cdd609f8fcb17bf9d9b19a \ | ||||
| botocore==1.19.52 \ | ||||
|     --hash=sha256:d8f50e4162012ccfab64c2db4fcc99313d46d57789072251bab56013d66546e2 \ | ||||
|     --hash=sha256:dc5ec23deadbe9327d3c81d03fddf80805c549059baabd80dea605941fe6a221 | ||||
|     # via aiobotocore | ||||
| chardet==3.0.4 \ | ||||
|     --hash=sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae \ | ||||
|     --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 \ | ||||
|     --hash=sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691 | ||||
|     # via aiohttp | ||||
| colorful==0.5.4 \ | ||||
|     --hash=sha256:86848ad4e2eda60cd2519d8698945d22f6f6551e23e95f3f14dfbb60997807ea \ | ||||
|     --hash=sha256:8d264b52a39aae4c0ba3e2a46afbaec81b0559a99be0d2cfe2aba4cf94531348 \ | ||||
|     --hash=sha256:8d264b52a39aae4c0ba3e2a46afbaec81b0559a99be0d2cfe2aba4cf94531348 | ||||
|     # via thumbor | ||||
| derpconf==0.8.3 \ | ||||
|     --hash=sha256:1bb152d8a1cf5c2a6d629bf29acd4af0c00811339642fc0a56172b0a83b31a15 \ | ||||
|     --hash=sha256:1bb152d8a1cf5c2a6d629bf29acd4af0c00811339642fc0a56172b0a83b31a15 | ||||
|     # via thumbor | ||||
| django-auth-ldap==2.2.0 \ | ||||
|     --hash=sha256:0ed2d88d81c39be915a9ab53b97ec0a33a3d16055518ab4c9bcffe8236d40370 \ | ||||
|     --hash=sha256:11af1773b08613339d2c3a0cec1308a4d563518f17b1719c3759994d0b4d04bf \ | ||||
|     --hash=sha256:11af1773b08613339d2c3a0cec1308a4d563518f17b1719c3759994d0b4d04bf | ||||
|     # via -r requirements/thumbor.in | ||||
| django==2.2.14 \ | ||||
|     --hash=sha256:edf0ecf6657713b0435b6757e6069466925cae70d634a3283c96b80c01e06191 \ | ||||
|     --hash=sha256:f2250bd35d0f6c23e930c544629934144e5dd39a4c06092e1050c731c1712ba8 \ | ||||
|     # via -r requirements/thumbor.in, django-auth-ldap | ||||
| docutils==0.15.2 \ | ||||
|     --hash=sha256:6c4f696463b79f1fb8ba0c594b63840ebd41f059e92b31957c46b74a4599b6d0 \ | ||||
|     --hash=sha256:9e4d7ecfc600058e07ba661411a2b7de2fd0fafa17d1a7f7361cd47b1175c827 \ | ||||
|     --hash=sha256:a2aeea129088da402665e92e0b25b04b073c04b2dce4ab65caaa38b7ce2e1a99 \ | ||||
|     # via botocore | ||||
| django==2.2.17 \ | ||||
|     --hash=sha256:558cb27930defd9a6042133258caf797b2d1dee233959f537e3dc475cb49bd7c \ | ||||
|     --hash=sha256:cf5370a4d7765a9dd6d42a7b96b53c74f9446cd38209211304b210fe0404b861 | ||||
|     # via | ||||
|     #   -r requirements/thumbor.in | ||||
|     #   django-auth-ldap | ||||
| idna-ssl==1.1.0 \ | ||||
|     --hash=sha256:a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c \ | ||||
|     --hash=sha256:a933e3bb13da54383f9e8f35dc4f9cb9eb9b3b78c6b36f311254d6d0d92c6c7c | ||||
|     # via aiohttp | ||||
| idna==2.10 \ | ||||
|     --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ | ||||
|     --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 \ | ||||
|     # via idna-ssl, yarl | ||||
| idna==3.1 \ | ||||
|     --hash=sha256:5205d03e7bcbb919cc9c19885f9920d622ca52448306f2377daede5cf3faac16 \ | ||||
|     --hash=sha256:c5b02147e01ea9920e6b0a3f1f7bb833612d507592c837a6c49552768f4054e1 | ||||
|     # via | ||||
|     #   idna-ssl | ||||
|     #   yarl | ||||
| jmespath==0.10.0 \ | ||||
|     --hash=sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9 \ | ||||
|     --hash=sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f \ | ||||
|     --hash=sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f | ||||
|     # via botocore | ||||
| libthumbor==2.0.1 \ | ||||
|     --hash=sha256:3c4e1a59c019d22f868d225315c06f97fad30fb5e78112d6a230b978e7d24e38 \ | ||||
|     --hash=sha256:ed4fe5f27f8f90e7285b7e6dce99c1b67d43a140bf370e989080b43d80ce25f0 \ | ||||
|     --hash=sha256:ed4fe5f27f8f90e7285b7e6dce99c1b67d43a140bf370e989080b43d80ce25f0 | ||||
|     # via thumbor | ||||
| multidict==4.7.6 \ | ||||
|     --hash=sha256:1ece5a3369835c20ed57adadc663400b5525904e53bae59ec854a5d36b39b21a \ | ||||
|     --hash=sha256:275ca32383bc5d1894b6975bb4ca6a7ff16ab76fa622967625baeebcf8079000 \ | ||||
|     --hash=sha256:3750f2205b800aac4bb03b5ae48025a64e474d2c6cc79547988ba1d4122a09e2 \ | ||||
|     --hash=sha256:4538273208e7294b2659b1602490f4ed3ab1c8cf9dbdd817e0e9db8e64be2507 \ | ||||
|     --hash=sha256:5141c13374e6b25fe6bf092052ab55c0c03d21bd66c94a0e3ae371d3e4d865a5 \ | ||||
|     --hash=sha256:51a4d210404ac61d32dada00a50ea7ba412e6ea945bbe992e4d7a595276d2ec7 \ | ||||
|     --hash=sha256:5cf311a0f5ef80fe73e4f4c0f0998ec08f954a6ec72b746f3c179e37de1d210d \ | ||||
|     --hash=sha256:6513728873f4326999429a8b00fc7ceddb2509b01d5fd3f3be7881a257b8d463 \ | ||||
|     --hash=sha256:7388d2ef3c55a8ba80da62ecfafa06a1c097c18032a501ffd4cabbc52d7f2b19 \ | ||||
|     --hash=sha256:9456e90649005ad40558f4cf51dbb842e32807df75146c6d940b6f5abb4a78f3 \ | ||||
|     --hash=sha256:c026fe9a05130e44157b98fea3ab12969e5b60691a276150db9eda71710cd10b \ | ||||
|     --hash=sha256:d14842362ed4cf63751648e7672f7174c9818459d169231d03c56e84daf90b7c \ | ||||
|     --hash=sha256:e0d072ae0f2a179c375f67e3da300b47e1a83293c554450b29c900e50afaae87 \ | ||||
|     --hash=sha256:f07acae137b71af3bb548bd8da720956a3bc9f9a0b87733e0899226a2317aeb7 \ | ||||
|     --hash=sha256:fbb77a75e529021e7c4a8d4e823d88ef4d23674a202be4f5addffc72cbb91430 \ | ||||
|     --hash=sha256:fcfbb44c59af3f8ea984de67ec7c306f618a3ec771c2843804069917a8f2e255 \ | ||||
|     --hash=sha256:feed85993dbdb1dbc29102f50bca65bdc68f2c0c8d352468c25b54874f23c39d \ | ||||
|     # via aiohttp, yarl | ||||
| numpy==1.19.0 \ | ||||
|     --hash=sha256:13af0184177469192d80db9bd02619f6fa8b922f9f327e077d6f2a6acb1ce1c0 \ | ||||
|     --hash=sha256:26a45798ca2a4e168d00de75d4a524abf5907949231512f372b217ede3429e98 \ | ||||
|     --hash=sha256:26f509450db547e4dfa3ec739419b31edad646d21fb8d0ed0734188b35ff6b27 \ | ||||
|     --hash=sha256:30a59fb41bb6b8c465ab50d60a1b298d1cd7b85274e71f38af5a75d6c475d2d2 \ | ||||
|     --hash=sha256:33c623ef9ca5e19e05991f127c1be5aeb1ab5cdf30cb1c5cf3960752e58b599b \ | ||||
|     --hash=sha256:356f96c9fbec59974a592452ab6a036cd6f180822a60b529a975c9467fcd5f23 \ | ||||
|     --hash=sha256:3c40c827d36c6d1c3cf413694d7dc843d50997ebffbc7c87d888a203ed6403a7 \ | ||||
|     --hash=sha256:4d054f013a1983551254e2379385e359884e5af105e3efe00418977d02f634a7 \ | ||||
|     --hash=sha256:63d971bb211ad3ca37b2adecdd5365f40f3b741a455beecba70fd0dde8b2a4cb \ | ||||
|     --hash=sha256:658624a11f6e1c252b2cd170d94bf28c8f9410acab9f2fd4369e11e1cd4e1aaf \ | ||||
|     --hash=sha256:76766cc80d6128750075378d3bb7812cf146415bd29b588616f72c943c00d598 \ | ||||
|     --hash=sha256:7b57f26e5e6ee2f14f960db46bd58ffdca25ca06dd997729b1b179fddd35f5a3 \ | ||||
|     --hash=sha256:7b852817800eb02e109ae4a9cef2beda8dd50d98b76b6cfb7b5c0099d27b52d4 \ | ||||
|     --hash=sha256:8cde829f14bd38f6da7b2954be0f2837043e8b8d7a9110ec5e318ae6bf706610 \ | ||||
|     --hash=sha256:a2e3a39f43f0ce95204beb8fe0831199542ccab1e0c6e486a0b4947256215632 \ | ||||
|     --hash=sha256:a86c962e211f37edd61d6e11bb4df7eddc4a519a38a856e20a6498c319efa6b0 \ | ||||
|     --hash=sha256:a8705c5073fe3fcc297fb8e0b31aa794e05af6a329e81b7ca4ffecab7f2b95ef \ | ||||
|     --hash=sha256:b6aaeadf1e4866ca0fdf7bb4eed25e521ae21a7947c59f78154b24fc7abbe1dd \ | ||||
|     --hash=sha256:be62aeff8f2f054eff7725f502f6228298891fd648dc2630e03e44bf63e8cee0 \ | ||||
|     --hash=sha256:c2edbb783c841e36ca0fa159f0ae97a88ce8137fb3a6cd82eae77349ba4b607b \ | ||||
|     --hash=sha256:cbe326f6d364375a8e5a8ccb7e9cd73f4b2f6dc3b2ed205633a0db8243e2a96a \ | ||||
|     --hash=sha256:d34fbb98ad0d6b563b95de852a284074514331e6b9da0a9fc894fb1cdae7a79e \ | ||||
|     --hash=sha256:d97a86937cf9970453c3b62abb55a6475f173347b4cde7f8dcdb48c8e1b9952d \ | ||||
|     --hash=sha256:dd53d7c4a69e766e4900f29db5872f5824a06827d594427cf1a4aa542818b796 \ | ||||
|     --hash=sha256:df1889701e2dfd8ba4dc9b1a010f0a60950077fb5242bb92c8b5c7f1a6f2668a \ | ||||
|     --hash=sha256:fa1fe75b4a9e18b66ae7f0b122543c42debcf800aaafa0212aaff3ad273c2596 \ | ||||
| multidict==5.1.0 \ | ||||
|     --hash=sha256:018132dbd8688c7a69ad89c4a3f39ea2f9f33302ebe567a879da8f4ca73f0d0a \ | ||||
|     --hash=sha256:051012ccee979b2b06be928a6150d237aec75dd6bf2d1eeeb190baf2b05abc93 \ | ||||
|     --hash=sha256:05c20b68e512166fddba59a918773ba002fdd77800cad9f55b59790030bab632 \ | ||||
|     --hash=sha256:07b42215124aedecc6083f1ce6b7e5ec5b50047afa701f3442054373a6deb656 \ | ||||
|     --hash=sha256:0e3c84e6c67eba89c2dbcee08504ba8644ab4284863452450520dad8f1e89b79 \ | ||||
|     --hash=sha256:0e929169f9c090dae0646a011c8b058e5e5fb391466016b39d21745b48817fd7 \ | ||||
|     --hash=sha256:1ab820665e67373de5802acae069a6a05567ae234ddb129f31d290fc3d1aa56d \ | ||||
|     --hash=sha256:25b4e5f22d3a37ddf3effc0710ba692cfc792c2b9edfb9c05aefe823256e84d5 \ | ||||
|     --hash=sha256:2e68965192c4ea61fff1b81c14ff712fc7dc15d2bd120602e4a3494ea6584224 \ | ||||
|     --hash=sha256:2f1a132f1c88724674271d636e6b7351477c27722f2ed789f719f9e3545a3d26 \ | ||||
|     --hash=sha256:37e5438e1c78931df5d3c0c78ae049092877e5e9c02dd1ff5abb9cf27a5914ea \ | ||||
|     --hash=sha256:3a041b76d13706b7fff23b9fc83117c7b8fe8d5fe9e6be45eee72b9baa75f348 \ | ||||
|     --hash=sha256:3a4f32116f8f72ecf2a29dabfb27b23ab7cdc0ba807e8459e59a93a9be9506f6 \ | ||||
|     --hash=sha256:46c73e09ad374a6d876c599f2328161bcd95e280f84d2060cf57991dec5cfe76 \ | ||||
|     --hash=sha256:46dd362c2f045095c920162e9307de5ffd0a1bfbba0a6e990b344366f55a30c1 \ | ||||
|     --hash=sha256:4b186eb7d6ae7c06eb4392411189469e6a820da81447f46c0072a41c748ab73f \ | ||||
|     --hash=sha256:54fd1e83a184e19c598d5e70ba508196fd0bbdd676ce159feb412a4a6664f952 \ | ||||
|     --hash=sha256:585fd452dd7782130d112f7ddf3473ffdd521414674c33876187e101b588738a \ | ||||
|     --hash=sha256:5cf3443199b83ed9e955f511b5b241fd3ae004e3cb81c58ec10f4fe47c7dce37 \ | ||||
|     --hash=sha256:6a4d5ce640e37b0efcc8441caeea8f43a06addace2335bd11151bc02d2ee31f9 \ | ||||
|     --hash=sha256:7df80d07818b385f3129180369079bd6934cf70469f99daaebfac89dca288359 \ | ||||
|     --hash=sha256:806068d4f86cb06af37cd65821554f98240a19ce646d3cd24e1c33587f313eb8 \ | ||||
|     --hash=sha256:830f57206cc96ed0ccf68304141fec9481a096c4d2e2831f311bde1c404401da \ | ||||
|     --hash=sha256:929006d3c2d923788ba153ad0de8ed2e5ed39fdbe8e7be21e2f22ed06c6783d3 \ | ||||
|     --hash=sha256:9436dc58c123f07b230383083855593550c4d301d2532045a17ccf6eca505f6d \ | ||||
|     --hash=sha256:9dd6e9b1a913d096ac95d0399bd737e00f2af1e1594a787e00f7975778c8b2bf \ | ||||
|     --hash=sha256:ace010325c787c378afd7f7c1ac66b26313b3344628652eacd149bdd23c68841 \ | ||||
|     --hash=sha256:b47a43177a5e65b771b80db71e7be76c0ba23cc8aa73eeeb089ed5219cdbe27d \ | ||||
|     --hash=sha256:b797515be8743b771aa868f83563f789bbd4b236659ba52243b735d80b29ed93 \ | ||||
|     --hash=sha256:b7993704f1a4b204e71debe6095150d43b2ee6150fa4f44d6d966ec356a8d61f \ | ||||
|     --hash=sha256:d5c65bdf4484872c4af3150aeebe101ba560dcfb34488d9a8ff8dbcd21079647 \ | ||||
|     --hash=sha256:d81eddcb12d608cc08081fa88d046c78afb1bf8107e6feab5d43503fea74a635 \ | ||||
|     --hash=sha256:dc862056f76443a0db4509116c5cd480fe1b6a2d45512a653f9a855cc0517456 \ | ||||
|     --hash=sha256:ecc771ab628ea281517e24fd2c52e8f31c41e66652d07599ad8818abaad38cda \ | ||||
|     --hash=sha256:f200755768dc19c6f4e2b672421e0ebb3dd54c38d5a4f262b872d8cfcc9e93b5 \ | ||||
|     --hash=sha256:f21756997ad8ef815d8ef3d34edd98804ab5ea337feedcd62fb52d22bf531281 \ | ||||
|     --hash=sha256:fc13a9524bc18b6fb6e0dbec3533ba0496bbed167c56d0aabefd965584557d80 | ||||
|     # via | ||||
|     #   aiohttp | ||||
|     #   yarl | ||||
| numpy==1.19.5 \ | ||||
|     --hash=sha256:012426a41bc9ab63bb158635aecccc7610e3eff5d31d1eb43bc099debc979d94 \ | ||||
|     --hash=sha256:06fab248a088e439402141ea04f0fffb203723148f6ee791e9c75b3e9e82f080 \ | ||||
|     --hash=sha256:0eef32ca3132a48e43f6a0f5a82cb508f22ce5a3d6f67a8329c81c8e226d3f6e \ | ||||
|     --hash=sha256:1ded4fce9cfaaf24e7a0ab51b7a87be9038ea1ace7f34b841fe3b6894c721d1c \ | ||||
|     --hash=sha256:2e55195bc1c6b705bfd8ad6f288b38b11b1af32f3c8289d6c50d47f950c12e76 \ | ||||
|     --hash=sha256:2ea52bd92ab9f768cc64a4c3ef8f4b2580a17af0a5436f6126b08efbd1838371 \ | ||||
|     --hash=sha256:36674959eed6957e61f11c912f71e78857a8d0604171dfd9ce9ad5cbf41c511c \ | ||||
|     --hash=sha256:384ec0463d1c2671170901994aeb6dce126de0a95ccc3976c43b0038a37329c2 \ | ||||
|     --hash=sha256:39b70c19ec771805081578cc936bbe95336798b7edf4732ed102e7a43ec5c07a \ | ||||
|     --hash=sha256:400580cbd3cff6ffa6293df2278c75aef2d58d8d93d3c5614cd67981dae68ceb \ | ||||
|     --hash=sha256:43d4c81d5ffdff6bae58d66a3cd7f54a7acd9a0e7b18d97abb255defc09e3140 \ | ||||
|     --hash=sha256:50a4a0ad0111cc1b71fa32dedd05fa239f7fb5a43a40663269bb5dc7877cfd28 \ | ||||
|     --hash=sha256:603aa0706be710eea8884af807b1b3bc9fb2e49b9f4da439e76000f3b3c6ff0f \ | ||||
|     --hash=sha256:6149a185cece5ee78d1d196938b2a8f9d09f5a5ebfbba66969302a778d5ddd1d \ | ||||
|     --hash=sha256:759e4095edc3c1b3ac031f34d9459fa781777a93ccc633a472a5468587a190ff \ | ||||
|     --hash=sha256:7fb43004bce0ca31d8f13a6eb5e943fa73371381e53f7074ed21a4cb786c32f8 \ | ||||
|     --hash=sha256:811daee36a58dc79cf3d8bdd4a490e4277d0e4b7d103a001a4e73ddb48e7e6aa \ | ||||
|     --hash=sha256:8b5e972b43c8fc27d56550b4120fe6257fdc15f9301914380b27f74856299fea \ | ||||
|     --hash=sha256:99abf4f353c3d1a0c7a5f27699482c987cf663b1eac20db59b8c7b061eabd7fc \ | ||||
|     --hash=sha256:a0d53e51a6cb6f0d9082decb7a4cb6dfb33055308c4c44f53103c073f649af73 \ | ||||
|     --hash=sha256:a12ff4c8ddfee61f90a1633a4c4afd3f7bcb32b11c52026c92a12e1325922d0d \ | ||||
|     --hash=sha256:a4646724fba402aa7504cd48b4b50e783296b5e10a524c7a6da62e4a8ac9698d \ | ||||
|     --hash=sha256:a76f502430dd98d7546e1ea2250a7360c065a5fdea52b2dffe8ae7180909b6f4 \ | ||||
|     --hash=sha256:a9d17f2be3b427fbb2bce61e596cf555d6f8a56c222bd2ca148baeeb5e5c783c \ | ||||
|     --hash=sha256:ab83f24d5c52d60dbc8cd0528759532736b56db58adaa7b5f1f76ad551416a1e \ | ||||
|     --hash=sha256:aeb9ed923be74e659984e321f609b9ba54a48354bfd168d21a2b072ed1e833ea \ | ||||
|     --hash=sha256:c843b3f50d1ab7361ca4f0b3639bf691569493a56808a0b0c54a051d260b7dbd \ | ||||
|     --hash=sha256:cae865b1cae1ec2663d8ea56ef6ff185bad091a5e33ebbadd98de2cfa3fa668f \ | ||||
|     --hash=sha256:cc6bd4fd593cb261332568485e20a0712883cf631f6f5e8e86a52caa8b2b50ff \ | ||||
|     --hash=sha256:cf2402002d3d9f91c8b01e66fbb436a4ed01c6498fffed0e4c7566da1d40ee1e \ | ||||
|     --hash=sha256:d051ec1c64b85ecc69531e1137bb9751c6830772ee5c1c426dbcfe98ef5788d7 \ | ||||
|     --hash=sha256:d6631f2e867676b13026e2846180e2c13c1e11289d67da08d71cacb2cd93d4aa \ | ||||
|     --hash=sha256:dbd18bcf4889b720ba13a27ec2f2aac1981bd41203b3a3b27ba7a33f88ae4827 \ | ||||
|     --hash=sha256:df609c82f18c5b9f6cb97271f03315ff0dbe481a2a02e56aeb1b1a985ce38e60 | ||||
|     # via opencv-python-headless | ||||
| opencv-python-headless==4.3.0.36 \ | ||||
|     --hash=sha256:065c6fc2efc61ebc3dd7de7774895e200b2c050d4e8b499cee717a9db526880e \ | ||||
|     --hash=sha256:103c705540603f349e714edff93606c66d0e0a6a36d22aca8f4c2a3f8f25823c \ | ||||
|     --hash=sha256:1b1dcdd4ccf4b71767add0b674f876aad666395471ccdce5455209329f036109 \ | ||||
|     --hash=sha256:271d7de7655f8d3a55100565b486d9f63da7465722e7a7ab834c853a2ee67b6e \ | ||||
|     --hash=sha256:2f71a14ccd109948f9c4c1761794e3512e7eff1e3b893619de6443467cec9052 \ | ||||
|     --hash=sha256:325fc39fcee0d07df07b409cefe3868086ed60f7286798c32765dce393c6951d \ | ||||
|     --hash=sha256:3cf602a40750cbab284cb9d6f508d9110a3c79d4e18a261cb09957e2ca6f07d6 \ | ||||
|     --hash=sha256:3d8b3e2b2dc5796cc1f34a6bd5e43d646818843a14554be55bb9e92dcb78ada0 \ | ||||
|     --hash=sha256:4b303ae6b207ed79071e2ab930a0f39d7e97bc176b730d552accdf7d0ea8ef5a \ | ||||
|     --hash=sha256:5fabfc789d6b8cffbb01f4e224d3583cce12666bbebafa15e8bca69111a21153 \ | ||||
|     --hash=sha256:653459f61b44f1d7f20ce36c6112925b351e2abadb4be6f3007440b237bafffd \ | ||||
|     --hash=sha256:8c496eb24af0ff16844f5b12fcbb28469151822fe19ece7b6cf66279c451981d \ | ||||
|     --hash=sha256:9b0e9fa11f203c39a51044471f01d5db0dd493b13e6da209cc8945b12e6eef9e \ | ||||
|     --hash=sha256:baaeef03220c48430768503af990b3ca5582a3c1a1bf03519db122e2ddcd78a3 \ | ||||
|     --hash=sha256:d269133ebfe8c99b7abe096358c0644212103b4806ae6e8ef5149d4e0d5edb36 \ | ||||
|     --hash=sha256:e204a75a00bee4c10875a94ccc8e102d9ab7e1259cc0f4ddf64cee777da6bbc9 \ | ||||
|     --hash=sha256:e217bbbbb7dc06d77c799edac196f2f706601f4f6a8b2d44ae25eda4cda23e08 \ | ||||
|     --hash=sha256:f5a29918dd8d8c3f4d7710a324fd3c733a91ad269c4863b32b920cb90801e22b \ | ||||
|     --hash=sha256:fe28cfc3b6285f7e92905c53d42426f4f03e7af134712061329333e8fb8ea3d6 \ | ||||
| opencv-python-headless==4.5.1.48 \ | ||||
|     --hash=sha256:0e02809db2968e54f3c23340be6ff9a1428b3f03f5dca7cd5aceda66e319ce86 \ | ||||
|     --hash=sha256:1f7c14f5d4e5af4dc4669fc6b4a983b36072a934c439ac11266b930496da8255 \ | ||||
|     --hash=sha256:243aea91cc1e36a47c46da4cc408071af39444a48df1fe1539ea8d7990500fd2 \ | ||||
|     --hash=sha256:2560dcf3c1158226b066302f777bfe0f65282410b8d90871dd872306c967d1f1 \ | ||||
|     --hash=sha256:2e6a9a88617a0ef7219cff24ba78a58416670a77e6ac63975f9009af3319ab63 \ | ||||
|     --hash=sha256:372149d007e20bf556b7687591d22b58b56b3c225f492da051d81587e5dc7411 \ | ||||
|     --hash=sha256:522f12dd994e064a30562adfd63b9439099bd7c80819f5261c37ebe593283c9e \ | ||||
|     --hash=sha256:526b9e19cf6300f0891d8f427eac1048091912332bb781eb4957a4994bfbe608 \ | ||||
|     --hash=sha256:5f0c7d34fa9953706c2a1a6d2760a91dc5a68cab3df16af61609894c6c8586f1 \ | ||||
|     --hash=sha256:657cdd9fbbbbb7e898ae3d9b0649b367d0e440d429c714104d069c5612d578bb \ | ||||
|     --hash=sha256:65c9ea57be5ebcaed009b3fee14fe59f3b6aa1e573fe08c5039ff057ad593c53 \ | ||||
|     --hash=sha256:777fb596e04331f73ef5b0c1faa4d33348f29ca58216d9286355c16f5489c939 \ | ||||
|     --hash=sha256:7c75680ffdf32d7044415a215d1fc60dbec14a7f2f0b59a85f0f74ef5efcb6ad \ | ||||
|     --hash=sha256:924aa4c34ead0b817309f42291dc526b2a7755476afe3009d1e275fc3090d92d \ | ||||
|     --hash=sha256:96d1da6ad061d8f3509668d398d14dd8265e529d6407f87eb26e7f4ddf043cc0 \ | ||||
|     --hash=sha256:9aa04a491c534531029fbac61da961fae0bf4abb1786eed9c91befde4ca7bd81 \ | ||||
|     --hash=sha256:a322d4df14c3a5f19701a023b3da91e9b8af8653b0d2ee0c50b0b341212f7343 \ | ||||
|     --hash=sha256:aa562c520f46283423ba8fac29099458e42deab697a9abd0491622e421c5c454 \ | ||||
|     --hash=sha256:ba2f0bd46e9534f29969e39f7895cbea9764173102b0c04b7818b8a9910d66e4 \ | ||||
|     --hash=sha256:d16825755e7b5a6d8737f93e116670229e1510199e0af9213004e187ae0dbcc5 \ | ||||
|     --hash=sha256:e3027e0d1b71b68b5cfe1ea9c627e323dff71112c854ba19805258d8fc6c630e \ | ||||
|     --hash=sha256:f2011ecb3980bbed283d17d43e0f1221bac88c0cac1a6fb59a056544de2df2f7 \ | ||||
|     --hash=sha256:f5e40a06116460ef2fd2d1c24be3b65f8bfb5fcdfe433f3fc01bcb4c2eb485bf \ | ||||
|     --hash=sha256:f7f8e4f7c63c8e95eb210f4cba88d0069a0a964d6335d7a35b07f0d0baa13558 \ | ||||
|     --hash=sha256:fe02a943b1a28b505e954fbce24e867119a3eb4351f93adad55c6cfe81a70484 | ||||
|     # via thumbor | ||||
| pillow==7.2.0 \ | ||||
|     --hash=sha256:0295442429645fa16d05bd567ef5cff178482439c9aad0411d3f0ce9b88b3a6f \ | ||||
| @@ -166,100 +225,171 @@ pillow==7.2.0 \ | ||||
|     --hash=sha256:94cf49723928eb6070a892cb39d6c156f7b5a2db4e8971cb958f7b6b104fb4c4 \ | ||||
|     --hash=sha256:97f9e7953a77d5a70f49b9a48da7776dc51e9b738151b22dacf101641594a626 \ | ||||
|     --hash=sha256:9ad7f865eebde135d526bb3163d0b23ffff365cf87e767c649550964ad72785d \ | ||||
|     --hash=sha256:9c87ef410a58dd54b92424ffd7e28fd2ec65d2f7fc02b76f5e9b2067e355ebf6 \ | ||||
|     --hash=sha256:a060cf8aa332052df2158e5a119303965be92c3da6f2d93b6878f0ebca80b2f6 \ | ||||
|     --hash=sha256:c79f9c5fb846285f943aafeafda3358992d64f0ef58566e23484132ecd8d7d63 \ | ||||
|     --hash=sha256:c92302a33138409e8f1ad16731568c55c9053eee71bb05b6b744067e1b62380f \ | ||||
|     --hash=sha256:d08b23fdb388c0715990cbc06866db554e1822c4bdcf6d4166cf30ac82df8c41 \ | ||||
|     --hash=sha256:d350f0f2c2421e65fbc62690f26b59b0bcda1b614beb318c81e38647e0f673a1 \ | ||||
|     --hash=sha256:e901964262a56d9ea3c2693df68bc9860b8bdda2b04768821e4c44ae797de117 \ | ||||
|     --hash=sha256:ec29604081f10f16a7aea809ad42e27764188fc258b02259a03a8ff7ded3808d \ | ||||
|     --hash=sha256:edf31f1150778abd4322444c393ab9c7bd2af271dd4dafb4208fb613b1f3cdc9 \ | ||||
|     --hash=sha256:f7e30c27477dffc3e85c2463b3e649f751789e0f6c8456099eea7ddd53be4a8a \ | ||||
|     --hash=sha256:ffe538682dc19cc542ae7c3e504fdf54ca7f86fb8a135e59dd6bc8627eae6cce \ | ||||
|     --hash=sha256:ffe538682dc19cc542ae7c3e504fdf54ca7f86fb8a135e59dd6bc8627eae6cce | ||||
|     # via thumbor | ||||
| pyasn1-modules==0.2.8 \ | ||||
|     --hash=sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e \ | ||||
|     --hash=sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74 \ | ||||
|     --hash=sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74 | ||||
|     # via python-ldap | ||||
| pyasn1==0.4.8 \ | ||||
|     --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \ | ||||
|     --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba \ | ||||
|     # via pyasn1-modules, python-ldap | ||||
|     --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba | ||||
|     # via | ||||
|     #   pyasn1-modules | ||||
|     #   python-ldap | ||||
| pycurl==7.43.0.6 \ | ||||
|     --hash=sha256:8301518689daefa53726b59ded6b48f33751c383cf987b0ccfbbc4ed40281325 | ||||
|     # via -r requirements/thumbor.in | ||||
| python-dateutil==2.8.1 \ | ||||
|     --hash=sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c \ | ||||
|     --hash=sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a \ | ||||
|     # via botocore, tc-aws | ||||
|     --hash=sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a | ||||
|     # via | ||||
|     #   botocore | ||||
|     #   tc-aws | ||||
| python-ldap==3.3.1 \ | ||||
|     --hash=sha256:4711cacf013e298754abd70058ccc995758177fb425f1c2d30e71adfc1d00aa5 \ | ||||
|     --hash=sha256:4711cacf013e298754abd70058ccc995758177fb425f1c2d30e71adfc1d00aa5 | ||||
|     # via django-auth-ldap | ||||
| pytz==2019.3 \ | ||||
|     --hash=sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d \ | ||||
|     --hash=sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be \ | ||||
|     # via django, thumbor | ||||
|     --hash=sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be | ||||
|     # via | ||||
|     #   django | ||||
|     #   thumbor | ||||
| six==1.15.0 \ | ||||
|     --hash=sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259 \ | ||||
|     --hash=sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced \ | ||||
|     # via derpconf, libthumbor, python-dateutil | ||||
| sqlparse==0.3.1 \ | ||||
|     --hash=sha256:022fb9c87b524d1f7862b3037e541f68597a730a8843245c349fc93e1643dc4e \ | ||||
|     --hash=sha256:e162203737712307dfe78860cc56c8da8a852ab2ee33750e33aeadf38d12c548 \ | ||||
|     --hash=sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced | ||||
|     # via | ||||
|     #   derpconf | ||||
|     #   libthumbor | ||||
|     #   python-dateutil | ||||
| sqlparse==0.4.1 \ | ||||
|     --hash=sha256:017cde379adbd6a1f15a61873f43e8274179378e95ef3fede90b5aa64d304ed0 \ | ||||
|     --hash=sha256:0f91fd2e829c44362cbcfab3e9ae12e22badaa8a29ad5ff599f9ec109f0454e8 | ||||
|     # via django | ||||
| statsd==3.3.0 \ | ||||
|     --hash=sha256:c610fb80347fca0ef62666d241bce64184bd7cc1efe582f9690e045c25535eaa \ | ||||
|     --hash=sha256:e3e6db4c246f7c59003e51c9720a51a7f39a396541cb9b147ff4b14d15b5dd1f \ | ||||
|     --hash=sha256:e3e6db4c246f7c59003e51c9720a51a7f39a396541cb9b147ff4b14d15b5dd1f | ||||
|     # via thumbor | ||||
| https://github.com/kkopachev/aws/archive/0d02528b47273e143be750ba237f71a076e8f251.zip#egg=tc_aws==6.3 \ | ||||
|     --hash=sha256:866d18ffbfd5a1627ed3973757e4c282745de8f30ed85f5ce8e80ae04932f8f3 \ | ||||
| https://github.com/kkopachev/aws/archive/b5058e6b9fec7354629acc6d5df423e0310bb0cd.zip#egg=tc_aws==6.3 \ | ||||
|     --hash=sha256:8a28437b0dfab88c89f280a2d6ec55a6abfa3e26d495dc15e1b3f38744e27f0c | ||||
|     # via -r requirements/thumbor.in | ||||
| thumbor==7.0.0a5 \ | ||||
|     --hash=sha256:5042c9c8facf0da028a22f1aee717f856d213ec037835ca0edaa0282217654bb \ | ||||
|     # via -r requirements/thumbor.in, tc-aws | ||||
| tornado==6.0.4 \ | ||||
|     --hash=sha256:0fe2d45ba43b00a41cd73f8be321a44936dc1aba233dee979f17a042b83eb6dc \ | ||||
|     --hash=sha256:22aed82c2ea340c3771e3babc5ef220272f6fd06b5108a53b4976d0d722bcd52 \ | ||||
|     --hash=sha256:2c027eb2a393d964b22b5c154d1a23a5f8727db6fda837118a776b29e2b8ebc6 \ | ||||
|     --hash=sha256:5217e601700f24e966ddab689f90b7ea4bd91ff3357c3600fa1045e26d68e55d \ | ||||
|     --hash=sha256:5618f72e947533832cbc3dec54e1dffc1747a5cb17d1fd91577ed14fa0dc081b \ | ||||
|     --hash=sha256:5f6a07e62e799be5d2330e68d808c8ac41d4a259b9cea61da4101b83cb5dc673 \ | ||||
|     --hash=sha256:c58d56003daf1b616336781b26d184023ea4af13ae143d9dda65e31e534940b9 \ | ||||
|     --hash=sha256:c952975c8ba74f546ae6de2e226ab3cc3cc11ae47baf607459a6728585bb542a \ | ||||
|     --hash=sha256:c98232a3ac391f5faea6821b53db8db461157baa788f5d6222a193e9456e1740 \ | ||||
|     --hash=sha256:5042c9c8facf0da028a22f1aee717f856d213ec037835ca0edaa0282217654bb | ||||
|     # via | ||||
|     #   -r requirements/thumbor.in | ||||
|     #   tc-aws | ||||
| tornado==6.1 \ | ||||
|     --hash=sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb \ | ||||
|     --hash=sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c \ | ||||
|     --hash=sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288 \ | ||||
|     --hash=sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95 \ | ||||
|     --hash=sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558 \ | ||||
|     --hash=sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe \ | ||||
|     --hash=sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791 \ | ||||
|     --hash=sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d \ | ||||
|     --hash=sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326 \ | ||||
|     --hash=sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b \ | ||||
|     --hash=sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4 \ | ||||
|     --hash=sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c \ | ||||
|     --hash=sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910 \ | ||||
|     --hash=sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5 \ | ||||
|     --hash=sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c \ | ||||
|     --hash=sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0 \ | ||||
|     --hash=sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675 \ | ||||
|     --hash=sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd \ | ||||
|     --hash=sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f \ | ||||
|     --hash=sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c \ | ||||
|     --hash=sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea \ | ||||
|     --hash=sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6 \ | ||||
|     --hash=sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05 \ | ||||
|     --hash=sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd \ | ||||
|     --hash=sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575 \ | ||||
|     --hash=sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a \ | ||||
|     --hash=sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37 \ | ||||
|     --hash=sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795 \ | ||||
|     --hash=sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f \ | ||||
|     --hash=sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32 \ | ||||
|     --hash=sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c \ | ||||
|     --hash=sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01 \ | ||||
|     --hash=sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4 \ | ||||
|     --hash=sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2 \ | ||||
|     --hash=sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921 \ | ||||
|     --hash=sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085 \ | ||||
|     --hash=sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df \ | ||||
|     --hash=sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102 \ | ||||
|     --hash=sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5 \ | ||||
|     --hash=sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68 \ | ||||
|     --hash=sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5 | ||||
|     # via thumbor | ||||
| typing-extensions==3.7.4.2 \ | ||||
|     --hash=sha256:6e95524d8a547a91e08f404ae485bbb71962de46967e1b71a0cb89af24e761c5 \ | ||||
|     --hash=sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae \ | ||||
|     --hash=sha256:f8d2bd89d25bc39dabe7d23df520442fa1d8969b82544370e03d88b5a591c392 \ | ||||
|     # via aiohttp, aioitertools | ||||
| urllib3==1.25.9 \ | ||||
|     --hash=sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527 \ | ||||
|     --hash=sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115 \ | ||||
| typing-extensions==3.7.4.3 \ | ||||
|     --hash=sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918 \ | ||||
|     --hash=sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c \ | ||||
|     --hash=sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f | ||||
|     # via | ||||
|     #   aiohttp | ||||
|     #   aioitertools | ||||
|     #   yarl | ||||
| urllib3==1.26.3 \ | ||||
|     --hash=sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80 \ | ||||
|     --hash=sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73 | ||||
|     # via botocore | ||||
| virtualenv-clone==0.5.4 \ | ||||
|     --hash=sha256:07e74418b7cc64f4fda987bf5bc71ebd59af27a7bc9e8a8ee9fd54b1f2390a27 \ | ||||
|     --hash=sha256:665e48dd54c84b98b71a657acb49104c54e7652bce9c1c4f6c6976ed4c827a29 \ | ||||
|     --hash=sha256:665e48dd54c84b98b71a657acb49104c54e7652bce9c1c4f6c6976ed4c827a29 | ||||
|     # via -r requirements/thumbor.in | ||||
| webcolors==1.11.1 \ | ||||
|     --hash=sha256:76f360636957d1c976db7466bc71dcb713bb95ac8911944dffc55c01cb516de6 \ | ||||
|     --hash=sha256:b8cd5d865a25c51ff1218f0c90d0c0781fc64312a49b746b320cf50de1648f6e \ | ||||
|     --hash=sha256:b8cd5d865a25c51ff1218f0c90d0c0781fc64312a49b746b320cf50de1648f6e | ||||
|     # via thumbor | ||||
| wrapt==1.12.1 \ | ||||
|     --hash=sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 \ | ||||
|     --hash=sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7 | ||||
|     # via aiobotocore | ||||
| yarl==1.4.2 \ | ||||
|     --hash=sha256:0c2ab325d33f1b824734b3ef51d4d54a54e0e7a23d13b86974507602334c2cce \ | ||||
|     --hash=sha256:0ca2f395591bbd85ddd50a82eb1fde9c1066fafe888c5c7cc1d810cf03fd3cc6 \ | ||||
|     --hash=sha256:2098a4b4b9d75ee352807a95cdf5f10180db903bc5b7270715c6bbe2551f64ce \ | ||||
|     --hash=sha256:25e66e5e2007c7a39541ca13b559cd8ebc2ad8fe00ea94a2aad28a9b1e44e5ae \ | ||||
|     --hash=sha256:26d7c90cb04dee1665282a5d1a998defc1a9e012fdca0f33396f81508f49696d \ | ||||
|     --hash=sha256:308b98b0c8cd1dfef1a0311dc5e38ae8f9b58349226aa0533f15a16717ad702f \ | ||||
|     --hash=sha256:3ce3d4f7c6b69c4e4f0704b32eca8123b9c58ae91af740481aa57d7857b5e41b \ | ||||
|     --hash=sha256:58cd9c469eced558cd81aa3f484b2924e8897049e06889e8ff2510435b7ef74b \ | ||||
|     --hash=sha256:5b10eb0e7f044cf0b035112446b26a3a2946bca9d7d7edb5e54a2ad2f6652abb \ | ||||
|     --hash=sha256:6faa19d3824c21bcbfdfce5171e193c8b4ddafdf0ac3f129ccf0cdfcb083e462 \ | ||||
|     --hash=sha256:944494be42fa630134bf907714d40207e646fd5a94423c90d5b514f7b0713fea \ | ||||
|     --hash=sha256:a161de7e50224e8e3de6e184707476b5a989037dcb24292b391a3d66ff158e70 \ | ||||
|     --hash=sha256:a4844ebb2be14768f7994f2017f70aca39d658a96c786211be5ddbe1c68794c1 \ | ||||
|     --hash=sha256:c2b509ac3d4b988ae8769901c66345425e361d518aecbe4acbfc2567e416626a \ | ||||
|     --hash=sha256:c9959d49a77b0e07559e579f38b2f3711c2b8716b8410b320bf9713013215a1b \ | ||||
|     --hash=sha256:d8cdee92bc930d8b09d8bd2043cedd544d9c8bd7436a77678dd602467a993080 \ | ||||
|     --hash=sha256:e15199cdb423316e15f108f51249e44eb156ae5dba232cb73be555324a1d49c2 \ | ||||
| yarl==1.6.3 \ | ||||
|     --hash=sha256:00d7ad91b6583602eb9c1d085a2cf281ada267e9a197e8b7cae487dadbfa293e \ | ||||
|     --hash=sha256:0355a701b3998dcd832d0dc47cc5dedf3874f966ac7f870e0f3a6788d802d434 \ | ||||
|     --hash=sha256:15263c3b0b47968c1d90daa89f21fcc889bb4b1aac5555580d74565de6836366 \ | ||||
|     --hash=sha256:2ce4c621d21326a4a5500c25031e102af589edb50c09b321049e388b3934eec3 \ | ||||
|     --hash=sha256:31ede6e8c4329fb81c86706ba8f6bf661a924b53ba191b27aa5fcee5714d18ec \ | ||||
|     --hash=sha256:324ba3d3c6fee56e2e0b0d09bf5c73824b9f08234339d2b788af65e60040c959 \ | ||||
|     --hash=sha256:329412812ecfc94a57cd37c9d547579510a9e83c516bc069470db5f75684629e \ | ||||
|     --hash=sha256:4736eaee5626db8d9cda9eb5282028cc834e2aeb194e0d8b50217d707e98bb5c \ | ||||
|     --hash=sha256:4953fb0b4fdb7e08b2f3b3be80a00d28c5c8a2056bb066169de00e6501b986b6 \ | ||||
|     --hash=sha256:4c5bcfc3ed226bf6419f7a33982fb4b8ec2e45785a0561eb99274ebbf09fdd6a \ | ||||
|     --hash=sha256:547f7665ad50fa8563150ed079f8e805e63dd85def6674c97efd78eed6c224a6 \ | ||||
|     --hash=sha256:5b883e458058f8d6099e4420f0cc2567989032b5f34b271c0827de9f1079a424 \ | ||||
|     --hash=sha256:63f90b20ca654b3ecc7a8d62c03ffa46999595f0167d6450fa8383bab252987e \ | ||||
|     --hash=sha256:68dc568889b1c13f1e4745c96b931cc94fdd0defe92a72c2b8ce01091b22e35f \ | ||||
|     --hash=sha256:69ee97c71fee1f63d04c945f56d5d726483c4762845400a6795a3b75d56b6c50 \ | ||||
|     --hash=sha256:6d6283d8e0631b617edf0fd726353cb76630b83a089a40933043894e7f6721e2 \ | ||||
|     --hash=sha256:72a660bdd24497e3e84f5519e57a9ee9220b6f3ac4d45056961bf22838ce20cc \ | ||||
|     --hash=sha256:73494d5b71099ae8cb8754f1df131c11d433b387efab7b51849e7e1e851f07a4 \ | ||||
|     --hash=sha256:7356644cbed76119d0b6bd32ffba704d30d747e0c217109d7979a7bc36c4d970 \ | ||||
|     --hash=sha256:8a9066529240171b68893d60dca86a763eae2139dd42f42106b03cf4b426bf10 \ | ||||
|     --hash=sha256:8aa3decd5e0e852dc68335abf5478a518b41bf2ab2f330fe44916399efedfae0 \ | ||||
|     --hash=sha256:97b5bdc450d63c3ba30a127d018b866ea94e65655efaf889ebeabc20f7d12406 \ | ||||
|     --hash=sha256:9ede61b0854e267fd565e7527e2f2eb3ef8858b301319be0604177690e1a3896 \ | ||||
|     --hash=sha256:b2e9a456c121e26d13c29251f8267541bd75e6a1ccf9e859179701c36a078643 \ | ||||
|     --hash=sha256:b5dfc9a40c198334f4f3f55880ecf910adebdcb2a0b9a9c23c9345faa9185721 \ | ||||
|     --hash=sha256:bafb450deef6861815ed579c7a6113a879a6ef58aed4c3a4be54400ae8871478 \ | ||||
|     --hash=sha256:c49ff66d479d38ab863c50f7bb27dee97c6627c5fe60697de15529da9c3de724 \ | ||||
|     --hash=sha256:ce3beb46a72d9f2190f9e1027886bfc513702d748047b548b05dab7dfb584d2e \ | ||||
|     --hash=sha256:d26608cf178efb8faa5ff0f2d2e77c208f471c5a3709e577a7b3fd0445703ac8 \ | ||||
|     --hash=sha256:d597767fcd2c3dc49d6eea360c458b65643d1e4dbed91361cf5e36e53c1f8c96 \ | ||||
|     --hash=sha256:d5c32c82990e4ac4d8150fd7652b972216b204de4e83a122546dce571c1bdf25 \ | ||||
|     --hash=sha256:d8d07d102f17b68966e2de0e07bfd6e139c7c02ef06d3a0f8d2f0f055e13bb76 \ | ||||
|     --hash=sha256:e46fba844f4895b36f4c398c5af062a9808d1f26b2999c58909517384d5deda2 \ | ||||
|     --hash=sha256:e6b5460dc5ad42ad2b36cca524491dfcaffbfd9c8df50508bddc354e787b8dc2 \ | ||||
|     --hash=sha256:f040bcc6725c821a4c0665f3aa96a4d0805a7aaf2caf266d256b8ed71b9f041c \ | ||||
|     --hash=sha256:f0b059678fd549c66b89bed03efcabb009075bd131c248ecdf087bdb6faba24a \ | ||||
|     --hash=sha256:fcbb48a93e8699eae920f8d92f7160c03567b421bc17362a9ffbbd706a816f71 | ||||
|     # via aiohttp | ||||
|   | ||||
| @@ -6,7 +6,7 @@ zulip_conf_get_boolean() { | ||||
|     # Treat absent and invalid values as false. | ||||
|     value=$(crudini --get /etc/zulip/zulip.conf "$1" "$2" 2>/dev/null) | ||||
|     case "$(echo "$value" | tr '[:upper:]' '[:lower:]')" in | ||||
|         1|yes|true|on) return 0 ;; | ||||
|         1 | yes | true | on) return 0 ;; | ||||
|         *) return 1 ;; | ||||
|     esac | ||||
| } | ||||
| @@ -18,5 +18,5 @@ fi | ||||
| deploy_hook="${ZULIP_CERTBOT_DEPLOY_HOOK:-service nginx reload}" | ||||
|  | ||||
| certbot renew --quiet \ | ||||
|   --webroot --webroot-path=/var/lib/zulip/certbot-webroot/ \ | ||||
|   --deploy-hook "$deploy_hook" | ||||
|     --webroot --webroot-path=/var/lib/zulip/certbot-webroot/ \ | ||||
|     --deploy-hook "$deploy_hook" | ||||
|   | ||||
| @@ -43,7 +43,7 @@ Options: | ||||
|       Skip the initial `apt-get dist-upgrade`. | ||||
|  | ||||
| EOF | ||||
| }; | ||||
| } | ||||
|  | ||||
| # Shell option parsing.  Over time, we'll want to move some of the | ||||
| # environment variables below into this self-documenting system. | ||||
| @@ -51,22 +51,62 @@ args="$(getopt -o '' --long help,hostname:,email:,certbot,self-signed-cert,cacer | ||||
| eval "set -- $args" | ||||
| while true; do | ||||
|     case "$1" in | ||||
|         --help) usage; exit 0;; | ||||
|         --help) | ||||
|             usage | ||||
|             exit 0 | ||||
|             ;; | ||||
|  | ||||
|         --hostname) EXTERNAL_HOST="$2"; shift; shift;; | ||||
|         --email) ZULIP_ADMINISTRATOR="$2"; shift; shift;; | ||||
|         --hostname) | ||||
|             EXTERNAL_HOST="$2" | ||||
|             shift | ||||
|             shift | ||||
|             ;; | ||||
|         --email) | ||||
|             ZULIP_ADMINISTRATOR="$2" | ||||
|             shift | ||||
|             shift | ||||
|             ;; | ||||
|  | ||||
|         --certbot) USE_CERTBOT=1; shift;; | ||||
|         --cacert) export CUSTOM_CA_CERTIFICATES="$2"; shift; shift;; | ||||
|         --self-signed-cert) SELF_SIGNED_CERT=1; shift;; | ||||
|         --certbot) | ||||
|             USE_CERTBOT=1 | ||||
|             shift | ||||
|             ;; | ||||
|         --cacert) | ||||
|             export CUSTOM_CA_CERTIFICATES="$2" | ||||
|             shift | ||||
|             shift | ||||
|             ;; | ||||
|         --self-signed-cert) | ||||
|             SELF_SIGNED_CERT=1 | ||||
|             shift | ||||
|             ;; | ||||
|  | ||||
|         --postgres-version) POSTGRES_VERSION="$2"; shift; shift;; | ||||
|         --postgres-missing-dictionaries) POSTGRES_MISSING_DICTIONARIES=1; shift;; | ||||
|         --no-init-db) NO_INIT_DB=1; shift;; | ||||
|         --postgres-version) | ||||
|             POSTGRES_VERSION="$2" | ||||
|             shift | ||||
|             shift | ||||
|             ;; | ||||
|         --postgres-missing-dictionaries) | ||||
|             POSTGRES_MISSING_DICTIONARIES=1 | ||||
|             shift | ||||
|             ;; | ||||
|         --no-init-db) | ||||
|             NO_INIT_DB=1 | ||||
|             shift | ||||
|             ;; | ||||
|  | ||||
|         --no-overwrite-settings) NO_OVERWRITE_SETTINGS=1; shift;; | ||||
|         --no-dist-upgrade) NO_DIST_UPGRADE=1; shift;; | ||||
|         --) shift; break;; | ||||
|         --no-overwrite-settings) | ||||
|             NO_OVERWRITE_SETTINGS=1 | ||||
|             shift | ||||
|             ;; | ||||
|         --no-dist-upgrade) | ||||
|             NO_DIST_UPGRADE=1 | ||||
|             shift | ||||
|             ;; | ||||
|         --) | ||||
|             shift | ||||
|             break | ||||
|             ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| @@ -78,9 +118,9 @@ fi | ||||
| ## Options from environment variables. | ||||
| # | ||||
| # Specify options for apt. | ||||
| read -r -a APT_OPTIONS <<< "${APT_OPTIONS:-}" | ||||
| read -r -a APT_OPTIONS <<<"${APT_OPTIONS:-}" | ||||
| # Install additional packages. | ||||
| read -r -a ADDITIONAL_PACKAGES <<< "${ADDITIONAL_PACKAGES:-}" | ||||
| read -r -a ADDITIONAL_PACKAGES <<<"${ADDITIONAL_PACKAGES:-}" | ||||
| # Comma-separated list of puppet manifests to install.  default is | ||||
| # zulip::voyager for an all-in-one system or zulip::dockervoyager for | ||||
| # Docker.  Use e.g. zulip::app_frontend for a Zulip frontend server. | ||||
| @@ -111,8 +151,8 @@ if [ -z "$EXTERNAL_HOST" ] || [ -z "$ZULIP_ADMINISTRATOR" ]; then | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| if [ "$EXTERNAL_HOST" = zulip.example.com ] || | ||||
|    [ "$ZULIP_ADMINISTRATOR" = zulip-admin@example.com ]; then | ||||
| if [ "$EXTERNAL_HOST" = zulip.example.com ] \ | ||||
|     || [ "$ZULIP_ADMINISTRATOR" = zulip-admin@example.com ]; then | ||||
|     # These example values are specifically checked for and would fail | ||||
|     # later; see check_config in zerver/lib/management.py. | ||||
|     echo 'error: The example hostname and email must be replaced with real values.' >&2 | ||||
| @@ -134,8 +174,16 @@ export LANGUAGE="en_US.UTF-8" | ||||
|  | ||||
| # Check for a supported OS release. | ||||
| if [ -f /etc/os-release ]; then | ||||
|     os_info="$(. /etc/os-release; printf '%s\n' "$ID" "$ID_LIKE" "$VERSION_ID" "$VERSION_CODENAME")" | ||||
|     { read -r os_id; read -r os_id_like; read -r os_version_id; read -r os_version_codename || true; } <<< "$os_info" | ||||
|     os_info="$( | ||||
|         . /etc/os-release | ||||
|         printf '%s\n' "$ID" "$ID_LIKE" "$VERSION_ID" "$VERSION_CODENAME" | ||||
|     )" | ||||
|     { | ||||
|         read -r os_id | ||||
|         read -r os_id_like | ||||
|         read -r os_version_id | ||||
|         read -r os_version_codename || true | ||||
|     } <<<"$os_info" | ||||
|     case " $os_id $os_id_like " in | ||||
|         *' debian '*) | ||||
|             package_system="apt" | ||||
| @@ -147,7 +195,7 @@ if [ -f /etc/os-release ]; then | ||||
| fi | ||||
|  | ||||
| case "$os_id$os_version_id" in | ||||
|     debian10|ubuntu18.04|ubuntu20.04) ;; | ||||
|     debian10 | ubuntu18.04 | ubuntu20.04) ;; | ||||
|     *) | ||||
|         set +x | ||||
|         cat <<EOF | ||||
| @@ -163,10 +211,11 @@ For more information, see: | ||||
|   https://zulip.readthedocs.io/en/latest/production/requirements.html | ||||
| EOF | ||||
|         exit 1 | ||||
|         ;; | ||||
| esac | ||||
|  | ||||
| if [ "$os_id" = ubuntu ] && ! apt-cache policy | | ||||
|            grep -q "^     release v=$os_version_id,o=Ubuntu,a=$os_version_codename,n=$os_version_codename,l=Ubuntu,c=universe"; then | ||||
| if [ "$os_id" = ubuntu ] && ! apt-cache policy \ | ||||
|     | grep -q "^     release v=$os_version_id,o=Ubuntu,a=$os_version_codename,n=$os_version_codename,l=Ubuntu,c=universe"; then | ||||
|     set +x | ||||
|     cat <<'EOF' | ||||
|  | ||||
| @@ -187,10 +236,10 @@ case ",$PUPPET_CLASSES," in | ||||
|         if [ "$package_system" = apt ]; then | ||||
|             # We're going to install Postgres from the postgres apt | ||||
|             # repository; this may conflict with the existing postgres. | ||||
|             OTHER_PG="$(dpkg --get-selections | | ||||
|                              grep -E '^postgresql-[0-9]+\s+install$' | | ||||
|                              grep -v "^postgresql-$POSTGRES_VERSION\b" | | ||||
|                              cut -f 1)" || true | ||||
|             OTHER_PG="$(dpkg --get-selections \ | ||||
|                 | grep -E '^postgresql-[0-9]+\s+install$' \ | ||||
|                 | grep -v "^postgresql-$POSTGRES_VERSION\b" \ | ||||
|                 | cut -f 1)" || true | ||||
|             if [ -n "$OTHER_PG" ]; then | ||||
|                 INDENTED="${OTHER_PG//$'\n'/$'\n'    }" | ||||
|                 SPACED="${OTHER_PG//$'\n'/ }" | ||||
| @@ -274,9 +323,9 @@ fi | ||||
|  | ||||
| if [ "$package_system" = apt ]; then | ||||
|     if ! apt-get install -y \ | ||||
|          puppet git curl wget jq \ | ||||
|          python3 crudini \ | ||||
|          "${ADDITIONAL_PACKAGES[@]}"; then | ||||
|         puppet git curl wget jq \ | ||||
|         python3 crudini \ | ||||
|         "${ADDITIONAL_PACKAGES[@]}"; then | ||||
|         set +x | ||||
|         echo -e '\033[0;31m' >&2 | ||||
|         echo "Installing packages failed; is network working and (on Ubuntu) the universe repository enabled?" >&2 | ||||
| @@ -286,9 +335,9 @@ if [ "$package_system" = apt ]; then | ||||
|     fi | ||||
| elif [ "$package_system" = yum ]; then | ||||
|     if ! yum install -y \ | ||||
|          puppet git curl wget jq \ | ||||
|          python3 crudini \ | ||||
|          "${ADDITIONAL_PACKAGES[@]}"; then | ||||
|         puppet git curl wget jq \ | ||||
|         python3 crudini \ | ||||
|         "${ADDITIONAL_PACKAGES[@]}"; then | ||||
|         set +x | ||||
|         echo -e '\033[0;31m' >&2 | ||||
|         echo "Installing packages failed; is network working?" >&2 | ||||
| @@ -328,13 +377,13 @@ has_class() { | ||||
| id -u zulip &>/dev/null || useradd -m zulip --home-dir /home/zulip | ||||
| if [ -n "$NO_OVERWRITE_SETTINGS" ] && [ -e "/etc/zulip/zulip.conf" ]; then | ||||
|     "$ZULIP_PATH"/scripts/zulip-puppet-apply --force --noop \ | ||||
|                  --write-catalog-summary \ | ||||
|                  --classfile=/var/lib/puppet/classes.txt \ | ||||
|                  >/dev/null | ||||
|         --write-catalog-summary \ | ||||
|         --classfile=/var/lib/puppet/classes.txt \ | ||||
|         >/dev/null | ||||
| else | ||||
|     # Write out more than we need, and remove sections that are not | ||||
|     # applicable to the classes that are actually necessary. | ||||
|     cat <<EOF > /etc/zulip/zulip.conf | ||||
|     cat <<EOF >/etc/zulip/zulip.conf | ||||
| [machine] | ||||
| puppet_classes = $PUPPET_CLASSES | ||||
| deploy_type = production | ||||
| @@ -352,9 +401,9 @@ EOF | ||||
|     fi | ||||
|  | ||||
|     "$ZULIP_PATH"/scripts/zulip-puppet-apply --force --noop \ | ||||
|                  --write-catalog-summary \ | ||||
|                  --classfile=/var/lib/puppet/classes.txt \ | ||||
|                  >/dev/null | ||||
|         --write-catalog-summary \ | ||||
|         --classfile=/var/lib/puppet/classes.txt \ | ||||
|         >/dev/null | ||||
|  | ||||
|     # We only need the postgres version setting on database hosts; but | ||||
|     # we don't know if this is a database host until we have the catalog summary. | ||||
|   | ||||
| @@ -31,7 +31,10 @@ fi | ||||
| if [ "$current_node_version" != "v$node_version" ] || ! [ -L "$node_wrapper_path" ]; then | ||||
|     export NVM_DIR=/usr/local/nvm | ||||
|     # shellcheck source=/dev/null | ||||
|     if ! [ -e "$NVM_DIR/nvm.sh" ] || { . "$NVM_DIR/nvm.sh"; [ "$(nvm --version)" != "$nvm_version" ]; }; then | ||||
|     if ! [ -e "$NVM_DIR/nvm.sh" ] || { | ||||
|         . "$NVM_DIR/nvm.sh" | ||||
|         [ "$(nvm --version)" != "$nvm_version" ] | ||||
|     }; then | ||||
|         mkdir -p "$NVM_DIR" | ||||
|         wget_opts=(-nv) | ||||
|         if [ -n "${CUSTOM_CA_CERTIFICATES:-}" ]; then | ||||
|   | ||||
| @@ -36,7 +36,7 @@ apt-get -y install "${pre_setup_deps[@]}" | ||||
| SCRIPTS_PATH="$(dirname "$(dirname "$0")")" | ||||
|  | ||||
| release=$(lsb_release -sc) | ||||
| if [[ "$release" =~ ^(bionic|cosmic|disco|eoan|focal)$ ]] ; then | ||||
| if [[ "$release" =~ ^(bionic|cosmic|disco|eoan|focal)$ ]]; then | ||||
|     apt-key add "$SCRIPTS_PATH"/setup/pgdg.asc | ||||
|     apt-key add "$SCRIPTS_PATH"/setup/pgroonga-ppa.asc | ||||
|     cat >$SOURCES_FILE <<EOF | ||||
| @@ -46,7 +46,7 @@ deb-src http://apt.postgresql.org/pub/repos/apt/ $release-pgdg main | ||||
| deb http://ppa.launchpad.net/groonga/ppa/ubuntu $release main | ||||
| deb-src http://ppa.launchpad.net/groonga/ppa/ubuntu $release main | ||||
| EOF | ||||
| elif [[ "$release" =~ ^(buster)$ ]] ; then | ||||
| elif [[ "$release" =~ ^(buster)$ ]]; then | ||||
|     apt-key add "$SCRIPTS_PATH"/setup/pgdg.asc | ||||
|     apt-key add "$SCRIPTS_PATH"/setup/pgroonga-debian.asc | ||||
|     cat >$SOURCES_FILE <<EOF | ||||
| @@ -71,4 +71,4 @@ else | ||||
|     apt-get update && rm -f "$STAMP_FILE" | ||||
| fi | ||||
|  | ||||
| echo "$DEPENDENCIES_HASH" > "$DEPENDENCIES_HASH_FILE" | ||||
| echo "$DEPENDENCIES_HASH" >"$DEPENDENCIES_HASH_FILE" | ||||
|   | ||||
| @@ -54,4 +54,4 @@ else | ||||
|     apt-get update && rm -f "$STAMP_FILE" | ||||
| fi | ||||
|  | ||||
| echo "$DEPENDENCIES_HASH" > "$DEPENDENCIES_HASH_FILE" | ||||
| echo "$DEPENDENCIES_HASH" >"$DEPENDENCIES_HASH_FILE" | ||||
|   | ||||
| @@ -7,14 +7,19 @@ args="$(getopt -o '' --long prod -- "$@")" | ||||
| eval "set -- $args" | ||||
| while true; do | ||||
|     case "$1" in | ||||
|         --prod) is_prod=true; shift;; | ||||
|         --) shift; break;; | ||||
|         --prod) | ||||
|             is_prod=true | ||||
|             shift | ||||
|             ;; | ||||
|         --) | ||||
|             shift | ||||
|             break | ||||
|             ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| is_centos=false | ||||
| is_rhel=false | ||||
| is_rhel_registered=false | ||||
| if [ -e /etc/centos-release ]; then | ||||
|     is_centos=true | ||||
|     yum install -y epel-release | ||||
| @@ -27,12 +32,6 @@ if [ -e /etc/centos-release ]; then | ||||
| elif grep -q "Red Hat" /etc/redhat-release; then | ||||
|     is_rhel=true | ||||
|     yum localinstall -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm | ||||
|     if subscription-manager status; then | ||||
|         # See https://access.redhat.com/discussions/2217891#comment-1032701 | ||||
|         is_rhel_registered=true | ||||
|         # libmemcached-devel can be installed directly if the machine is registered | ||||
|         subscription-manager repos --enable "rhel-*-optional-rpms" --enable "rhel-*-extras-rpms" | ||||
|     fi | ||||
| fi | ||||
|  | ||||
| yum update -y | ||||
| @@ -51,10 +50,6 @@ if [ "$is_centos" = true ]; then | ||||
|     # https://pgroonga.github.io/install/centos.html | ||||
|     yum localinstall -y https://packages.groonga.org/centos/groonga-release-latest.noarch.rpm | ||||
| elif [ "$is_rhel" = true ]; then | ||||
|     if [ "$is_rhel_registered" = false ]; then | ||||
|         echo "This machine is unregistered; installing libmemcached-devel from a CentOS mirror ..." | ||||
|         yum localinstall -y http://mirror.centos.org/centos/7/os/x86_64/Packages/libmemcached-devel-1.0.16-5.el7.x86_64.rpm | ||||
|     fi | ||||
|     yum localinstall -y https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-latest-x86_64/pgdg-redhat10-10-2.noarch.rpm | ||||
|     yum localinstall -y https://packages.groonga.org/centos/groonga-release-latest.noarch.rpm | ||||
| else | ||||
|   | ||||
| @@ -17,7 +17,6 @@ VENV_DEPENDENCIES = [ | ||||
|     "zlib1g-dev",             # Needed to handle compressed PNGs with Pillow | ||||
|     "libjpeg-dev",          # Needed to handle JPEGs with Pillow | ||||
|     "libldap2-dev", | ||||
|     "libmemcached-dev", | ||||
|     "python3-dev",          # Needed to install typed-ast dependency of mypy | ||||
|     "python3-pip", | ||||
|     "virtualenv", | ||||
| @@ -35,6 +34,8 @@ VENV_DEPENDENCIES = [ | ||||
|     # on upgrade of a production server, and it's not worth adding | ||||
|     # another call to `apt install` for. | ||||
|     "jq",                   # Used by scripts/lib/install-node to check yarn version | ||||
|  | ||||
|     "libsasl2-dev",         # For building python-ldap from source | ||||
| ] | ||||
|  | ||||
| COMMON_YUM_VENV_DEPENDENCIES = [ | ||||
| @@ -43,7 +44,6 @@ COMMON_YUM_VENV_DEPENDENCIES = [ | ||||
|     "zlib-devel", | ||||
|     "libjpeg-turbo-devel", | ||||
|     "openldap-devel", | ||||
|     "libmemcached-devel", | ||||
|     # Needed by python-xmlsec: | ||||
|     "gcc" | ||||
|     "python3-devel", | ||||
|   | ||||
| @@ -9,15 +9,10 @@ from scripts.lib.setup_path import setup_path | ||||
|  | ||||
| setup_path() | ||||
|  | ||||
| import pylibmc | ||||
| import bmemcached | ||||
|  | ||||
| from zproject import settings | ||||
|  | ||||
| assert isinstance(settings.CACHES["default"], dict)  # for mypy | ||||
| pylibmc.Client( | ||||
|     [settings.MEMCACHED_LOCATION], | ||||
|     binary=True, | ||||
|     username=settings.MEMCACHED_USERNAME, | ||||
|     password=settings.MEMCACHED_PASSWORD, | ||||
|     behaviors=settings.CACHES["default"]["OPTIONS"], | ||||
| ).flush_all() | ||||
| cache = settings.CACHES["default"] | ||||
| assert isinstance(cache, dict)  # for mypy | ||||
| bmemcached.Client((cache["LOCATION"],), **cache["OPTIONS"]).flush_all() | ||||
|   | ||||
| @@ -10,11 +10,20 @@ args="$(getopt -o '' --long help,force,exists-ok -- "$@")" | ||||
| eval "set -- $args" | ||||
| while true; do | ||||
|     case "$1" in | ||||
|         --help) usage;; | ||||
|         --force) FORCE=1; shift;; | ||||
|         --exists-ok) EXISTS_OK=1; shift;; | ||||
|         --) shift; break;; | ||||
|         *) usage;; | ||||
|         --help) usage ;; | ||||
|         --force) | ||||
|             FORCE=1 | ||||
|             shift | ||||
|             ;; | ||||
|         --exists-ok) | ||||
|             EXISTS_OK=1 | ||||
|             shift | ||||
|             ;; | ||||
|         --) | ||||
|             shift | ||||
|             break | ||||
|             ;; | ||||
|         *) usage ;; | ||||
|     esac | ||||
| done | ||||
| EXTERNAL_HOST="$1" | ||||
| @@ -51,9 +60,9 @@ fi | ||||
| rm -f "$KEYFILE" "$CERTFILE" | ||||
|  | ||||
| if [[ "$EXTERNAL_HOST" =~ ^(([0-9]+\.){3}[0-9]+)(:[0-9]+)?$ ]]; then | ||||
|     subjectAltName="IP:${BASH_REMATCH[1]}"  # IPv4 address | ||||
|     subjectAltName="IP:${BASH_REMATCH[1]}" # IPv4 address | ||||
| elif [[ "$EXTERNAL_HOST" =~ ^\[([^][]*)\](:[0-9]+)?$ ]]; then | ||||
|     subjectAltName="IP:${BASH_REMATCH[1]}"  # IPv6 address | ||||
|     subjectAltName="IP:${BASH_REMATCH[1]}" # IPv6 address | ||||
| elif [[ "$EXTERNAL_HOST" =~ ^([^:]+)(:[0-9]+)?$ ]]; then | ||||
|     subjectAltName="DNS:${BASH_REMATCH[1]}" | ||||
| else | ||||
| @@ -94,8 +103,8 @@ fi | ||||
|  | ||||
| # Based on /usr/sbin/make-ssl-cert from Debian's `ssl-cert` package. | ||||
| openssl req -new -x509 \ | ||||
|         -config "$config" -days 3650 -nodes -sha256 \ | ||||
|         -out "$CERTFILE" -keyout "$KEYFILE" | ||||
|     -config "$config" -days 3650 -nodes -sha256 \ | ||||
|     -out "$CERTFILE" -keyout "$KEYFILE" | ||||
|  | ||||
| chmod 644 "$CERTFILE" | ||||
| chmod 640 "$KEYFILE" | ||||
|   | ||||
| @@ -10,10 +10,16 @@ args="$(getopt -o '' --long help,quiet -- "$@")" | ||||
| eval "set -- $args" | ||||
| while true; do | ||||
|     case "$1" in | ||||
|         --help) usage;; | ||||
|         --quiet) QUIET=1; shift;; | ||||
|         --) shift; break;; | ||||
|         *) usage;; | ||||
|         --help) usage ;; | ||||
|         --quiet) | ||||
|             QUIET=1 | ||||
|             shift | ||||
|             ;; | ||||
|         --) | ||||
|             shift | ||||
|             break | ||||
|             ;; | ||||
|         *) usage ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
|   | ||||
| @@ -8,11 +8,11 @@ HASH="$2" | ||||
|  | ||||
| cd /tmp | ||||
| wget -qO "wal-g-$VERSION.tar.gz" \ | ||||
|      "https://github.com/wal-g/wal-g/releases/download/v$VERSION/wal-g.linux-amd64.tar.gz" | ||||
|     "https://github.com/wal-g/wal-g/releases/download/v$VERSION/wal-g.linux-amd64.tar.gz" | ||||
|  | ||||
| # Check not against the arbitrary provided sha256 on Github, but | ||||
| # against the (same) sha256 that we hardcode as "known good". | ||||
| echo "$HASH  wal-g-$VERSION.tar.gz" > "wal-g-$VERSION.tar.gz.sha256" | ||||
| echo "$HASH  wal-g-$VERSION.tar.gz" >"wal-g-$VERSION.tar.gz.sha256" | ||||
| sha256sum -c "wal-g-$VERSION.tar.gz.sha256" | ||||
|  | ||||
| tar xzf "wal-g-$VERSION.tar.gz" | ||||
|   | ||||
| @@ -13,15 +13,14 @@ POSTGRES_USER="${POSTGRES_USER:-postgres}" | ||||
| # This psql command may fail because the zulip database doesn’t exist, | ||||
| # hence the &&. | ||||
| if records="$( | ||||
|     cd /  # Make sure the current working directory is readable by postgres | ||||
|     cd / # Make sure the current working directory is readable by postgres | ||||
|     su "$POSTGRES_USER" -c "psql -v ON_ERROR_STOP=1 -Atc 'SELECT COUNT(*) FROM zulip.zerver_message;' zulip" | ||||
| )" && [ "$records" -gt 200 ]; then | ||||
|     set +x | ||||
|     echo "WARNING: This will delete your Zulip database which currently contains $records messages." | ||||
|     read -p "Do you want to proceed? [y/N] " -r | ||||
|     echo | ||||
|     if [[ ! $REPLY =~ ^[Yy]$ ]] | ||||
|     then | ||||
|     if [[ ! $REPLY =~ ^[Yy]$ ]]; then | ||||
|         exit 1 | ||||
|     fi | ||||
|     set -x | ||||
| @@ -35,12 +34,12 @@ fi | ||||
| # Drop any open connections to any old database. | ||||
| # Send the script via stdin in case the postgres user lacks permission to read it. | ||||
| su -s /usr/bin/env - -- "$POSTGRES_USER" \ | ||||
|     bash -s - zulip zulip_base < "$(dirname "$0")/terminate-psql-sessions" | ||||
|     bash -s - zulip zulip_base <"$(dirname "$0")/terminate-psql-sessions" | ||||
|  | ||||
| ( | ||||
|     cd /  # Make sure the current working directory is readable by postgres | ||||
|     cd / # Make sure the current working directory is readable by postgres | ||||
|     su "$POSTGRES_USER" -c 'psql -v ON_ERROR_STOP=1 -e' | ||||
| ) < "$(dirname "$0")/create-db.sql" | ||||
| ) <"$(dirname "$0")/create-db.sql" | ||||
|  | ||||
| # Clear memcached to avoid contamination from previous database state | ||||
| "$(dirname "$0")/flush-memcached" | ||||
|   | ||||
| @@ -83,14 +83,21 @@ esac | ||||
|  | ||||
| # Check for a supported OS release. | ||||
| if [ -f /etc/os-release ]; then | ||||
|     os_info="$(. /etc/os-release; printf '%s\n' "$ID" "$ID_LIKE")" | ||||
|     { read -r os_id; read -r os_id_like|| true; } <<< "$os_info" | ||||
|     os_info="$( | ||||
|         . /etc/os-release | ||||
|         printf '%s\n' "$ID" "$ID_LIKE" | ||||
|     )" | ||||
|     { | ||||
|         read -r os_id | ||||
|         read -r os_id_like || true | ||||
|     } <<<"$os_info" | ||||
| fi | ||||
|  | ||||
| set -x | ||||
|  | ||||
| case " $os_id $os_id_like " in | ||||
|     *' debian '*) | ||||
|         apt-get update | ||||
|         apt-get install -y certbot | ||||
|         ;; | ||||
|     *' rhel '*) | ||||
| @@ -103,10 +110,10 @@ esac | ||||
| # Passing --force-interactive suppresses a warning, but also brings up | ||||
| # an annoying prompt we stifle with --no-eff-email. | ||||
| certbot certonly "${method_args[@]}" \ | ||||
|                 "${HOSTNAMES[@]}" -m "$EMAIL" \ | ||||
|                 $agree_tos \ | ||||
|                 "${deploy_hook[@]}" \ | ||||
|                 --force-interactive --no-eff-email | ||||
|     "${HOSTNAMES[@]}" -m "$EMAIL" \ | ||||
|     $agree_tos \ | ||||
|     "${deploy_hook[@]}" \ | ||||
|     --force-interactive --no-eff-email | ||||
|  | ||||
| symlink_with_backup() { | ||||
|     if [ -e "$2" ]; then | ||||
|   | ||||
| @@ -40,7 +40,7 @@ fi | ||||
|  | ||||
| # Capture the output so we know where the path to the post-upgrade scripts is | ||||
| UPGRADE_LOG=$(mktemp "/var/log/zulip/postgres-upgrade-$UPGRADE_FROM-$UPGRADE_TO.XXXXXXXXX.log") | ||||
| pg_upgradecluster "$UPGRADE_FROM" main --method=upgrade --link | tee "$UPGRADE_LOG" | ||||
| pg_upgradecluster -v "$UPGRADE_TO" "$UPGRADE_FROM" main --method=upgrade --link | tee "$UPGRADE_LOG" | ||||
| SCRIPTS_PATH=$(grep -o "/var/log/postgresql/pg_upgradecluster-$UPGRADE_FROM-$UPGRADE_TO-main.*" "$UPGRADE_LOG" || true) | ||||
|  | ||||
| # If the upgrade completed successfully, lock in the new version in | ||||
|   | ||||
| @@ -199,6 +199,7 @@ import "../search_pill.js"; | ||||
| import "../search_pill_widget.js"; | ||||
| import "../stream_ui_updates.js"; | ||||
| import "../spoilers.js"; | ||||
| import "../desktop_integration.js"; | ||||
|  | ||||
| // Import Styles | ||||
|  | ||||
|   | ||||
| @@ -535,10 +535,15 @@ function validate_stream_message_post_policy(sub) { | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     if (page_params.is_guest && stream_post_policy !== stream_post_permission_type.everyone.code) { | ||||
|         compose_error(i18n.t("Guests are not allowed to post to this stream.")); | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     const person = people.get_by_user_id(page_params.user_id); | ||||
|     const current_datetime = new Date(Date.now()); | ||||
|     const person_date_joined = new Date(person.date_joined); | ||||
|     const days = new Date(current_datetime - person_date_joined).getDate(); | ||||
|     const days = (current_datetime - person_date_joined) / 1000 / 86400; | ||||
|     let error_text; | ||||
|     if ( | ||||
|         stream_post_policy === stream_post_permission_type.non_new_members.code && | ||||
|   | ||||
							
								
								
									
										15
									
								
								static/js/desktop_integration.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								static/js/desktop_integration.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | ||||
| if (window.electron_bridge !== undefined) { | ||||
|     window.electron_bridge.on_event("logout", () => { | ||||
|         $("#logout_form").trigger("submit"); | ||||
|     }); | ||||
|  | ||||
|     window.electron_bridge.on_event("show-keyboard-shortcuts", () => { | ||||
|         hashchange.go_to_location("keyboard-shortcuts"); | ||||
|     }); | ||||
|  | ||||
|     window.electron_bridge.on_event("show-notification-settings", () => { | ||||
|         hashchange.go_to_location("settings/notifications"); | ||||
|     }); | ||||
| } | ||||
|  | ||||
| export {}; | ||||
| @@ -16,16 +16,25 @@ function add_messages(messages, msg_list, opts) { | ||||
|     return render_info; | ||||
| } | ||||
|  | ||||
| // We need to check if the message content contains the specified HTML | ||||
| // elements.  We wrap the message.content in a <div>; this is | ||||
| // important because $("Text <a>link</a>").find("a") returns nothing; | ||||
| // one needs an outer element wrapping an object to use this | ||||
| // construction. | ||||
| function is_element_in_message_content(message, element_selector) { | ||||
|     return $(`<div>${message.content}</div>`).find(element_selector).length > 0; | ||||
| } | ||||
|  | ||||
| exports.message_has_link = function (message) { | ||||
|     return $(message.content).find("a").length > 0; | ||||
|     return is_element_in_message_content(message, "a"); | ||||
| }; | ||||
|  | ||||
| exports.message_has_image = function (message) { | ||||
|     return $(message.content).find(".message_inline_image").length > 0; | ||||
|     return is_element_in_message_content(message, ".message_inline_image"); | ||||
| }; | ||||
|  | ||||
| exports.message_has_attachment = function (message) { | ||||
|     return $(message.content).find("a[href^='/user_uploads']").length > 0; | ||||
|     return is_element_in_message_content(message, "a[href^='/user_uploads']"); | ||||
| }; | ||||
|  | ||||
| exports.add_old_messages = function (messages, msg_list) { | ||||
|   | ||||
| @@ -288,7 +288,12 @@ exports.view.insert_new_reaction = function (opts) { | ||||
|  | ||||
|     if (opts.reaction_type !== "unicode_emoji") { | ||||
|         context.is_realm_emoji = true; | ||||
|         context.url = emoji.all_realm_emojis.get(emoji_code).emoji_url; | ||||
|         const emoji_info = emoji.all_realm_emojis.get(emoji_code); | ||||
|         if (!emoji_info) { | ||||
|             blueslip.error(`Cannot find/insert realm emoji for code '${emoji_code}'.`); | ||||
|             return; | ||||
|         } | ||||
|         context.url = emoji_info.emoji_url; | ||||
|     } | ||||
|  | ||||
|     context.count = 1; | ||||
| @@ -492,7 +497,12 @@ exports.add_clean_reaction = function (opts) { | ||||
|  | ||||
|     if (r.reaction_type !== "unicode_emoji") { | ||||
|         r.is_realm_emoji = true; | ||||
|         r.url = emoji.all_realm_emojis.get(r.emoji_code).emoji_url; | ||||
|         const emoji_info = emoji.all_realm_emojis.get(r.emoji_code); | ||||
|         if (!emoji_info) { | ||||
|             blueslip.error(`Cannot find/add realm emoji for code '${r.emoji_code}'.`); | ||||
|             return; | ||||
|         } | ||||
|         r.url = emoji_info.emoji_url; | ||||
|     } | ||||
|  | ||||
|     opts.message.clean_reactions.set(opts.local_id, r); | ||||
|   | ||||
| @@ -480,11 +480,22 @@ exports.set_stream_property = function (sub, property, value, status_element) { | ||||
|     exports.bulk_set_stream_property([sub_data], status_element); | ||||
| }; | ||||
|  | ||||
| function get_message_retention_days_from_sub(sub) { | ||||
|     if (sub.message_retention_days === null) { | ||||
|         return "realm_default"; | ||||
|     } | ||||
|     if (sub.message_retention_days === -1) { | ||||
|         return "forever"; | ||||
|     } | ||||
|     return sub.message_retention_days; | ||||
| } | ||||
|  | ||||
| function change_stream_privacy(e) { | ||||
|     e.stopPropagation(); | ||||
|  | ||||
|     const stream_id = $(e.target).data("stream-id"); | ||||
|     const sub = stream_data.get_sub_by_id(stream_id); | ||||
|     const data = {}; | ||||
|  | ||||
|     const privacy_setting = $("#stream_privacy_modal input[name=privacy]:checked").val(); | ||||
|     const stream_post_policy = parseInt( | ||||
| @@ -492,6 +503,10 @@ function change_stream_privacy(e) { | ||||
|         10, | ||||
|     ); | ||||
|  | ||||
|     if (sub.stream_post_policy !== stream_post_policy) { | ||||
|         data.stream_post_policy = JSON.stringify(stream_post_policy); | ||||
|     } | ||||
|  | ||||
|     let invite_only; | ||||
|     let history_public_to_subscribers; | ||||
|  | ||||
| @@ -506,28 +521,38 @@ function change_stream_privacy(e) { | ||||
|         history_public_to_subscribers = true; | ||||
|     } | ||||
|  | ||||
|     $(".stream_change_property_info").hide(); | ||||
|     const data = { | ||||
|         stream_name: sub.name, | ||||
|         // toggle the privacy setting | ||||
|         is_private: JSON.stringify(invite_only), | ||||
|         stream_post_policy: JSON.stringify(stream_post_policy), | ||||
|         history_public_to_subscribers: JSON.stringify(history_public_to_subscribers), | ||||
|     }; | ||||
|     if ( | ||||
|         sub.invite_only !== invite_only || | ||||
|         sub.history_public_to_subscribers !== history_public_to_subscribers | ||||
|     ) { | ||||
|         data.is_private = JSON.stringify(invite_only); | ||||
|         data.history_public_to_subscribers = JSON.stringify(history_public_to_subscribers); | ||||
|     } | ||||
|  | ||||
|     if (page_params.is_owner) { | ||||
|         let message_retention_days = $( | ||||
|             "#stream_privacy_modal select[name=stream_message_retention_setting]", | ||||
|         ).val(); | ||||
|         if (message_retention_days === "retain_for_period") { | ||||
|             message_retention_days = parseInt( | ||||
|                 $("#stream_privacy_modal input[name=stream-message-retention-days]").val(), | ||||
|                 10, | ||||
|             ); | ||||
|         } | ||||
|     let message_retention_days = $( | ||||
|         "#stream_privacy_modal select[name=stream_message_retention_setting]", | ||||
|     ).val(); | ||||
|     if (message_retention_days === "retain_for_period") { | ||||
|         message_retention_days = parseInt( | ||||
|             $("#stream_privacy_modal input[name=stream-message-retention-days]").val(), | ||||
|             10, | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     const message_retention_days_from_sub = get_message_retention_days_from_sub(sub); | ||||
|  | ||||
|     if (message_retention_days_from_sub !== message_retention_days) { | ||||
|         data.message_retention_days = JSON.stringify(message_retention_days); | ||||
|     } | ||||
|  | ||||
|     $(".stream_change_property_info").hide(); | ||||
|  | ||||
|     if (Object.keys(data).length === 0) { | ||||
|         overlays.close_modal("#stream_privacy_modal"); | ||||
|         $("#stream_privacy_modal").remove(); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     channel.patch({ | ||||
|         url: "/json/streams/" + stream_id, | ||||
|         data: data, | ||||
|   | ||||
| @@ -228,7 +228,7 @@ exports.setup_upload = function (config) { | ||||
|         } | ||||
|         const split_uri = uri.split("/"); | ||||
|         const filename = split_uri[split_uri.length - 1]; | ||||
|         if (!compose_state.composing()) { | ||||
|         if (config.mode === "compose" && !compose_state.composing()) { | ||||
|             compose_actions.start("stream"); | ||||
|         } | ||||
|         const absolute_uri = exports.make_upload_absolute(uri); | ||||
|   | ||||
| @@ -2133,8 +2133,6 @@ div.topic_edit_spinner .loading_indicator_spinner { | ||||
| } | ||||
|  | ||||
| #do_delete_message_spinner { | ||||
|     display: none; | ||||
|     width: 0; | ||||
|     margin: 0 auto; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -39,9 +39,9 @@ just set `JITSI_SERVER_URL` in `/etc/zulip/settings.py`. | ||||
|  | ||||
| {tab|bigbluebutton} | ||||
|  | ||||
| In order to use Big Blue Button as the video call provider, you need | ||||
| to first configure the `BIG_BLUE_BUTTON_URL` setting in | ||||
| `/etc/zulip/settings.py`. | ||||
| Using Big Blue Button as a video chat provider is currently only | ||||
| possible on self-hosted Zulip installations.  See the [detailed | ||||
| configuration instructions][big-blue-button-configuration]. | ||||
|  | ||||
| {tab|zoom} | ||||
|  | ||||
| @@ -75,4 +75,5 @@ setting the provider to "None". | ||||
|  | ||||
| {end_tabs} | ||||
|  | ||||
| [zoom-configuration]: https://zulip.readthedocs.io/en/latest/production/zoom-configuration.html | ||||
| [big-blue-button-configuration]: https://zulip.readthedocs.io/en/latest/production/video-calls.html#big-blue-button | ||||
| [zoom-configuration]: https://zulip.readthedocs.io/en/latest/production/video-calls.html#zoom | ||||
|   | ||||
| @@ -11,8 +11,11 @@ eval "set -- $args" | ||||
|  | ||||
| while true; do | ||||
|     case "$1" in | ||||
|         --) shift; break;; | ||||
|         *) usage;; | ||||
|         --) | ||||
|             shift | ||||
|             break | ||||
|             ;; | ||||
|         *) usage ;; | ||||
|     esac | ||||
| done | ||||
|  | ||||
| @@ -47,8 +50,8 @@ git archive -o "$TARBALL" "--prefix=$prefix/" HEAD | ||||
| cd "$TMPDIR" | ||||
| tar -xf "$TARBALL" | ||||
| while read -r i; do | ||||
|     rm -r --interactive=never "${TMPDIR:?}/$prefix/$i"; | ||||
| done < "$TMPDIR/$prefix/tools/release-tarball-exclude.txt" | ||||
|     rm -r --interactive=never "${TMPDIR:?}/$prefix/$i" | ||||
| done <"$TMPDIR/$prefix/tools/release-tarball-exclude.txt" | ||||
| tar -cf "$TARBALL" "$prefix" | ||||
| rm -rf "$prefix" | ||||
|  | ||||
| @@ -78,10 +81,10 @@ mkdir -p "var/log" | ||||
| # TODO: Would be much better to instead run the below tools with some | ||||
| # sort of environment hack so that we don't need to create this dummy | ||||
| # secrets file. | ||||
| cat >> zproject/prod_settings_template.py <<EOF | ||||
| cat >>zproject/prod_settings_template.py <<EOF | ||||
| DEBUG = False | ||||
| EOF | ||||
| cat >> zproject/dev-secrets.conf <<EOF | ||||
| cat >>zproject/dev-secrets.conf <<EOF | ||||
| [secrets] | ||||
| local_database_password = '' | ||||
| secret_key = 'not_used_here' | ||||
| @@ -96,8 +99,8 @@ EOF | ||||
| # We don't need duplicate copies of emoji with hashed paths, and they would break markdown | ||||
| find prod-static/serve/generated/emoji/images/emoji/ -regex '.*\.[0-9a-f]+\.png' -delete | ||||
|  | ||||
| echo "$GITID" > build_id | ||||
| echo "$version" > version | ||||
| echo "$GITID" >build_id | ||||
| echo "$version" >version | ||||
|  | ||||
| cd "$TMPDIR" | ||||
|  | ||||
|   | ||||
| @@ -2,4 +2,4 @@ | ||||
| set -e | ||||
|  | ||||
| cd "$(dirname "$0")/.." | ||||
| git describe --tags --match='[0-9]*' > zulip-git-version || true | ||||
| git describe --tags --match='[0-9]*' >zulip-git-version || true | ||||
|   | ||||
| @@ -92,7 +92,7 @@ RUN apt-get update \ | ||||
|     memcached rabbitmq-server redis-server \ | ||||
|     hunspell-en-us supervisor libssl-dev puppet \ | ||||
|     gettext libffi-dev libfreetype6-dev zlib1g-dev \ | ||||
|     libjpeg-dev libldap2-dev libmemcached-dev \ | ||||
|     libjpeg-dev libldap2-dev \ | ||||
|     libxml2-dev libxslt1-dev libpq-dev moreutils \ | ||||
|     {extra_packages} | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,7 @@ echo "Test suite is running under $(python --version)." | ||||
| set -e | ||||
| set -x | ||||
|  | ||||
| ./tools/lint --groups=backend --skip=gitlint,mypy  # gitlint disabled because flaky | ||||
| ./tools/lint --groups=backend --skip=gitlint,mypy # gitlint disabled because flaky | ||||
| ./tools/test-tools | ||||
| # We need to pass a parallel level to test-backend because CircleCI's | ||||
| # docker setup means the auto-detection logic sees the ~36 processes | ||||
|   | ||||
| @@ -5,7 +5,7 @@ source tools/ci/activate-venv | ||||
| set -e | ||||
| set -x | ||||
|  | ||||
| ./tools/lint --groups=frontend --skip=gitlint  # gitlint disabled because flaky | ||||
| ./tools/lint --groups=frontend --skip=gitlint # gitlint disabled because flaky | ||||
|  | ||||
| # Run the node tests first, since they're fast and deterministic | ||||
| ./tools/test-js-with-node --coverage | ||||
|   | ||||
| @@ -32,10 +32,10 @@ fi | ||||
| # .circleci/config.yml | ||||
| mv /tmp/tmp.*/zulip-server-test.tar.gz /tmp/ | ||||
| cp -a \ | ||||
|    tools/ci/success-http-headers.template.txt \ | ||||
|    tools/ci/production-install \ | ||||
|    tools/ci/production-verify \ | ||||
|    tools/ci/production-upgrade-pg \ | ||||
|    tools/ci/production-extract-tarball \ | ||||
|    \ | ||||
|    /tmp/ | ||||
|     tools/ci/success-http-headers.template.txt \ | ||||
|     tools/ci/production-install \ | ||||
|     tools/ci/production-verify \ | ||||
|     tools/ci/production-upgrade-pg \ | ||||
|     tools/ci/production-extract-tarball \ | ||||
|     \ | ||||
|     /tmp/ | ||||
|   | ||||
| @@ -11,8 +11,11 @@ APT_OPTIONS=(-o 'Dpkg::Options::=--force-confdef' -o 'Dpkg::Options::=--force-co | ||||
| apt-get update | ||||
|  | ||||
| if [ -f /etc/os-release ]; then | ||||
|     os_info="$(. /etc/os-release; printf '%s\n' "$VERSION_CODENAME")" | ||||
|     { read -r os_version_codename || true; } <<< "$os_info" | ||||
|     os_info="$( | ||||
|         . /etc/os-release | ||||
|         printf '%s\n' "$VERSION_CODENAME" | ||||
|     )" | ||||
|     { read -r os_version_codename || true; } <<<"$os_info" | ||||
| fi | ||||
|  | ||||
| if ! apt-get dist-upgrade -y "${APT_OPTIONS[@]}"; then | ||||
|   | ||||
| @@ -12,7 +12,9 @@ NOREPLY_EMAIL_ADDRESS = 'noreply@circleci.example.com' | ||||
| ALLOWED_HOSTS = [] | ||||
| EOF | ||||
|  | ||||
| echo; echo "Now testing that the supervisord jobs are running properly"; echo | ||||
| echo | ||||
| echo "Now testing that the supervisord jobs are running properly" | ||||
| echo | ||||
| sleep 15 # Guaranteed to have a working supervisord process get an extra digit | ||||
| if supervisorctl status | grep -vq RUNNING || supervisorctl status | sed 's/^.*uptime //' | grep -q 0:00:0; then | ||||
|     set +x | ||||
| @@ -33,16 +35,18 @@ if supervisorctl status | grep -vq RUNNING || supervisorctl status | sed 's/^.*u | ||||
| fi | ||||
|  | ||||
| # TODO: Ideally this would test actually logging in, but this is a start. | ||||
| echo; echo "Now testing that the newly installed server's homepage loads"; echo | ||||
| echo | ||||
| echo "Now testing that the newly installed server's homepage loads" | ||||
| echo | ||||
|  | ||||
| wget https://localhost -O /tmp/index.html --no-check-certificate -S 2> /tmp/wget-output || true # || true so we see errors.log if this 500s | ||||
| grep -vi '\(Vary\|Content-Language\|expires\|issued by\|modified\|saved\|[.][.][.]\|Date\|[-][-]\)' /tmp/wget-output > /tmp/http-headers-processed | ||||
| wget https://localhost -O /tmp/index.html --no-check-certificate -S 2>/tmp/wget-output || true # || true so we see errors.log if this 500s | ||||
| grep -vi '\(Vary\|Content-Language\|expires\|issued by\|modified\|saved\|[.][.][.]\|Date\|[-][-]\)' /tmp/wget-output >/tmp/http-headers-processed | ||||
|  | ||||
| nginx_version="$(nginx -v 2>&1 | awk '{print $3, $4}')" | ||||
|  | ||||
| # Simplify the diff by getting replacing 4-5 digit length numbers with <Length>. | ||||
| sed -i 's|Length: [0-9]\+\( [(][0-9]\+[.][0-9]K[)]\)\?|Length: <Length>|' /tmp/http-headers-processed | ||||
| sed -i -e 's|Length: [0-9]\+\( [(][0-9]\+[.][0-9]K[)]\)\?|Length: <Length>|' -e "s|{nginx_version_string}|$nginx_version|g"  /tmp/success-http-headers.template.txt | ||||
| sed -i -e 's|Length: [0-9]\+\( [(][0-9]\+[.][0-9]K[)]\)\?|Length: <Length>|' -e "s|{nginx_version_string}|$nginx_version|g" /tmp/success-http-headers.template.txt | ||||
| if ! diff -ur /tmp/http-headers-processed /tmp/success-http-headers.template.txt; then | ||||
|     set +x | ||||
|     echo | ||||
| @@ -58,10 +62,12 @@ if ! diff -ur /tmp/http-headers-processed /tmp/success-http-headers.template.txt | ||||
| fi | ||||
|  | ||||
| # Start the RabbitMQ queue worker related section | ||||
| echo; echo "Now confirming all the RabbitMQ queue processors are correctly registered!"; echo | ||||
| echo | ||||
| echo "Now confirming all the RabbitMQ queue processors are correctly registered!" | ||||
| echo | ||||
| # These hacky shell scripts just extract the sorted list of queue processors, running and expected | ||||
| supervisorctl status | cut -f1 -dR | cut -f2- -d: | grep events | cut -f1 -d" " | cut -f3- -d_ | cut -f1 -d- | sort -u > /tmp/running_queue_processors.txt | ||||
| su zulip -c /home/zulip/deployments/current/scripts/lib/queue_workers.py | grep -v ^test$ | sort -u > /tmp/expected_queue_processors.txt | ||||
| supervisorctl status | cut -f1 -dR | cut -f2- -d: | grep events | cut -f1 -d" " | cut -f3- -d_ | cut -f1 -d- | sort -u >/tmp/running_queue_processors.txt | ||||
| su zulip -c /home/zulip/deployments/current/scripts/lib/queue_workers.py | grep -v ^test$ | sort -u >/tmp/expected_queue_processors.txt | ||||
| if ! diff /tmp/expected_queue_processors.txt /tmp/running_queue_processors.txt >/dev/null; then | ||||
|     set +x | ||||
|     echo "FAILURE: Runnable queue processors declared in zerver/worker/queue_processors.py " | ||||
| @@ -72,7 +78,9 @@ if ! diff /tmp/expected_queue_processors.txt /tmp/running_queue_processors.txt > | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| echo; echo "Now running RabbitMQ consumer Nagios tests"; echo | ||||
| echo | ||||
| echo "Now running RabbitMQ consumer Nagios tests" | ||||
| echo | ||||
| # First run the check that usually runs in cron and populates the state files | ||||
| /home/zulip/deployments/current/scripts/nagios/check-rabbitmq-consumers | ||||
|  | ||||
| @@ -93,10 +101,12 @@ done | ||||
|  | ||||
| # Some of the Nagios tests have been temporarily disabled to work | ||||
| # around a Travis CI infrastructure issue. | ||||
| echo; echo "Now running additional Nagios tests"; echo | ||||
| if ! /usr/lib/nagios/plugins/zulip_app_frontend/check_queue_worker_errors || \ | ||||
|    ! su zulip -c /usr/lib/nagios/plugins/zulip_postgres_appdb/check_fts_update_log; then # || \ | ||||
| #   ! su zulip -c "/usr/lib/nagios/plugins/zulip_app_frontend/check_send_receive_time --site=https://127.0.0.1/api --nagios --insecure"; then | ||||
| echo | ||||
| echo "Now running additional Nagios tests" | ||||
| echo | ||||
| if ! /usr/lib/nagios/plugins/zulip_app_frontend/check_queue_worker_errors \ | ||||
|     || ! su zulip -c /usr/lib/nagios/plugins/zulip_postgres_appdb/check_fts_update_log; then # || \ | ||||
|     #   ! su zulip -c "/usr/lib/nagios/plugins/zulip_app_frontend/check_send_receive_time --site=https://127.0.0.1/api --nagios --insecure"; then | ||||
|     set +x | ||||
|     echo | ||||
|     echo "FAILURE: Nagios checks don't pass:" | ||||
|   | ||||
| @@ -17,11 +17,11 @@ if [ $# -ne 0 ] && [ "$1" == "--reviews" ]; then | ||||
| fi | ||||
| push_args=() | ||||
|  | ||||
| function is_merged { | ||||
| function is_merged() { | ||||
|     ! git rev-list -n 1 origin/master.."$1" | grep -q . | ||||
| } | ||||
|  | ||||
| function clean_ref { | ||||
| function clean_ref() { | ||||
|     ref="$1" | ||||
|     case "$ref" in | ||||
|         */master | */HEAD) | ||||
|   | ||||
| @@ -8,12 +8,12 @@ | ||||
| # Do not invoke gitlint if commit message is empty | ||||
| if grep -q '^[^#]' "$1"; then | ||||
|     lint_cmd="cd ~/zulip && python -m gitlint.cli" | ||||
|     if \ | ||||
|         if [ -z "$VIRTUAL_ENV" ] && command -v vagrant > /dev/null && [ -e .vagrant ]; then | ||||
|     if | ||||
|         if [ -z "$VIRTUAL_ENV" ] && command -v vagrant >/dev/null && [ -e .vagrant ]; then | ||||
|             ! vagrant ssh -c "$lint_cmd" | ||||
|         else | ||||
|             ! eval "$lint_cmd" | ||||
|         fi < "$1" | ||||
|         fi <"$1" | ||||
|     then | ||||
|         echo "WARNING: Your commit message does not match Zulip's style guide." | ||||
|     fi | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| #!/usr/bin/env bash | ||||
|  | ||||
| function error_out { | ||||
| function error_out() { | ||||
|     echo -en '\e[0;31m' | ||||
|     echo "$1" | ||||
|     echo -en '\e[0m' | ||||
|   | ||||
| @@ -390,6 +390,8 @@ def main(options: argparse.Namespace) -> "NoReturn": | ||||
|  | ||||
|     # Install shellcheck. | ||||
|     run_as_root(["tools/setup/install-shellcheck"]) | ||||
|     # Install shfmt. | ||||
|     run_as_root(["tools/setup/install-shfmt"]) | ||||
|  | ||||
|     # Install semgrep. | ||||
|     run_as_root(["tools/setup/install-semgrep"]) | ||||
|   | ||||
| @@ -77,6 +77,9 @@ def run() -> None: | ||||
|                                   "(zerver/openapi/zulip.yaml) ") | ||||
|     linter_config.external_linter('shellcheck', ['shellcheck', '-x', '-P', 'SCRIPTDIR'], ['sh'], | ||||
|                                   description="Standard shell script linter.") | ||||
|     linter_config.external_linter('shfmt', ['shfmt'], ['sh'], | ||||
|                                   check_arg='-d', fix_arg='-w', | ||||
|                                   description="Formats shell scripts") | ||||
|     command = ['tools/run-mypy', '--quiet'] | ||||
|     if args.force: | ||||
|         command.append('--force') | ||||
|   | ||||
| @@ -18,7 +18,7 @@ if [ ${#changed_files} -eq 0 ]; then | ||||
|     exit 0 | ||||
| fi | ||||
|  | ||||
| if [ -z "$VIRTUAL_ENV" ] && command -v vagrant > /dev/null && [ -e .vagrant ]; then | ||||
| if [ -z "$VIRTUAL_ENV" ] && command -v vagrant >/dev/null && [ -e .vagrant ]; then | ||||
|     vcmd="/srv/zulip/tools/lint --skip=gitlint --force $(printf '%q ' "${changed_files[@]}") || true" | ||||
|     echo "Running lint using vagrant..." | ||||
|     vagrant ssh -c "$vcmd" | ||||
|   | ||||
| @@ -15,12 +15,15 @@ WARNING='\033[93m' | ||||
| ENDC='\033[0m' | ||||
|  | ||||
| # Make the script independent of the location from where it is executed | ||||
| PARENT_PATH=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) | ||||
| PARENT_PATH=$( | ||||
|     cd "$(dirname "${BASH_SOURCE[0]}")" | ||||
|     pwd -P | ||||
| ) | ||||
| cd "$PARENT_PATH" | ||||
| mkdir -p ../var/log | ||||
| LOG_PATH="../var/log/provision.log" | ||||
|  | ||||
| echo "PROVISIONING STARTING." >> $LOG_PATH | ||||
| echo "PROVISIONING STARTING." >>$LOG_PATH | ||||
|  | ||||
| # PYTHONUNBUFFERED is important to ensure that tracebacks don't get | ||||
| # lost far above where they should be in the output. | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| #!/usr/bin/env bash | ||||
| set -e | ||||
|  | ||||
| usage () { | ||||
| usage() { | ||||
|     cat >&2 <<EOF | ||||
| usage: $0 PULL_REQUEST_ID [REMOTE] | ||||
|  | ||||
| @@ -69,7 +69,7 @@ fi | ||||
| pr_url=https://api.github.com/repos/"${repo_fq}"/pulls/"${pr_id}" | ||||
| pr_details="$(curl -s "$pr_url")" | ||||
|  | ||||
| pr_jq () { | ||||
| pr_jq() { | ||||
|     echo "$pr_details" | jq "$@" | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -4,17 +4,15 @@ set -x | ||||
|  | ||||
| export DJANGO_SETTINGS_MODULE=zproject.test_settings | ||||
|  | ||||
| create_zulip_test() | ||||
| { | ||||
| psql -v ON_ERROR_STOP=1 -h localhost postgres zulip_test <<EOF | ||||
| create_zulip_test() { | ||||
|     psql -v ON_ERROR_STOP=1 -h localhost postgres zulip_test <<EOF | ||||
| DROP DATABASE IF EXISTS zulip_test; | ||||
| CREATE DATABASE zulip_test TEMPLATE zulip_test_base; | ||||
| EOF | ||||
| } | ||||
|  | ||||
| create_zulip_test_template() | ||||
| { | ||||
|     psql -v ON_ERROR_STOP=1 -h localhost postgres zulip_test << EOF | ||||
| create_zulip_test_template() { | ||||
|     psql -v ON_ERROR_STOP=1 -h localhost postgres zulip_test <<EOF | ||||
| DROP DATABASE IF EXISTS zulip_test_template; | ||||
| CREATE DATABASE zulip_test_template TEMPLATE zulip_test; | ||||
| EOF | ||||
| @@ -41,7 +39,7 @@ create_zulip_test | ||||
|     zerver.UserProfile zerver.Stream zerver.Recipient \ | ||||
|     zerver.Subscription zerver.Message zerver.Huddle zerver.Realm \ | ||||
|     zerver.UserMessage zerver.Client \ | ||||
|     zerver.DefaultStream > zerver/tests/fixtures/messages.json | ||||
|     zerver.DefaultStream >zerver/tests/fixtures/messages.json | ||||
|  | ||||
| # create pristine template database, for fast fixture restoration after tests are run. | ||||
| create_zulip_test_template | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| #!/usr/bin/env bash | ||||
| set -e | ||||
|  | ||||
| usage () { | ||||
| usage() { | ||||
|     cat >&2 <<EOF | ||||
| usage: $0 PULL_REQUEST_ID [REMOTE] | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,6 @@ if ! [ -d ".git/hooks/" ]; then | ||||
|     exit 1 | ||||
| fi | ||||
|  | ||||
| for hook in pre-commit commit-msg | ||||
| do | ||||
| for hook in pre-commit commit-msg; do | ||||
|     ln -snf ../../tools/"$hook" .git/hooks/ | ||||
| done | ||||
|   | ||||
| @@ -1,11 +1,10 @@ | ||||
| #!/usr/bin/env bash | ||||
| set -e | ||||
|  | ||||
| run() | ||||
| { | ||||
| run() { | ||||
|     PGHOST=localhost PGUSER=zulip \ | ||||
|         "$(dirname "$0")/../../scripts/setup/terminate-psql-sessions" zulip_test zulip_test_base zulip_test_template | ||||
|     psql -v ON_ERROR_STOP=1 -h localhost postgres zulip_test << EOF | ||||
|     psql -v ON_ERROR_STOP=1 -h localhost postgres zulip_test <<EOF | ||||
| DROP DATABASE IF EXISTS zulip_test; | ||||
| CREATE DATABASE zulip_test TEMPLATE zulip_test_template; | ||||
| EOF | ||||
|   | ||||
| @@ -8,7 +8,7 @@ email=iago@zulip.com | ||||
| mkdir -p var/casper | ||||
|  | ||||
| password=$(./manage.py print_initial_password "$email" | grep -F "$email" | awk '{ print $2 }') | ||||
| cat > var/casper/test_credentials.js <<EOF | ||||
| cat >var/casper/test_credentials.js <<EOF | ||||
| // Generated by tools/setup/generate-test-credentials | ||||
| var test_credentials = {default_user: {username: '$email', password: '$password'}}; | ||||
| try { exports.test_credentials = test_credentials; } catch (e) {} | ||||
|   | ||||
| @@ -6,7 +6,7 @@ tarball=semgrep-v$version-ubuntu-16.04.tgz | ||||
| sha256=8b9437af0540ed9664904f9603d9d6ad011dad46433cba74e524c7753c7732c9 | ||||
| tarball_url=https://github.com/returntocorp/semgrep/releases/download/v$version/$tarball | ||||
|  | ||||
| check_version () { | ||||
| check_version() { | ||||
|     out="$(semgrep --version 2>/dev/null)" && [ "$out" = "$version" ] | ||||
| } | ||||
|  | ||||
| @@ -15,7 +15,7 @@ if ! check_version; then | ||||
|     trap 'rm -r "$tmpdir"' EXIT | ||||
|     cd "$tmpdir" | ||||
|     wget -nv "$tarball_url" | ||||
|     sha256sum -c <<< "$sha256  $tarball" | ||||
|     sha256sum -c <<<"$sha256  $tarball" | ||||
|     tar -xzf "$tarball" -C /usr/local/lib/ semgrep-files/ | ||||
|     ln -sf /usr/local/lib/semgrep-files/semgrep /usr/local/bin/semgrep | ||||
|     ln -sf /usr/local/lib/semgrep-files/semgrep-core /usr/local/bin/semgrep-core | ||||
|   | ||||
| @@ -5,7 +5,7 @@ version=0.7.1 | ||||
| tarball="shellcheck-v$version.linux.x86_64.tar.xz" | ||||
| sha256=64f17152d96d7ec261ad3086ed42d18232fcb65148b44571b564d688269d36c8 | ||||
|  | ||||
| check_version () { | ||||
| check_version() { | ||||
|     out="$(shellcheck --version 2>/dev/null)" && [[ "$out" = *" | ||||
| version: $version | ||||
| "* ]] | ||||
| @@ -16,7 +16,7 @@ if ! check_version; then | ||||
|     trap 'rm -r "$tmpdir"' EXIT | ||||
|     cd "$tmpdir" | ||||
|     wget -nv "https://github.com/koalaman/shellcheck/releases/download/v$version/$tarball" | ||||
|     sha256sum -c <<< "$sha256 $tarball" | ||||
|     sha256sum -c <<<"$sha256 $tarball" | ||||
|     tar -xJf "$tarball" --no-same-owner --strip-components=1 -C /usr/local/bin "shellcheck-v$version/shellcheck" | ||||
|     check_version | ||||
| fi | ||||
|   | ||||
							
								
								
									
										21
									
								
								tools/setup/install-shfmt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								tools/setup/install-shfmt
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| #!/usr/bin/env bash | ||||
| set -eu | ||||
|  | ||||
| version=3.1.2 | ||||
| binary="shfmt_v${version}_linux_amd64" | ||||
| sha256=c5794c1ac081f0028d60317454fe388068ab5af7740a83e393515170a7157dce | ||||
|  | ||||
| check_version() { | ||||
|     out="$(shfmt --version 2>/dev/null)" && [ "$out" = "v$version" ] | ||||
| } | ||||
|  | ||||
| if ! check_version; then | ||||
|     tmpdir="$(mktemp -d)" | ||||
|     trap 'rm -r "$tmpdir"' EXIT | ||||
|     cd "$tmpdir" | ||||
|     wget -nv "https://github.com/mvdan/sh/releases/download/v3.1.2/$binary" | ||||
|     sha256sum -c <<<"$sha256 $binary" | ||||
|     chmod +x "$binary" | ||||
|     mv "$binary" /usr/local/bin/shfmt | ||||
|     check_version | ||||
| fi | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user