From c91b99cdb1f09cb88a7ceee30721c64d467e1279 Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Tue, 9 Aug 2022 21:44:01 +0300 Subject: [PATCH 01/29] lol --- stack-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stack-compose.yml b/stack-compose.yml index 15e6bdc..0d58883 100644 --- a/stack-compose.yml +++ b/stack-compose.yml @@ -49,4 +49,4 @@ secrets: BACKEND_EMAIL_API_KEY: external: true GOOGLE_CREDS_JSON: - EXTERNAL: true + external: true From 32d636d3ee20dc4c0553c39036cf9bed44d46f21 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Thu, 11 Aug 2022 09:52:58 +0300 Subject: [PATCH 02/29] Disable GOOGLE_SERVICE_ACCOUNT for debugging --- sikweb/settings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sikweb/settings.py b/sikweb/settings.py index b979c15..1584696 100644 --- a/sikweb/settings.py +++ b/sikweb/settings.py @@ -82,7 +82,8 @@ DATABASES = { # Google api settings GROUP_KEY = os.getenv("GROUP_KEY", "") -GOOGLE_SERVICE_ACCOUNT = json.loads(os.getenv("GOOGLE_CREDS_JSON", "{}")) +# GOOGLE_SERVICE_ACCOUNT = json.loads(os.getenv("GOOGLE_CREDS_JSON", "{}")) +GOOGLE_SERVICE_ACCOUNT = json.loads("{}") # JWT authentication SIMPLE_JWT = { From bb0b2a26287b55bd78e299c86cd7b05cd6057e18 Mon Sep 17 00:00:00 2001 From: Aarni Halinen Date: Thu, 11 Aug 2022 11:28:30 +0300 Subject: [PATCH 03/29] Fix kaehmy form --- kaehmy/forms.py | 8 ++++---- .../kaehmy => kaehmy/templates}/checkbox_option.html | 0 2 files changed, 4 insertions(+), 4 deletions(-) rename {templates/kaehmy => kaehmy/templates}/checkbox_option.html (100%) diff --git a/kaehmy/forms.py b/kaehmy/forms.py index 9784c12..38e99a6 100644 --- a/kaehmy/forms.py +++ b/kaehmy/forms.py @@ -6,15 +6,15 @@ from kaehmy.models import PresetRole, CustomRole, Application, Comment, BaseRole class CheckboxSelectMultiple(forms.widgets.CheckboxSelectMultiple): - option_template_name = "kaehmy/checkbox_option.html" + option_template_name = "checkbox_option.html" def create_option( - self, name, value, label, selected, index, subindex=None, attrs=None + self, name, formIterator, label, selected, index, subindex=None, attrs=None ): dic = super(CheckboxSelectMultiple, self).create_option( - name, value, label, selected, index, subindex, attrs + name, formIterator, label, selected, index, subindex, attrs ) - description = PresetRole.objects.get(id=value).description + description = PresetRole.objects.get(id=formIterator.value).description dic["description"] = description return dic diff --git a/templates/kaehmy/checkbox_option.html b/kaehmy/templates/checkbox_option.html similarity index 100% rename from templates/kaehmy/checkbox_option.html rename to kaehmy/templates/checkbox_option.html From 4e59eee200b474198b6bf13e1749d222b08a7ff1 Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Tue, 16 Aug 2022 20:59:19 +0300 Subject: [PATCH 04/29] Enable GOOGLE_SERVICE_ACCOUNT, should work now.. --- sikweb/settings.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sikweb/settings.py b/sikweb/settings.py index 1584696..b979c15 100644 --- a/sikweb/settings.py +++ b/sikweb/settings.py @@ -82,8 +82,7 @@ DATABASES = { # Google api settings GROUP_KEY = os.getenv("GROUP_KEY", "") -# GOOGLE_SERVICE_ACCOUNT = json.loads(os.getenv("GOOGLE_CREDS_JSON", "{}")) -GOOGLE_SERVICE_ACCOUNT = json.loads("{}") +GOOGLE_SERVICE_ACCOUNT = json.loads(os.getenv("GOOGLE_CREDS_JSON", "{}")) # JWT authentication SIMPLE_JWT = { From 6732e30213574fda119c404822bc5f863da33665 Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Tue, 16 Aug 2022 21:26:55 +0300 Subject: [PATCH 05/29] #14 fix paths --- templates/kaehmy/export.html | 2 +- templates/members/settings.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/kaehmy/export.html b/templates/kaehmy/export.html index 9cc34b3..407d0dd 100644 --- a/templates/kaehmy/export.html +++ b/templates/kaehmy/export.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "kaehmy/base.html" %} {% load static %} {% load i18n %} diff --git a/templates/members/settings.html b/templates/members/settings.html index ed6ccc9..1f59a58 100644 --- a/templates/members/settings.html +++ b/templates/members/settings.html @@ -1,4 +1,4 @@ -{% extends "base.html" %} +{% extends "members/base.html" %} {% load static %} {% load i18n %} From a310d51f5ef29476d8ad50e123c6d8c281215dc1 Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Tue, 16 Aug 2022 21:43:04 +0300 Subject: [PATCH 06/29] or not --- sikweb/settings.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sikweb/settings.py b/sikweb/settings.py index b979c15..1584696 100644 --- a/sikweb/settings.py +++ b/sikweb/settings.py @@ -82,7 +82,8 @@ DATABASES = { # Google api settings GROUP_KEY = os.getenv("GROUP_KEY", "") -GOOGLE_SERVICE_ACCOUNT = json.loads(os.getenv("GOOGLE_CREDS_JSON", "{}")) +# GOOGLE_SERVICE_ACCOUNT = json.loads(os.getenv("GOOGLE_CREDS_JSON", "{}")) +GOOGLE_SERVICE_ACCOUNT = json.loads("{}") # JWT authentication SIMPLE_JWT = { From da3a484f6cb1607760bc5d37e8e12b679a777737 Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Tue, 16 Aug 2022 22:24:20 +0300 Subject: [PATCH 07/29] wbn? --- sikweb/settings.py | 3 +-- stack-compose.yml | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sikweb/settings.py b/sikweb/settings.py index 1584696..b979c15 100644 --- a/sikweb/settings.py +++ b/sikweb/settings.py @@ -82,8 +82,7 @@ DATABASES = { # Google api settings GROUP_KEY = os.getenv("GROUP_KEY", "") -# GOOGLE_SERVICE_ACCOUNT = json.loads(os.getenv("GOOGLE_CREDS_JSON", "{}")) -GOOGLE_SERVICE_ACCOUNT = json.loads("{}") +GOOGLE_SERVICE_ACCOUNT = json.loads(os.getenv("GOOGLE_CREDS_JSON", "{}")) # JWT authentication SIMPLE_JWT = { diff --git a/stack-compose.yml b/stack-compose.yml index 0d58883..1165a2e 100644 --- a/stack-compose.yml +++ b/stack-compose.yml @@ -41,6 +41,7 @@ services: - BACKEND_DB_PASSWD - BACKEND_EMAIL_API_KEY - GOOGLE_CREDS_JSON + secrets: BACKEND_SECRET_KEY: external: true From 0026b788b2c6b4f7b37add514e43cb3c9d545c89 Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Tue, 16 Aug 2022 23:00:36 +0300 Subject: [PATCH 08/29] juuh eli --- sikweb/settings.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sikweb/settings.py b/sikweb/settings.py index b979c15..cad33de 100644 --- a/sikweb/settings.py +++ b/sikweb/settings.py @@ -82,7 +82,11 @@ DATABASES = { # Google api settings GROUP_KEY = os.getenv("GROUP_KEY", "") -GOOGLE_SERVICE_ACCOUNT = json.loads(os.getenv("GOOGLE_CREDS_JSON", "{}")) +try: + GOOGLE_SERVICE_ACCOUNT = json.loads(os.getenv("GOOGLE_CREDS_JSON", "{}")) +except: + GOOGLE_SERVICE_ACCOUNT = json.loads("{}") + # JWT authentication SIMPLE_JWT = { From ea9a732803b0aa086eb5abc9daaf27dddc918c46 Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Wed, 17 Aug 2022 23:00:11 +0300 Subject: [PATCH 09/29] Modified paths --- .env.sample | 2 +- production_entrypoint.sh | 4 ++-- sikweb/settings.py | 4 ++-- stack-compose.yml | 8 ++++---- webapp/utils.py | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.env.sample b/.env.sample index 1dcf8b6..7cc953c 100644 --- a/.env.sample +++ b/.env.sample @@ -10,4 +10,4 @@ DB_HOST=db DB_PORT=5432 EMAIL_API_KEY= GROUP_KEY= -GOOGLE_CREDS_JSON='{}' +GOOGLE_CREDS='{}' diff --git a/production_entrypoint.sh b/production_entrypoint.sh index c39f2f1..1415f92 100755 --- a/production_entrypoint.sh +++ b/production_entrypoint.sh @@ -10,8 +10,8 @@ fi if test -f "$DB_PASSWD_FILE"; then export DB_PASSWD=$(cat $DB_PASSWD_FILE) fi -if test -f "$GOOGLE_CREDS_JSON"; then - export GOOGLE_CREDS_JSON=$(cat $GOOGLE_CRED_JSON_FILE) +if test -f "$GOOGLE_CREDS_FILE"; then + export GOOGLE_CREDS=$(cat $GOOGLE_CREDS_FILE) fi # Collect static files diff --git a/sikweb/settings.py b/sikweb/settings.py index cad33de..87a5e69 100644 --- a/sikweb/settings.py +++ b/sikweb/settings.py @@ -83,9 +83,9 @@ DATABASES = { # Google api settings GROUP_KEY = os.getenv("GROUP_KEY", "") try: - GOOGLE_SERVICE_ACCOUNT = json.loads(os.getenv("GOOGLE_CREDS_JSON", "{}")) + GOOGLE_CREDS_JSON = json.loads(os.getenv("GOOGLE_CREDS", "{}")) except: - GOOGLE_SERVICE_ACCOUNT = json.loads("{}") + GOOGLE_CREDS_JSON = json.loads("{}") # JWT authentication diff --git a/stack-compose.yml b/stack-compose.yml index 1165a2e..d780df1 100644 --- a/stack-compose.yml +++ b/stack-compose.yml @@ -34,14 +34,14 @@ services: - SECRET_KEY_FILE=/run/secrets/BACKEND_SECRET_KEY - DB_PASSWD_FILE=/run/secrets/BACKEND_DB_PASSWD - EMAIL_API_KEY_FILE=/run/secrets/BACKEND_EMAIL_API_KEY - - GOOGLE_CREDS_JSON=/run/secrets/GOOGLE_CREDS_JSON + - GOOGLE_CREDS_FILE=/run/secrets/BACKEND_GOOGLE_CREDS secrets: - BACKEND_SECRET_KEY - BACKEND_DB_PASSWD - BACKEND_EMAIL_API_KEY - - GOOGLE_CREDS_JSON - + - BACKEND_GOOGLE_CREDS + secrets: BACKEND_SECRET_KEY: external: true @@ -49,5 +49,5 @@ secrets: external: true BACKEND_EMAIL_API_KEY: external: true - GOOGLE_CREDS_JSON: + BACKEND_GOOGLE_CREDS: external: true diff --git a/webapp/utils.py b/webapp/utils.py index 6f696c7..d79446c 100644 --- a/webapp/utils.py +++ b/webapp/utils.py @@ -25,7 +25,7 @@ from sikweb.settings import ( DEFAULT_EMAIL_FROM_ADDR, ENABLE_AUTOMATIC_EMAILS, GROUP_KEY, - GOOGLE_SERVICE_ACCOUNT, + GOOGLE_CREDS_JSON, ) from datetime import timedelta @@ -136,7 +136,7 @@ def add_to_mailinglist(email: str): # create credentials, with subject is used to impersonate admin account # jas_manager has groups editor rights in google admin credentials = service_account.Credentials.from_service_account_info( - info=GOOGLE_SERVICE_ACCOUNT, scopes=SCOPES + info=GOOGLE_CREDS_JSON, scopes=SCOPES ).with_subject("jas_manager@sahkoinsinoorikilta.fi") service = build("admin", "directory_v1", credentials=credentials) From 9e179d5e061a3b393efe1404520a775f7b84aa30 Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Mon, 5 Sep 2022 10:40:29 +0300 Subject: [PATCH 10/29] Added error handling for incorrectly formatted google creds --- webapp/utils.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/webapp/utils.py b/webapp/utils.py index d79446c..759f8a4 100644 --- a/webapp/utils.py +++ b/webapp/utils.py @@ -157,3 +157,16 @@ def add_to_mailinglist(email: str): ) send_email(to, subject, body) + except ValueError as err: + logging.exception("Formatting of google credentials is incorrect") + + if DEPLOY_ENV == "production": + to = "ilari.ojakorpi@sahkoinsinoorikilta.fi" + subject = "Web error: Failed adding to google groups" + body = "Google credential formatted incorretly\nEmail that was not added: {}\n\nAdd user manually to jäsenet groups.".format( + email + ) + + send_email(to, subject, body) + + From 5575186570f4a2cc0bd6ccfe82a0e289d8d333d3 Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Mon, 5 Sep 2022 12:03:31 +0300 Subject: [PATCH 11/29] lint --- webapp/utils.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/webapp/utils.py b/webapp/utils.py index 759f8a4..328874c 100644 --- a/webapp/utils.py +++ b/webapp/utils.py @@ -168,5 +168,3 @@ def add_to_mailinglist(email: str): ) send_email(to, subject, body) - - From 37a9750d4df51c64a82487f4f8c650a523f51cab Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Mon, 5 Sep 2022 13:38:26 +0300 Subject: [PATCH 12/29] Add group key and dev secrets to stack compose --- production_entrypoint.sh | 3 +++ stack-compose-dev.yml | 8 ++++++++ stack-compose.yml | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/production_entrypoint.sh b/production_entrypoint.sh index 1415f92..afd588c 100755 --- a/production_entrypoint.sh +++ b/production_entrypoint.sh @@ -13,6 +13,9 @@ fi if test -f "$GOOGLE_CREDS_FILE"; then export GOOGLE_CREDS=$(cat $GOOGLE_CREDS_FILE) fi +if test -f "$GROUP_KEY_FILE"; then + export GROUP_KEY=$(cat $GROUP_KEY_FILE) +fi # Collect static files echo "Collect static files" diff --git a/stack-compose-dev.yml b/stack-compose-dev.yml index d92b95f..ae075f6 100644 --- a/stack-compose-dev.yml +++ b/stack-compose-dev.yml @@ -29,15 +29,23 @@ services: - FRONTEND_URL=dev.sahkoinsinoorikilta.fi - DEBUG=True - EMAIL_API_KEY_FILE=/run/secrets/DJANGO_EMAIL_API_KEY + - GOOGLE_CREDS_FILE=/run/secrets/BACKEND_GOOGLE_CREDS + - GROUP_KEY_FILE=/run/secrets/BACKEND_GROUP_KEY - DB_HOST=db - DB_PORT=5432 secrets: - DJANGO_EMAIL_API_KEY + - BACKEND_GOOGLE_CREDS + - BACKEND_GROUP_KEY secrets: DJANGO_EMAIL_API_KEY: external: true + BACKEND_GOOGLE_CREDS: + external: true + BACKEND_GROUP_KEY: + external: true volumes: dbdata: diff --git a/stack-compose.yml b/stack-compose.yml index d780df1..7f1bfc6 100644 --- a/stack-compose.yml +++ b/stack-compose.yml @@ -35,12 +35,14 @@ services: - DB_PASSWD_FILE=/run/secrets/BACKEND_DB_PASSWD - EMAIL_API_KEY_FILE=/run/secrets/BACKEND_EMAIL_API_KEY - GOOGLE_CREDS_FILE=/run/secrets/BACKEND_GOOGLE_CREDS + - GROUP_KEY_FILE=/run/secrets/BACKEND_GROUP_KEY secrets: - BACKEND_SECRET_KEY - BACKEND_DB_PASSWD - BACKEND_EMAIL_API_KEY - BACKEND_GOOGLE_CREDS + - BACKEND_GROUP_KEY secrets: BACKEND_SECRET_KEY: @@ -51,3 +53,5 @@ secrets: external: true BACKEND_GOOGLE_CREDS: external: true + BACKEND_GROUP_KEY: + external: true From f0179c1840dff72332d9ed1c5d03be572fc7e75a Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Mon, 12 Sep 2022 22:38:18 +0300 Subject: [PATCH 13/29] Change google creds format. Ugly but works. --- production_entrypoint.sh | 16 ++++++++++++++-- sikweb/settings.py | 16 ++++++++++++---- stack-compose-dev.yml | 22 +++++++++++++++++++--- stack-compose.yml | 22 +++++++++++++++++++--- webapp/utils.py | 12 ++++++++---- 5 files changed, 72 insertions(+), 16 deletions(-) diff --git a/production_entrypoint.sh b/production_entrypoint.sh index afd588c..fd52900 100755 --- a/production_entrypoint.sh +++ b/production_entrypoint.sh @@ -10,8 +10,20 @@ fi if test -f "$DB_PASSWD_FILE"; then export DB_PASSWD=$(cat $DB_PASSWD_FILE) fi -if test -f "$GOOGLE_CREDS_FILE"; then - export GOOGLE_CREDS=$(cat $GOOGLE_CREDS_FILE) +if test -f "$G_PRIVATE_KEY_ID_FILE"; then + export G_PRIVATE_KEY_ID=$(cat $G_PRIVATE_KEY_ID_FILE) +fi +if test -f "$G_PRIVATE_KEY_FILE"; then + export G_PRIVATE_KEY=$(cat $G_PRIVATE_KEY_FILE) +fi +if test -f "$G_CLIENT_EMAIL_FILE"; then + export G_CLIENT_EMAIL=$(cat $G_CLIENT_EMAIL_FILE) +fi +if test -f "$G_CLIENT_ID_FILE"; then + export G_CLIENT_ID=$(cat $G_CLIENT_ID_FILE) +fi +if test -f "$G_CLIENT_URL_FILE"; then + export G_CLIENT_URL=$(cat $G_CLIENT_URL_FILE) fi if test -f "$GROUP_KEY_FILE"; then export GROUP_KEY=$(cat $GROUP_KEY_FILE) diff --git a/sikweb/settings.py b/sikweb/settings.py index 87a5e69..5580203 100644 --- a/sikweb/settings.py +++ b/sikweb/settings.py @@ -82,11 +82,19 @@ DATABASES = { # Google api settings GROUP_KEY = os.getenv("GROUP_KEY", "") -try: - GOOGLE_CREDS_JSON = json.loads(os.getenv("GOOGLE_CREDS", "{}")) -except: - GOOGLE_CREDS_JSON = json.loads("{}") +GOOGLE_CREDS = { + "type": "service_account", + "project_id": "web2-backend", + "private_key_id": os.getenv("G_PRIVATE_KEY_ID", ""), + "private_key": os.getenv("G_PRIVATE_KEY", ""), + "client_email": os.getenv("G_CLIENT_EMAIL", ""), + "client_id": os.getenv("G_CLIENT_ID", ""), + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://oauth2.googleapis.com/token", + "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", + "client_x509_cert_url": os.getenv("G_CLIENT_URL", ""), +} # JWT authentication SIMPLE_JWT = { diff --git a/stack-compose-dev.yml b/stack-compose-dev.yml index ae075f6..ff3cc4c 100644 --- a/stack-compose-dev.yml +++ b/stack-compose-dev.yml @@ -29,20 +29,36 @@ services: - FRONTEND_URL=dev.sahkoinsinoorikilta.fi - DEBUG=True - EMAIL_API_KEY_FILE=/run/secrets/DJANGO_EMAIL_API_KEY - - GOOGLE_CREDS_FILE=/run/secrets/BACKEND_GOOGLE_CREDS + - G_PRIVATE_KEY_ID_FILE=/run/secrets/BACKEND_G_PRIVATE_KEY_ID + - G_PRIVATE_KEY_FILE=/run/secrets/BACKEND_G_PRIVATE_KEY + - G_CLIENT_EMAIL_FILE=/run/secrets/BACKEND_G_CLIENT_EMAIL + - G_CLIENT_ID_FILE=/run/secrets/BACKEND_G_CLIENT_ID + - G_CLIENT_URL_FILE=/run/secrets/BACKEND_G_CLIENT_URL - GROUP_KEY_FILE=/run/secrets/BACKEND_GROUP_KEY - DB_HOST=db - DB_PORT=5432 secrets: - DJANGO_EMAIL_API_KEY - - BACKEND_GOOGLE_CREDS + - BACKEND_G_PRIVATE_KEY_ID + - BACKEND_G_PRIVATE_KEY + - BACKEND_G_CLIENT_EMAIL + - BACKEND_G_CLIENT_ID + - BACKEND_G_CLIENT_URL - BACKEND_GROUP_KEY secrets: DJANGO_EMAIL_API_KEY: external: true - BACKEND_GOOGLE_CREDS: + BACKEND_G_PRIVATE_KEY_ID: + external: true + BACKEND_G_PRIVATE_KEY: + external: true + BACKEND_G_CLIENT_EMAIL: + external: true + BACKEND_G_CLIENT_ID: + external: true + BACKEND_G_CLIENT_URL: external: true BACKEND_GROUP_KEY: external: true diff --git a/stack-compose.yml b/stack-compose.yml index 7f1bfc6..a336faf 100644 --- a/stack-compose.yml +++ b/stack-compose.yml @@ -34,14 +34,22 @@ services: - SECRET_KEY_FILE=/run/secrets/BACKEND_SECRET_KEY - DB_PASSWD_FILE=/run/secrets/BACKEND_DB_PASSWD - EMAIL_API_KEY_FILE=/run/secrets/BACKEND_EMAIL_API_KEY - - GOOGLE_CREDS_FILE=/run/secrets/BACKEND_GOOGLE_CREDS + - G_PRIVATE_KEY_ID_FILE=/run/secrets/BACKEND_G_PRIVATE_KEY_ID + - G_PRIVATE_KEY_FILE=/run/secrets/BACKEND_G_PRIVATE_KEY + - G_CLIENT_EMAIL_FILE=/run/secrets/BACKEND_G_CLIENT_EMAIL + - G_CLIENT_ID_FILE=/run/secrets/BACKEND_G_CLIENT_ID + - G_CLIENT_URL_FILE=/run/secrets/BACKEND_G_CLIENT_URL - GROUP_KEY_FILE=/run/secrets/BACKEND_GROUP_KEY secrets: - BACKEND_SECRET_KEY - BACKEND_DB_PASSWD - BACKEND_EMAIL_API_KEY - - BACKEND_GOOGLE_CREDS + - BACKEND_G_PRIVATE_KEY_ID + - BACKEND_G_PRIVATE_KEY + - BACKEND_G_CLIENT_EMAIL + - BACKEND_G_CLIENT_ID + - BACKEND_G_CLIENT_URL - BACKEND_GROUP_KEY secrets: @@ -51,7 +59,15 @@ secrets: external: true BACKEND_EMAIL_API_KEY: external: true - BACKEND_GOOGLE_CREDS: + BACKEND_G_PRIVATE_KEY_ID: + external: true + BACKEND_G_PRIVATE_KEY: + external: true + BACKEND_G_CLIENT_EMAIL: + external: true + BACKEND_G_CLIENT_ID: + external: true + BACKEND_G_CLIENT_URL: external: true BACKEND_GROUP_KEY: external: true diff --git a/webapp/utils.py b/webapp/utils.py index 328874c..06cadb2 100644 --- a/webapp/utils.py +++ b/webapp/utils.py @@ -25,7 +25,7 @@ from sikweb.settings import ( DEFAULT_EMAIL_FROM_ADDR, ENABLE_AUTOMATIC_EMAILS, GROUP_KEY, - GOOGLE_CREDS_JSON, + GOOGLE_CREDS, ) from datetime import timedelta @@ -136,13 +136,17 @@ def add_to_mailinglist(email: str): # create credentials, with subject is used to impersonate admin account # jas_manager has groups editor rights in google admin credentials = service_account.Credentials.from_service_account_info( - info=GOOGLE_CREDS_JSON, scopes=SCOPES + info=GOOGLE_CREDS, scopes=SCOPES ).with_subject("jas_manager@sahkoinsinoorikilta.fi") service = build("admin", "directory_v1", credentials=credentials) service.members().insert(groupKey=GROUP_KEY, body={"email": email}).execute() except HttpError as err: # Already in list, do nothing + print() + print(err) + print() + if err.status_code == 409: pass else: @@ -157,7 +161,7 @@ def add_to_mailinglist(email: str): ) send_email(to, subject, body) - except ValueError as err: + """ except ValueError as err: logging.exception("Formatting of google credentials is incorrect") if DEPLOY_ENV == "production": @@ -167,4 +171,4 @@ def add_to_mailinglist(email: str): email ) - send_email(to, subject, body) + send_email(to, subject, body) """ From 2e0fad4bb2b0fab8a3c1dedf2c53c426677eaca0 Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Mon, 12 Sep 2022 22:42:01 +0300 Subject: [PATCH 14/29] Use POSIX format for source --- .husky/pre-commit | 2 +- .husky/pre-push | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 2867590..32d0bfb 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -4,7 +4,7 @@ PURPLE='\033[0;35m' NC='\033[0m' # No Color -source "${VIRTUAL_ENV}/bin/activate" +. "${VIRTUAL_ENV}/bin/activate" if [ $? -ne 0 ] then diff --git a/.husky/pre-push b/.husky/pre-push index 07e64c7..eb484ac 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -4,7 +4,7 @@ PURPLE='\033[0;35m' NC='\033[0m' # No Color -source "${VIRTUAL_ENV}/bin/activate" +. "${VIRTUAL_ENV}/bin/activate" if [ $? -ne 0 ] then From 19975877cb5bf3b0b1b4e60c974c0485344433ee Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Tue, 13 Sep 2022 09:59:55 +0300 Subject: [PATCH 15/29] Remove debug stuff --- webapp/utils.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/webapp/utils.py b/webapp/utils.py index 06cadb2..19c2f6c 100644 --- a/webapp/utils.py +++ b/webapp/utils.py @@ -143,10 +143,6 @@ def add_to_mailinglist(email: str): service.members().insert(groupKey=GROUP_KEY, body={"email": email}).execute() except HttpError as err: # Already in list, do nothing - print() - print(err) - print() - if err.status_code == 409: pass else: @@ -161,7 +157,7 @@ def add_to_mailinglist(email: str): ) send_email(to, subject, body) - """ except ValueError as err: + except ValueError as err: logging.exception("Formatting of google credentials is incorrect") if DEPLOY_ENV == "production": @@ -171,4 +167,4 @@ def add_to_mailinglist(email: str): email ) - send_email(to, subject, body) """ + send_email(to, subject, body) From a8923b63d64afcf422af083d33d02a54deb80f96 Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Tue, 13 Sep 2022 13:31:58 +0300 Subject: [PATCH 16/29] wrap private key --- production_entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production_entrypoint.sh b/production_entrypoint.sh index fd52900..0efc365 100755 --- a/production_entrypoint.sh +++ b/production_entrypoint.sh @@ -14,7 +14,7 @@ if test -f "$G_PRIVATE_KEY_ID_FILE"; then export G_PRIVATE_KEY_ID=$(cat $G_PRIVATE_KEY_ID_FILE) fi if test -f "$G_PRIVATE_KEY_FILE"; then - export G_PRIVATE_KEY=$(cat $G_PRIVATE_KEY_FILE) + export G_PRIVATE_KEY="$(cat $G_PRIVATE_KEY_FILE)" fi if test -f "$G_CLIENT_EMAIL_FILE"; then export G_CLIENT_EMAIL=$(cat $G_CLIENT_EMAIL_FILE) From 03982ee620d7a81a4e1798d763fb1f625952f7ce Mon Sep 17 00:00:00 2001 From: Ojakoo Date: Fri, 23 Sep 2022 17:51:01 +0300 Subject: [PATCH 17/29] Update kaehmy dates and change header to html instead of picture. --- kaehmy/static/kaehmy/css/base.css | 10 +++---- kaehmy/static/kaehmy/css/footer.css | 7 ++--- kaehmy/static/kaehmy/css/header.css | 45 +++++++++++----------------- kaehmy/static/kaehmy/css/nav.css | 10 +++++-- locale/en/LC_MESSAGES/django.mo | Bin 15979 -> 16467 bytes locale/en/LC_MESSAGES/django.po | 23 +++++++++++--- locale/fi/LC_MESSAGES/django.mo | Bin 16729 -> 17265 bytes locale/fi/LC_MESSAGES/django.po | 25 ++++++++++++---- templates/kaehmy/base.html | 2 +- templates/kaehmy/header.html | 11 +++++-- templates/kaehmy/kaehmy.html | 10 ++++--- templates/kaehmy/message.html | 2 +- templates/kaehmy/navigation.html | 4 +-- 13 files changed, 89 insertions(+), 60 deletions(-) diff --git a/kaehmy/static/kaehmy/css/base.css b/kaehmy/static/kaehmy/css/base.css index cee09ba..e5e10cc 100644 --- a/kaehmy/static/kaehmy/css/base.css +++ b/kaehmy/static/kaehmy/css/base.css @@ -5,12 +5,6 @@ margin-right: auto; } -body { - max-width: 1000px; - margin-left: auto !important; - margin-right: auto !important; -} - div.tooltip-inner { max-width: 25rem; } @@ -28,6 +22,10 @@ div.tooltip-inner { .kaehmy-content { padding-left: 0.5rem; padding-right: 0.5rem; + max-width: 1000px; + width: 100%; + margin-left: auto; + margin-right: auto; } p { diff --git a/kaehmy/static/kaehmy/css/footer.css b/kaehmy/static/kaehmy/css/footer.css index 8c8bba8..47a2547 100644 --- a/kaehmy/static/kaehmy/css/footer.css +++ b/kaehmy/static/kaehmy/css/footer.css @@ -3,13 +3,9 @@ } footer { - /* position: absolute; */ bottom: 0; width: 100%; - height: 60px; /* Set the fixed height of the footer here */ - /* line-height: 60px; /* Vertically center the text there */ - margin-top: 2rem; - margin-bottom: 1rem; + margin: 1rem; } footer .container .col .nav .nav-item { @@ -26,6 +22,7 @@ footer .container .col .nav .nav-item { .lang-select { width: 10rem; + margin-bottom: 1rem; display: inline-block; } diff --git a/kaehmy/static/kaehmy/css/header.css b/kaehmy/static/kaehmy/css/header.css index 53471fc..fadea3b 100644 --- a/kaehmy/static/kaehmy/css/header.css +++ b/kaehmy/static/kaehmy/css/header.css @@ -1,37 +1,28 @@ -.header-content { - +.kaehmy-header { + background-color: #0c2938; } -.header-content .logo { +.kaehmy-header-content { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: center; -} - -.header-content .logo img { - display: block; - height: auto; - margin: auto; -} - -.kaehmy-banner { max-width: 1000px; + width: 100%; margin-left: auto; margin-right: auto; } -@media screen and (min-width: 1000px) { - .kaehmy_header-content { - position: absolute; - left: 0; - top: 0; - background-color: #0c2938; - width: 100%; - } - - .kaehmy_header { - margin-bottom: 331px; - } -} - .kaehmy-banner-image { - width: 100%; + max-height: 10rem; + max-width: 100%; } + +.heading { + display: flex; + place-content: center; + flex-direction: column; + text-align: center; + margin: 1rem; +} \ No newline at end of file diff --git a/kaehmy/static/kaehmy/css/nav.css b/kaehmy/static/kaehmy/css/nav.css index ee7db33..ce41111 100644 --- a/kaehmy/static/kaehmy/css/nav.css +++ b/kaehmy/static/kaehmy/css/nav.css @@ -1,11 +1,15 @@ .kaehmy_navigation { margin-bottom: 10px; -} - -.navbar-border { border-bottom: 2px solid #282b3b; } .navbar-light .navbar-nav .nav-link { color: black; } + +.navbar { + max-width: 1000px; + width: 100%; + margin-left: auto; + margin-right: auto; +} \ No newline at end of file diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo index b72519783a3f03d1c1e8ee7398e7457028475681..9b164d50c93a6a2676f6488d8c3e711ed11e1bcd 100644 GIT binary patch delta 5340 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 NSMH22n32;j;y>y7Y#9Im delta 4856 zcmYk-4S3G=9>?+DwtJh0F(z#Duv=qhPc}0PlZ0kcV#I`EmWLS|BX&4{ArH+{X9qQ; zq@Y!|*3e#GA+?jJLJ_b;oq2(SnXdY=T*+H)Nw8Gz!D<3DkAP*c_j>uWzvZTdma? z!|R7p_xSIDYz9i@Dr#3*P^b!fGYVF)PU+ymHjU|DrF!~)!Ma0y)hb9>KN38si+%gVIbyU zFb+cvWF%%|0qTL(_VxYtyax50Pf-Iojk^E2DC(~luGx-T$e>Jnd9ms|@Z=ovp8LGs`QM>;e+h2=)Ilq8IFp7_wDlyrip%P9<_K{hHTJs9) zD;UZYeW)dNjY0G$qF(Qg z9?V2-#w^Um!Z_Bykj95}Xbls)x;N^D+Kkz#waP=?U>dUFO%dvgX$=m-=P@2HAh$9h zoM@oQ7=r1jP1*-F@F5t8qvNT6HyUH<_!XDpZ7ienBF;~6AM|LVF|#?JjJn}zY=q}f zCBB53aXsomH;_N`2mf?^LX!J>8fvp=peFo)LnDmF2yBWIQJZB3>cTQq1 z2(_tBVi^96`nCHF`7=q$?yp@Qs)8#~16+gJ+)gD8y|LQ9a1eFjG24F4V5AnHS>ws3}>Mpun0BM z<)~f08M%k4LJhnQHQ=96*Vm&;eiJpI+o;M0^X1VTTcVcEi~isLZZulZk%GFgKkCL0 zqBhA`)Mk1NHIPY|jismu9Op5w1G$VX@Vf2)-JUmPog&$PracY4Ap>>8 zL8u!IL%wUw7}SW%PyU$u~p68;YZ@h^# zG{REU`7@{oZozomiCU7As9(G9Q6;~DDscm9_y5oK2QeBgQ6r?wWTGlD10%2m^%cE5 zozH(bjV*Mj0#!IQz?g&f!n@g7t?17{ZKfR5%!^R(n~QqzGE^m2TB}hLID;DCdFxfw zX1swdF}xS`*MmFtaywE{Ykxm##=}udG67Yg0^2_yHKXOI0hXhF?Y5%^b`bSddmQ!t z%c#oLqwW)s=`Ll2V;ikerH;gW9AM91#i5*kg(`W}J?;ZKqQ0_Iuni8ywm8Y2FGS6J z18Rbm*4?PeypOHX`Iv@A`WSDs3Ug z;bQyxPJDp#y|@4ykO?_vRv))Cb5SK-g__BF)Qoqb2CxV9zyqj~e}cOHTk8eXKrW+p z`7aoSE&959BLTgfKZ2@U3AX3?X07db!{1@d=cpU~h&d(b1oz`&(4ND)cGgyTLK%XuPN%j)5*_vQ@B*W;oGq z)v=X4M7|=&NCy%_4iX)Ui1v?;17r|MC9BCyGM(H|m$FKzoN3?p;2{#|V6a_hhFaq<|cC8x z>oAHOC+BTnoOL%2Ci*BYBZo;ANhAZvUyr|Y^13=S;v&+C^ds++rKF5ZCEt)5@(6j2 z=qMy1`l2ns7h>x5hv&a~t!^!5~hh&4!{&Kuy+f8taZRcZz zZ6CppNHO^b8A}$BL*&l!ERDuwB6*vvA_*jt3?Up5{$D+{PLNR2#@7%rC&afeYFmJB zN4vK@z9+q3271zZru6V-#tsY)NuE?(JZH9VMf~fHD)vRq@Lfsk8Q{xLza3OjnHlG+ j%*?YF|Ju84aCrXgqN3@gr3D4v{5g}Jn(2$|-#6g@3L)b} diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index 4427a7a..0c69590 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -419,16 +419,22 @@ msgid "Päivämääriä & deadlineja" msgstr "Dates and deadlines" #: kaehmy/templates/kaehmy.html:31 +msgid "Toimikuntamessut @OK20" +msgstr "Guild fair @OK20" + +msgid "Deadline hallitusvirkoihin hakemiselle." +msgstr "Deadline for applying to the board." + +#: kaehmy/templates/kaehmy.html:32 msgid "Vaalikokous, osa 1 (puheenjohtajan valinta) ja hallitustyrkkypaneeli" msgstr "Election meeting, part 1 (chairman election)" -#: kaehmy/templates/kaehmy.html:32 +#: kaehmy/templates/kaehmy.html:33 msgid "Vaalikokous, osa 2 (hallituksen valinta)" msgstr "Election meeting, part 2 (board election)" -#: kaehmy/templates/kaehmy.html:33 -msgid "Toimikunta-appro" -msgstr "Guild committee crawl" +msgid "Deadline toimivirkoihin hakemiselle." +msgstr "Deadline for applying to official roles." #: kaehmy/templates/kaehmy.html:34 msgid "Vaalikokous, osa 3 (toimarien valinta)" @@ -505,6 +511,15 @@ msgstr "New application" msgid "Statistics" msgstr "" +msgid "Kähmyt ovat auki!" +msgstr "Kaehmys have started!" + +msgid "Haku hallitukseen 24.10. mennessä ja toimihenkilöksi 18.11 mennessä." +msgstr "Apply for the board by 24.10. and for official roles by 18.11." + +msgid "Hae nyt!" +msgstr "Apply now!" + #: members/forms.py:107 members/models.py:101 members/tables.py:41 msgid "Member" msgstr "Member" diff --git a/locale/fi/LC_MESSAGES/django.mo b/locale/fi/LC_MESSAGES/django.mo index e7d259a133073068a1e4ccb27e3a60ec0abdb40d..dd2fdbd5b00f1938edcc632a6662a02e62b7291d 100644 GIT binary patch delta 6017 zcmb`}dwfsl0mtzt5#oMH5F+>yA|fIpZj&@|Yut)9x+0^3SblQRNKmHzxhx%P5mj>w zx>C0e+v3`Wc2cycTPvhRl~!ppbPFqne!e+Rw(iya+4FjR^M0P^cg}fk=NwArczySh zm*=9N&r-wTkt3iL#6+2g3!bSSF7VW^e#jHI9wlWoHU)RttR zW-tr&a4oZLL|>L>H)`hZGFtt945RTps)KqgtL_tk8fX}5Af2qS$iwb22^4gL5vUuw zty57mnv2@A#i$inVcWN$I@*Jp$$r!lA4DE(Q-Zp08R~8E;g!;TnxR%Gq`dAirUwPx zxHodH8HUSn8b)HBR?Z5=qXyI$wN;78gKS2lR%!<78CY!Vn^6;b57qHUsMq@p^0=9= z(U1O(Pitoe0jQ_6nYBG?>0(gNKws1ilTb5CMJ@3h>r&JTY(kw^i0b%50599$m!Q4} z`KaqQg|PosDD0#`OInD!;4rHF1ZrT#sJG%0YUbW;oYyD_UDSJ_wqhJ=X+5@{Z|i%| zm-aKLt-fHr(T4S}M8hL{LZwh=hBYvP_PVHlRN_zr%tGB@CTcGiSl6Pq;xDLY;eFIf zeTIp63DYpTtuxTqQ4=flP|%VcLS6U?>c-!qo`naf8`TVR{w=77TEa-|gE7dx&1__G z%oePIr%+3L&ep#|tw1SO#WJjho(B}vfp0r!AT?1J2BJ5%!5SEb)v*h<^y0&U2dIw^ zcg}Cq-dUMw)P(w?RyGki)jWghcrI!nuOI{PnAa$1rfaNQt%X>N_M@n!EwSyTsQ3E5 zt=C|mYEchFJ#?YS$I!%}wkiqr?4)BCT!{Km9mF2=Z|+gh$hvfJW*CR+U;wJ)k*F2P zK&`+G)Y9eJ_C>aykF{yvfZBqcsE4r-b^j8afR|C%_vhmhs`o#Uf<`_Q)lnXH#?`1B zeTlIy5C0Bz;@X7BGg2Vp{E{&v$o+n>I+zg zH83E`S&3j&N1d=0CZRf*g&N>|)cJX~o^R{xP#>J_s6F3_>TjR*L=@|(FqA z2Hm&{PlisYi7u>;!UiJr%@lKE2uB%BhRUdwIP0@MulpjN0Dwbxfr|Kq8|qpf-n>a~kObr_FYiQ%XfonU{T zjaorZu5DO^TFNEZ05_m!T!>nM!`9=r{S0d5E?IA3RednJIs>fM-TA#CGHDZnTCpTl zKgmwrV{#~H31^^YJ{R>&EJby&-qv@ZW>SP&fm61A5jEga)cM}Oa60ls4ZIO*E1IKT z$4Jz9PhhOx|4|e)fK{j&uSZ?D9d+YfsJG%6F2|e58))YBaJFbK>Y>|jJ%ZY*Vr+tC zsO#&-I1}rHI=>fIqkl7)f<`zTb%7hTM7gMEU^!~Ut5JKl)z){Tt~-ocnRBS?ucA8e zj&-bU4YY=!CK`pFrW9f+XvRs_v8WYsWBF@l>oZZG(p=O-wh`6gTlV+Es69T38bC4X z`pc-TEyW;wh#Gj4$5?+A!XI<~!x4*mYM(+4Xd>!a$U?oAv#j$_1I)uRGyg`d(Z{4cv2|f|j;QZ>QthsJ&~1+RIj`6$!J( zqBr%Sr~xLT9=>ttg5P43;f^BTEV`G0>_)~a8)=mi9b0-rjuFZ648;Z^{+|cdD5SJN&ZYakZ;Ib zq9cXmm6!O}58olbA<<+4(b0hXmb4->NG*~}Dvph|@Htkq=mfmG_*hV%Gu!oMHo z#~o{TYXvV-_>}yzq5+?^ko%7sZPd`Yot91AUa~m ze)6O$_E>yuE;S`H&7EGfD=pjY>ewx!W5@rV6H(v}n&;y;uxNd1#`GN5q^Zd{uH-3c z?iK~NTw8tXGnTX|nK{WB+;B>cD}KnpsK|nqq5Z24`p&TVqnXR9_Grj`Eb>`unb_xb@J+R8it delta 5487 zcmZYB33QET9>?(~i)cJ%#h3oC}?RI~Uc?@gt`DLUb7as3iI#x0}Vgu^0VnbYu z!B~vt@C3%vzq>?14Lrnf46E!t5R3Xk66*70)XXzbGsr|e-yW0jIlDg|`%<5ZET%hx zjM1IKM7(SFfkagGR<0syX340I zn_w(vVjOlyt?Ub!h7-`InXRCpnSO%$;^(M6EJO|LYt$ZohuV_ksFk>c`rb`c!}n0n zg(i3_7Kdst3Cmy#YCvh&0kaZVe?2hA9>_KGP#rBr4P-s41Haw>#_ETW)pX}j19^n% zD3Ft^?}wq_m-rmOw7{bBO zj1y2>l!ST>Q&AnJp;oRb>bXp-w?%D12h;?7{V3?Q8*fg-P?jPWHS@(u-sfwuDfKO= z4z8dEcoQ{%2WBwS(;<#RwVQ-$r?J@zHIdH9*7#f>3Yz&K`(Qk(10QMzZ=ja)E#!Q; z4^RznN4*96P_+k-3a7Am%yJqY>kca2nOr@59M9ch$2yYR24Z#E*Z5% zS*X45WA$;U8O=gM))+@1RyL=n1x7?|&o(HCPKZqeiF( zI++7dD=-%ITn?(^`N(l_`KT4!Viux0*ooSjeHe_zs1-Va8rTi=X=e8*1Y=aP_dy)0 zqpGNe>Y`StF=`;KQ3L2idPr3+8tC zC}`=?~wGwp5;G)JS_ znSxr;Io^GrE1;nF`D5>f+m3p$2zA(wp_b|@YCvThdOxAn@JZ^eQ9n!*F%#FJ26h28 z!yBmfAD}vp-~dEoB1Y)_Po=HM`V7xn$0F$IGf zc>`~N>ZmO?!)~Z{aqO116ZB+fgRuADFDMLLLwa1lF9VD3Jj)1=Ab&7vS%2-xX>Mo+w@@Q}gj%BT3~wppQNMKcQ5|(M zvr#kZi)whJ-5-ld)L%hOC?D1Sa;vXHJ^yJ2>#wEW%8l}P4)q@2Mg20yH1Q5!J+mX0 zyyuw8=Q$XI8&R*_SLQC%fQwKoatXDScTxYtQjrr|vb8=6dab&nI_!a(`6$#9PO{Gz zpq4Dp>K|e(_0_2Vf7pha;rFN+A2-j~{fnrTx@87(BE$GW@WoQl2os+29!No+am`Un zG{&5O+QZ4H8Ba&;{X$g3E3NKFO<*Ug-2+xXi5ln?)bjz&OWOCj7z!G3JZcN7qh7N{ zs0X`ZD;$6t!276~u0(xrBdX!esMEd=^YJ=zj@_&l-qvhGovkm;y_l%?znFsd^fs!2 z=%>AzWuU&0g(We;}Q&0mx zqW1O*Y6~8rMqah0XMLh<)Qvrrw*!`hgSI`xIf3+8@k$@*)g z(QI%Mreg~BKyAeo)N8g3)$m@7!-J@$Kac9*KI*UqwDwjk3e%`pL7jn)c7HNzi)NrE zwy-tpuP?5)4?aV6uoE@2BlsMi#6g(W#`}q$hgz|%s0MeSR_3620rmZdSRDh~dMi{D z_0N1`)I=xxDAb{_40VWhVPz~r?fqHQ%&((5yocH{m*wqYBx)sM&1B@YcFj=(%S0Wz zE*OBi)_S;6==;tp56rzdi;N`W$q=GzB^ge>BuhzMGLNh#eMxO{glr@|$t9wTpO?qi zJxU*wj$}94PyenH1zqRJUx}9Id(wdDN+wCy&UB&!b(!oUV~8&O(iM_Es@SCidW}@F`UdLlV9>W zU&qp`3xyim|MC>pkTi0N_(@~(5z!Up@%V3VEB(&=6V4{L$pTV^3??s5w4v}cGoTQQ>GMRKGlZdXrkr=W? z6}#$Tgq3{Wb@$Xg_j=$b$hNM%*HZhAca`wFEG$&+LUX+wfZ>9yGk9q?Bq%j*9y z&**4&qtcvAw3{PP+tS49f5FyP-i}kq>;6R*KPuy&o3J^+pPM){*q>T!eW?Fhz4l@L d*E5O(7UU*2@E>YAKiEI9#lSHC<*eBO{{!`R9i;#O diff --git a/locale/fi/LC_MESSAGES/django.po b/locale/fi/LC_MESSAGES/django.po index ac91863..a5e41bf 100644 --- a/locale/fi/LC_MESSAGES/django.po +++ b/locale/fi/LC_MESSAGES/django.po @@ -417,21 +417,27 @@ msgstr "" " eikä siis missään nimessä sitova ilmoittautumien mihinkään " "tehtävään!" +#: kaehmy/templates/kaehmy.html:31 +msgid "Toimikuntamessut @OK20" +msgstr "Toimikuntamessut @OK20" + +msgid "Deadline hallitusvirkoihin hakemiselle." +msgstr "Deadline hallitusvirkoihin hakemiselle." + #: kaehmy/templates/kaehmy.html:29 msgid "Päivämääriä & deadlineja" msgstr "Päivämääriä & deadlineja" -#: kaehmy/templates/kaehmy.html:31 +#: kaehmy/templates/kaehmy.html:32 msgid "Vaalikokous, osa 1 (puheenjohtajan valinta) ja hallitustyrkkypaneeli" msgstr "Vaalikokous, osa 1 (puheenjohtajan valinta) ja hallitustyrkkypaneeli" -#: kaehmy/templates/kaehmy.html:32 +#: kaehmy/templates/kaehmy.html:33 msgid "Vaalikokous, osa 2 (hallituksen valinta)" msgstr "Vaalikokous, osa 2 (hallituksen valinta)" -#: kaehmy/templates/kaehmy.html:33 -msgid "Toimikunta-appro" -msgstr "" +msgid "Deadline toimivirkoihin hakemiselle." +msgstr "Deadline toimivirkoihin hakemiselle." #: kaehmy/templates/kaehmy.html:34 msgid "Vaalikokous, osa 3 (toimarien valinta)" @@ -502,6 +508,15 @@ msgstr "Uusi kaehmy" msgid "Statistics" msgstr "Kaehmytilastot" +msgid "Kähmyt ovat auki!" +msgstr "Kähmyt ovat auki!" + +msgid "Haku hallitukseen 24.10. mennessä ja toimihenkilöksi 18.11 mennessä." +msgstr "Haku hallitukseen 24.10. mennessä ja toimihenkilöksi 18.11 mennessä." + +msgid "Hae nyt!" +msgstr "Hae nyt!" + #: members/forms.py:107 members/models.py:101 members/tables.py:41 msgid "Member" msgstr "Jäsen" diff --git a/templates/kaehmy/base.html b/templates/kaehmy/base.html index 0b56266..6af89bb 100644 --- a/templates/kaehmy/base.html +++ b/templates/kaehmy/base.html @@ -13,7 +13,7 @@ {% block body %} {% block header %} -
+
{% include "kaehmy/header.html" %}
{% endblock header %} diff --git a/templates/kaehmy/header.html b/templates/kaehmy/header.html index cf8e165..7cbdecb 100644 --- a/templates/kaehmy/header.html +++ b/templates/kaehmy/header.html @@ -1,7 +1,14 @@ {% load i18n %} -
+
+
+

{% blocktrans %}Kähmyt ovat auki!{% endblocktrans %}

+

{% blocktrans %}Haku hallitukseen 24.10. mennessä ja toimihenkilöksi 18.11 mennessä.{% endblocktrans %}

+

{% blocktrans %}Hae nyt!{% endblocktrans %}

diff --git a/templates/kaehmy/kaehmy.html b/templates/kaehmy/kaehmy.html index 71d9c84..4cfddc4 100644 --- a/templates/kaehmy/kaehmy.html +++ b/templates/kaehmy/kaehmy.html @@ -28,10 +28,12 @@

{% trans "Päivämääriä & deadlineja" %}
    -
  • 25.10. {% blocktrans %}Vaalikokous, osa 1 (puheenjohtajan valinta) ja hallitustyrkkypaneeli{% endblocktrans %}
  • -
  • 01.11. {% blocktrans %}Vaalikokous, osa 2 (hallituksen valinta){% endblocktrans %}
  • -
  • 09.11. {% blocktrans %}Toimikunta-appro{% endblocktrans %}
  • -
  • 17.11. {% blocktrans %}Vaalikokous, osa 3 (toimarien valinta){% endblocktrans %}
  • +
  • 11.10. {% blocktrans %}Toimikuntamessut @OK20{% endblocktrans %}
  • +
  • 24.10. {% blocktrans %}Deadline hallitusvirkoihin hakemiselle.{% endblocktrans %}
  • +
  • 25.10. {% blocktrans %}Vaalikokous, osa 1 (puheenjohtajan valinta) ja hallitustyrkkypaneeli{% endblocktrans %}
  • +
  • 07.11. {% blocktrans %}Vaalikokous, osa 2 (hallituksen valinta){% endblocktrans %}
  • +
  • 18.11. {% blocktrans %}Deadline toimivirkoihin hakemiselle.{% endblocktrans %}
  • +
  • 24.11. {% blocktrans %}Vaalikokous, osa 3 (toimarien valinta){% endblocktrans %}
{% csrf_token %} {% bootstrap_field form.name %} diff --git a/templates/kaehmy/message.html b/templates/kaehmy/message.html index 0374b96..c787931 100644 --- a/templates/kaehmy/message.html +++ b/templates/kaehmy/message.html @@ -2,7 +2,7 @@
-

{{ message.name }}

+

{{ message.name }}

{{ message.message|linebreaks|urlize }}

{{ message.timestamp }}
diff --git a/templates/kaehmy/navigation.html b/templates/kaehmy/navigation.html index b9e8919..99720b0 100644 --- a/templates/kaehmy/navigation.html +++ b/templates/kaehmy/navigation.html @@ -1,8 +1,8 @@ {% load i18n %} {% load static %} -
-