9815bd1f5b
implement hosting package option choice view
...
- implement new hostingpackages.views.HostingOptionChoices
- add URL pattern 'hosting_option_choices' to hostingpackages.urls
- add template hostingpackages/customerhostingpackage_option_choices.html
- link from hostingpackages/customerhostingpackage_detail.html to
'hosting_package_choices'
2015-01-25 14:04:32 +01:00
2e4efe7839
implement password change for mailboxes
...
- implement managemails.forms.ChangeMailboxPasswordForm
- extract code for determining hosting package and customer from URL into
HostingPackageAndCustomerMixin
- implement managemails.views.ChangeMailboxPassword
- add new URL pattern 'change_mailbox_password' to managemails.urls
- add template managemails/mailbox_setpassword.html
- link from template hostingpackages/customerhostingpackage_detail.html to
change_mailbox_password
- add german translation for new strings
- document new feature in changelog
2015-01-25 12:49:31 +01:00
d1119331d8
enable mailbox creation
...
- add managemails.urls to gnuviechadmin.urls
- add link to create_mailbox to customerhostingpackage_detail.html template
- document feature in changelog
2015-01-25 12:16:18 +01:00
449af174ec
implement create_mailbox functionality
...
- implement managemails.forms.CreateMailboxForm
- implement managemails.views.CreateMailbox
- add url pattern 'create_mailbox' to managemails.urls
- add templates managemails/base.html and managemails/mailbox_create.html
- add german translation
- add generated code documentation
2015-01-25 12:10:17 +01:00
2b989799ab
refactor osusers password forms
...
- use PasswordModelFormMixin from gvawebcore instead of own implementation in
ChangeOsUserPasswordForm
- change import for PASSWORD_MISMATCH_ERROR
2015-01-25 12:02:31 +01:00
9883db6fa2
implement new module gvawebcore to provide common code
...
- add gvawebcore.forms.PasswordModelFormMixin
- add generated documentation
- add german translation
2015-01-25 12:00:30 +01:00
1ab832b94a
update german translation
2015-01-25 00:58:31 +01:00
1690cace4d
implement hosting domain creation
...
- implement domains.views.CreateHostingDomain
- define new URL create_hosting_domain in domains.urls
- add domains app URLs to gnuviechadmin.urls
- add templates domains/base.html and domains/hostingdomain_create.html
- link from hostingpackage detail page to domain creation view
2015-01-25 00:40:43 +01:00
8615394c2f
add domain creation form and model code
...
- implement domains.forms.CreateHostingDomainForm
- implement domains.models.HostingDomainManager.create_for_hosting_package that
takes care of creating the necessary database objects for hosting domains
assigned to a hosting package
2015-01-25 00:38:42 +01:00
bf91664f6e
add link hosting package list templates
...
- add link to hosting package list for staff users in top navigation
- add new template hostingpackages/customerhostingpackage_admin_list.html
2015-01-24 23:37:20 +01:00
4bffa5ec62
add new views to hostingpackages app
...
- rename CreateHostingPackage to CreateCustomerHostingPackage
- add new CreateHostingPackage that allows to select a customer
- rename CreateHostingPackageForm to CreateCustomerHostingPackageForm
- add new CreateHostingPackageForm that has a customer field
- add new URL pattern create_hosting_package, rename existing pattern to
create_customer_hosting_package
- modify template dashboard/user_dashboard to use the correct URL name
2015-01-24 23:34:15 +01:00
7991d2bf4f
setup template structure for hosting package
...
- add panels for hosting package options, domains, mailboxes and databases
- list existing objects assigned to the hosting package
2015-01-24 22:33:09 +01:00
0def7e3a7b
add more properties to CustomerHostingPackage
...
- add get_hostingoptions method and property hostingoptions
- add get_package_space method to determine disk space provided by the
hosting package itself
- add get_databases_flat and property databases to get a list of databases
assigned to the hosting package
- add may_add_database to determine whether additional databases are allowed
by the hosting package's options
2015-01-24 22:29:57 +01:00
2c170ebcc1
update to font-awesome 4.3.0
2015-01-24 22:29:02 +01:00
03e5c74d7a
add model features to hostingpackages
...
- add properties mailboxes, used_mailbox_count, mailbox_count and
may_add_mailbox to CustomerHostingPackage class
- use new properties in template dashboard/user_dashboard.html
2015-01-24 22:26:27 +01:00
8a84c9660a
add MailDomain.get_mailaddresses and mailaddresses property
2015-01-24 21:01:37 +01:00
e04132bd24
improve managemails app
...
- add managemails.apps to give a more meaningful title in the admin site
- add verbose names to MailAddressMailbox fields
- implement managemails.models.Mailbox.get_mailaddresses and a corresponding
property mailaddresses
2015-01-24 20:58:20 +01:00
75e4892835
add admin site support for hosting domains
2015-01-24 19:24:33 +01:00
0c291f0510
implement model changes
...
- add new domains.apps.AppConfig to allow translatable app description for
domains app
- link domains to a customer
- extract common functionality from domains.models.MailDomain into abstract
domains.models.DomainBase
- add separate domains.models.HostingDomain to allow for generic external
domains
- add new hostingpackages.models.CustomerHostingPackageDomain to assign hosting
domains to hosting packages
2015-01-24 19:10:58 +01:00
a3e3e2a76f
add missing german translations
2015-01-24 18:27:12 +01:00
150366a524
plug users and hosting packages together
...
- document new feature in changelog
- add autogenerated documentation for osusers.urls and osusers.views
- add osuser URLs to gnuviechadmin.urls
- implement get_absolute_url in hostingpackages.models.CustomerHostingPackage
- use set_ldap_user_password instead of create_ldap_user for existing OS users
in osusers.models.User.set_password
- add URL pattern set_osuser_password in osusers.urls
- implement osusers.views.SetOsUserPassword to set the password of an existing
operating system user
- link to hosting package detail view on user dashboard
- add template hostingpackages/customerhostingpackage_detail.html
- add template osusers/user_setpassword.html
2015-01-24 16:26:32 +01:00
0d08d9876b
implement CustomerHostingPackageDetails view
2015-01-24 16:25:18 +01:00
0baee51d19
introduce new settings for groups and upload server
2015-01-24 16:22:09 +01:00
68c0bfbb4e
implement osusers.forms.ChangeOsUserPasswordForm
...
- implement new form for password changes
- use osusers.forms.PASSWORD_MISMATCH_ERROR in osusers.admin
- add autogenerated documentation
2015-01-24 16:21:47 +01:00
3a9110dc30
refactor dashboard.views.UserDashboardView
...
- use gvacommon.viewmixins.StaffOrSelfLoginRequiredMixin instead of custom
implementation
2015-01-24 16:12:23 +01:00
6490b71c2b
Merge commit '3c4d34cce56dfb75e0e4115c3938ce5b2e6efd83' into feature/set_sftp_password
...
* commit '3c4d34cce56dfb75e0e4115c3938ce5b2e6efd83':
implement viewmixins.StaffOrSelfLoginRequiredMixin
2015-01-24 15:41:37 +01:00
888a2463c4
create system user when creating a new hosting package
2015-01-22 00:20:06 +01:00
d4f68a155c
fix some test issues
2015-01-22 00:19:16 +01:00
680f091cba
incomplete create_hosting_package view
...
- add staff user view create_hosting_package
- add hostingpackages.forms.CreateHostingPackageForm
- add hostingpackages.views.CreateHostingPackage
- add link for staff users on user_dashboard page
- add url pattern
- TODO: implement saving the hosting package, update docs
2015-01-20 00:51:05 +01:00
9890248e80
fix issue with mailbox count calculation
...
- use 0 if no mailbox option is assigned to the hosting package
2015-01-20 00:49:19 +01:00
f211b535cf
remove unused LogoutView and corresponding url pattern
2015-01-20 00:47:24 +01:00
d78bad06b7
add docstrings to managemails.models
2015-01-19 23:00:01 +01:00
35eceb3307
add task stub for ldaptasks.tasks.set_ldap_user_password
2015-01-19 22:43:29 +01:00
41af99561c
adapt documentation to changed module structure
2015-01-19 21:54:13 +01:00
5b41d93898
refactor osusers.tasks into fileservertasks and ldaptasks
2015-01-19 21:44:57 +01:00
7ab58575eb
remove newline at EOF
2015-01-18 16:25:41 +01:00
30aa09c0af
Merge branch 'master' into feature/hostingpackages
...
* master:
load Font Mfizz in base template head
add userdb template tags
add Font Mfizz from http://mfizz.com/oss/font-mfizz
merged docs/changelog.rst
2015-01-18 16:24:53 +01:00
d7d41d2fd9
render hosting package table on user dashboard
2015-01-18 16:20:47 +01:00
d34f3596ae
implement get_context_data for UserDashboardView
...
- expose user's hosting packages in UserDashboardView.get_context_data
2015-01-18 16:19:28 +01:00
0e32aff544
add CustomerHostingPackage information aggration methods
...
- add get_disk_space, get_used_mailboxes, get_mailboxes and get_database
methods for hostingpackages.models.CustomerHostingPackage
2015-01-18 16:14:47 +01:00
c72d711d35
load Font Mfizz in base template head
2015-01-18 16:07:06 +01:00
4c8b173e95
add userdb template tags
...
- add changelog entry
- add generated documentation for userdbs.templatetags.userdb
- add userdb template tags db_type_icon_class and db_type_name
- remove empty userdbs.views
2015-01-18 16:05:29 +01:00
56675f6c4d
add Font Mfizz from http://mfizz.com/oss/font-mfizz
2015-01-18 16:01:24 +01:00
95e15806c6
fix foreign key for CustomerMailboxOption
2015-01-18 16:00:18 +01:00
4f2ebbae63
add hostingpackages api doc
...
- add to docs/code.rst toctree
- add new docs/code/hostingpackages.rst containing the autodoc directives
- document undocumented code in hostingpackages app
- update translation templates
2015-01-18 13:37:21 +01:00
12455e2d99
add hostingpackages app to INSTALLED_APPS
2015-01-18 13:22:31 +01:00
9f63fbbb5d
Add new hostingpackages app
...
- implement models for hosting packages, hosting options and customer
specific variants
- implement admin interface
- add documentation
2015-01-18 13:22:06 +01:00
8fd75d5486
define proper allauth production settings
2015-01-18 00:47:59 +01:00
e121c9bf3d
load jquery and html5shim with same URL schema as the rest of the site
2015-01-18 00:28:47 +01:00
8ab15e7680
remove empty tests module
2015-01-17 23:27:03 +01:00
9d1e315fb4
add socialaccount connections link to user dropdown
2015-01-17 23:09:09 +01:00
92b6e8a8cb
add templates for allauth
2015-01-17 23:08:41 +01:00
7d6e0386d8
restructure base html to display properly on small devices
2015-01-17 22:05:47 +01:00
d906b9e497
add font-awesome link and put account actions in a dropdown
2015-01-17 21:42:13 +01:00
35016faba0
add font-awesome css and fonts
2015-01-17 21:41:32 +01:00
ab313a2a66
add allauth configuration and message tags
2015-01-17 17:50:59 +01:00
286c477efc
add allauth settings and URLs
2015-01-17 16:28:19 +01:00
8cf6aab643
add admin site link for staff in base template
2015-01-17 16:14:55 +01:00
9fa1944c31
add german translation
...
- add django.po for apps and templates
- add locale directory to LOCALE_PATHS setting
2015-01-17 16:06:25 +01:00
2bc278ae92
implement login and logout
...
- add LogoutView to dashboard app
- define logout URL pattern
- only use login view from django.contrib.auth.views instead of including all
auth URLs
- change base template to support login/logout
- add template dashboard/user_dashboard.html
2015-01-17 15:42:47 +01:00
1deed46d34
add templates for anonymous user dashboard and login
2015-01-17 14:05:04 +01:00
8a29e4001c
add dashboard app
...
- add new dashboard app providing dashboards for anonymous and logged in users
- cleanup gnuviechadmin.urls:
- import dashboard.urls and include dashboard_urls at URL root
- import authentication urls and include them below /auth
- remove generated commented code
2015-01-17 14:05:04 +01:00
8884b8b042
add django-crispy-forms
...
- add django-crispy-forms to requirements
- add crispy_forms app to settings.base
- add CRISPY_TEMPLATE_PACK setting to settings.base
2015-01-17 14:05:04 +01:00
961a2f471b
add migration for managemails ordering
2015-01-17 14:05:04 +01:00
19390d369a
add admin list filtering and ordering for mail addresses and mailboxes
2015-01-17 12:25:54 +01:00
ba39e3f765
set database password at the appropriate place
2015-01-10 18:43:43 +01:00
780a670565
remove username argument from delete_pgsql_database call
2015-01-09 19:38:30 +01:00
1af553c1fa
remove username argument of pgsqltasks.tasks.delete_pgsql_database
2015-01-09 19:37:12 +01:00
706a4ef177
fix documentation issues
...
- add autotask directives for pgsqltasks and mysqltasks
- remove duplicate Celery_ link target
2015-01-04 22:47:14 +01:00
6edbe17a3b
make userdbs admin work properly
...
* add userdbs app docstring
* add userdbs.app.UserdbsAppConfig
* implement userdbs.admin.DatabaseUserCreationForm,
userdbs.admin.UserDatabaseCreationForm, userdbs.admin.DatabaseUserAdmin,
userdbs.admin.UserDatabaseAdmin
* add docstrings to userdbs.models
* rename userdbs.models.DatabaseUserManager._get_next_username to
_get_next_dbuser_name
* fix format string issues in userdbs.models.DatabaseUserManager and
userdbs.UserDatabaseManager._get_next_dbname
* delete related databases in userdbs.models.UserDatabase.delete
2015-01-04 22:35:55 +01:00
be4ea9cc77
add initial migration for userdbs
2015-01-04 20:24:56 +01:00
8697f84381
add admin and a bit of documentation
2015-01-04 20:23:49 +01:00
3eef84d373
add new incomplete userdbs app
2015-01-04 20:22:58 +01:00
e7ae0054b5
add mysqltasks and pgsqltasks with placeholders for the real tasks
2015-01-04 18:06:44 +01:00
ab50907b97
set default locale to en-us to avoid translated migrations
2015-01-04 17:56:38 +01:00
0a17528c0c
add migration for verbose_name and verbose_name_plural in osusers.models.User
2015-01-04 17:54:59 +01:00
60301eea46
switch to gvacommon.celeryrouters.GvaRouter
2015-01-01 22:35:55 +01:00
2e2d906f09
Merge commit '546441d49920caf43eb7d33976c2d71ae85f16d5'
...
* commit '546441d49920caf43eb7d33976c2d71ae85f16d5':
unify routers, add support for mysql and pgsql tasks
2015-01-01 22:34:38 +01:00
6bf65bba3b
use taskresults app and delete_ldap_group task
2014-12-29 15:57:03 +01:00
a336af46c2
add taskresults app to handle celery task results
2014-12-29 15:55:57 +01:00
9b4bef0050
add new task delete_ldap_group
2014-12-29 15:22:52 +01:00
f2b8af39a0
define celery timezone, restrict celery content to json
2014-12-29 12:57:02 +01:00
d4e62bf6f3
add german translation
2014-12-27 22:58:57 +01:00
0df67e7154
document osusers code
2014-12-27 22:44:27 +01:00
18e47d73b4
add customer field to osusers.models.User
...
- allow association of os users to Django users (customers)
- adapt admin forms
- add migration
2014-12-27 19:26:16 +01:00
39fd326ac2
allow generated password for new osusers
...
- change osusers.admin.UserCreationForm to allow empty password input which
triggers the creation of a new password
2014-12-27 18:28:37 +01:00
54b99281e3
call create/delete mailbox tasks when saving/deleting mailboxes
2014-12-27 16:31:43 +01:00
505b9c934b
use celery routers from gvacommon
2014-12-27 14:12:48 +01:00
17ca226dc0
Add 'gnuviechadmin/gvacommon/' from commit 'e29646a94714d516d52272fc83d9a15bbc21e488'
...
git-subtree-dir: gnuviechadmin/gvacommon
git-subtree-mainline: 92c6b39e12
git-subtree-split: e29646a947
2014-12-27 14:09:34 +01:00
92c6b39e12
implement automatic creation of mailbox names
...
- create mailbox name when saving new mailboxes in admin
- add MailboxManager that implement get_next_mailbox_name as manager for
Mailbox
2014-12-27 00:24:05 +01:00
8f5812ff29
repair mailbox creation admin
2014-12-27 00:05:14 +01:00
dad9849b48
remove attribute readonly_fields from UserAdmin
2014-12-26 22:38:02 +01:00
57a0d848c9
remove unused import
2014-12-26 21:48:09 +01:00
0b6ac2a478
create directories for new users
...
- use new file tasks to create SFTP and mail base directories for users
- use json serializer as default
- remove TaskResult classes that don't provide any significant benefit
2014-12-26 15:10:36 +01:00
2428a39f19
add stub tasks for file system operations
2014-12-25 18:05:42 +01:00
e877087127
make user and group management more robust
...
- remove TaskResultInline and subclasses
- add custom perform_delete_selected action to UserAdmin and GroupAdmin
- properly clean asynchronous tasks in rabbitmq
- wrap user operations in transactions
2014-12-22 20:07:11 +01:00
6984033444
wrap UserManager.create_user in a transaction
2014-12-17 22:19:44 +01:00
e73e46da3f
update to Django 1.7, remove south_migrations, fix tests
2014-12-17 21:22:37 +01:00
d5b0382f88
update South to 1.0.1, rename migrations to south_migrations
2014-12-17 21:08:14 +01:00
2204f7df43
add osusers.tests.test_tasks.LdapRouterTest
2014-06-01 23:22:13 +02:00
f01c3dbabb
remove empty osusers/views.py
2014-06-01 23:14:16 +02:00
55f77c8e17
Merge branch 'feature/osusers_admin_tests'
2014-06-01 23:11:34 +02:00
fa5f296c0f
add test for UserCreationForm.save_m2m
2014-06-01 23:10:26 +02:00
0a48619f3c
implement osusers.tests.test_admin.DeleteTaskResultAdminTest
2014-06-01 23:05:58 +02:00
6b36cc95ff
really test that update_taskstatus is called
2014-06-01 23:05:28 +02:00
266794d447
add osusers.tests.test_admin.GroupAdminTest
2014-06-01 22:53:38 +02:00
338b575983
add type check
2014-06-01 22:53:29 +02:00
b9d39f31a4
rename test class names from Test* to *Test
2014-06-01 22:41:42 +02:00
09f72fc091
add osusers.tests.test_admin.UserAdminTest
2014-06-01 22:37:43 +02:00
3db6b99a00
add osuser.tests.test_admin.UserCreationFormTest
2014-06-01 22:20:28 +02:00
5cc86b4790
change osusers.admin.UserCreationForm.save_m2m
...
- replace pass with a doc string to explain why this method does nothing
2014-06-01 22:18:16 +02:00
773dbea0fe
implement osusers.tests.test_admin.TaskResultInlineTest
2014-06-01 22:01:04 +02:00
a95c5044bd
remove unused gnuviechadmin.celery.debug_task
2014-06-01 21:29:39 +02:00
a663093433
make sure to not execute LDAP task
2014-06-01 21:28:24 +02:00
15ba5bd653
remove empty managemails.views
2014-06-01 18:32:47 +02:00
32de6257d3
add test for managemails.models.Mailbox.__str__
2014-06-01 18:29:41 +02:00
3407a5ed24
add tests for managemails.admin
2014-06-01 18:25:30 +02:00
33e7fb29af
remove empty domains.views
2014-06-01 16:45:37 +02:00
6a931ad21c
add test for domains admin
2014-06-01 16:44:42 +02:00
842e207acc
complete coverage for osusers.models
...
- add tests for AdditionalGroups methods save, delete and __str__
- add TaskResultTest.test_update_taskstatus_finished
2014-06-01 16:30:14 +02:00
c270a6087e
add osusers.tests.test_models.ShadowTest
2014-06-01 16:09:30 +02:00
20f5686d85
add ShadowManagerTest
2014-06-01 15:42:32 +02:00
b37e44ccfd
add tests for osusers.models.User
...
- fix task name in Group.delete
- remove duplicate task from User.delete
- adapt osusers.tests.test_models.GroupTest.test_delete
- add tests to UserTest
- test_save
- test_delete_only_user
- test_delete_additional_groups
2014-06-01 15:26:01 +02:00
ceeffb6d1c
refactor UserManager.create_user
...
- remove duplicate create_ldap_group task
- create Shadow in User.set_password if necessary
- add test UserManagerTest.test_create_user_tasks for group task
2014-06-01 15:03:15 +02:00
83562ba2bf
implement test for User.set_password, add Shadow.set_password
2014-06-01 14:51:33 +02:00
df9800b827
add tests for osusers.models.UserManager
2014-06-01 14:43:42 +02:00
c45e93be03
add tests for Group and GroupManager
2014-06-01 11:56:42 +02:00
7d9224db63
implement tests for TaskResult
...
- implement TaskResultTest and TaskResultManagerTest
2014-06-01 11:25:30 +02:00
8cec71fe1f
add test for osusers.models.Shadow.__str__
2014-06-01 01:45:50 +02:00
b9dd34d527
add initial osusers unit tests
2014-06-01 01:36:50 +02:00
e8285518a3
fix small group handling bugs
...
- use create_grouptaskresult instead of create for creating
GroupTaskResult
- use group.gid instead of non-existing group.id
2014-06-01 00:33:42 +02:00
59783e986d
implement classes for tracking task status
2014-05-30 21:46:10 +02:00
865f54ab67
use primitive fields instead of models for tasks
...
- modify osusers.tasks and osusers.models to avoid serialization of full
models for celery tasks and use the required fields only
2014-05-30 18:39:51 +02:00
0c5706d886
use YAML for celery serialization
...
- add CELERY_ACCEPT_CONTENT, CELERY_TASK_SERIALIZER and
CELERY_RESULT_SERIALIZER in gnuviechadmin.settings.base
- add pyaml to requirements/base.txt
2014-05-30 18:36:26 +02:00
6a40a5eded
pass groupname only to delete_ldap_group_if_empty
2014-05-30 17:18:42 +02:00
6eb74f5b79
add more ldap tasks
...
- add custom celery router osusers.tasks.LdapRouter
- add tasks add_ldap_user_to_group, delete_ldap_group_if_empty,
delete_ldap_user and remove_ldap_user_from_group
- implement osusers.models.Group.save and osusers.models.Group.delete
- implement save, delete and set_password methods in osusers.models.User
- implement save and delete methods in osusers.models.AdditionalGroup
2014-05-30 17:10:22 +02:00
1e717556ba
refine ldap create commands
...
- define gnuviechadmin.settins.base.CELERY_ROUTES to properly route ldap tasks
- return dummy values from osusers.tasks
- add billiard, kombu and pytz to requirements/base.txt
2014-05-30 12:17:04 +02:00
caab322beb
implement user creation in osusers.admin
...
- add osusers.admin.UserCreationForm
- add dummy osusers.tasks implementation with create_ldap_group and
create_ldap_user
- fix UserManager.get_next_username
- add proper transaction handling in UserManager.create_user
- add calls to create_ldap_user and create_ldap_group to
UserManager.create_user
2014-05-25 23:35:14 +02:00
86b8f03704
add celery configuration to settings
2014-05-25 23:35:06 +02:00
97634bb36a
add celery app to project
2014-05-25 23:34:27 +02:00
23de57e138
move MailDomain admin to domains.admin
2014-05-25 15:21:04 +02:00
ecaff6a4af
move existing MailDomains to domains table
2014-05-25 15:17:08 +02:00
5db6223bc0
introduce new app domains
...
- generate domains app
- duplicate managemails.models.MailDomain as domains.models.MailDomain
- add domains app to gnuviechadmin.settings.base.LOCAL_APPS
- repair managemails.tests.test_models
- fix handling of empty results in osusers.models.GroupManager.get_next_gid and
osusers.models.UserManager.get_next_uid
2014-05-25 14:53:58 +02:00
e132c9a56c
add user creation manager code
...
- add OSUSER_* settings
- add UserManager, GroupManager and ShadowManager for user creation
2014-05-25 00:55:02 +02:00
a85ad4e420
improve osusers model classes
...
- add __str__ methods
- add verbose names and help texts
2014-05-24 23:40:54 +02:00
9d447cac0b
improve osusers admin interface
...
- set user uid to readonly
- set shadow password readonly
- set can_delete on shadow to False
2014-05-24 23:15:14 +02:00
da8ba6ed1d
change Mailbox admin to work with osuser field
2014-05-24 22:56:33 +02:00
f085dab017
let mailboxes reference os users
...
- refer to osuser instead of own home, uid and gid entries in mailboxes
- add data and schema migrations
2014-05-24 22:50:43 +02:00
3de357d394
add migration for timestamp fields
2014-05-24 22:02:14 +02:00
3473b14e62
add timestamps to managemails models
2014-05-24 21:56:30 +02:00