From d5bf39edb5d10e965f6d5f7e7713284295ebac4b Mon Sep 17 00:00:00 2001 From: Morgan Robertson Date: Wed, 1 Feb 2023 18:23:17 +0100 Subject: [PATCH 1/4] Add form for adding beta activation keys. --- templates/credentials/beta-activation.html | 27 ++++++++++++++++++++++ webapp/app.py | 6 +++++ webapp/marketo.py | 15 ++++++++++++ webapp/shop/cred/views.py | 24 +++++++++++++++++++ 4 files changed, 72 insertions(+) create mode 100644 templates/credentials/beta-activation.html diff --git a/templates/credentials/beta-activation.html b/templates/credentials/beta-activation.html new file mode 100644 index 00000000000..2e3db995002 --- /dev/null +++ b/templates/credentials/beta-activation.html @@ -0,0 +1,27 @@ +{% extends "credentials/base_cred.html" %} + +{% block title %}Canonical Credentials -- Schedule an exam{% endblock %} + +{% block meta_description %}The Canonical Ubuntu Essentials exams certify knowledge and verify skills in general Linux, Ubuntu Desktop, and Ubuntu Server topics.{% endblock meta_description %} +{% block meta_copydoc %}https://docs.google.com/document/d/1QuhO-9FEOGLrYp8bErS_9snqdljl7d6tFAUoNQxoVDQ/edit{% endblock meta_copydoc %} + +{% block content %} + +
+
+

Add activation keys

+
+
+ +

Add one or more user email addresses below, each on a new line.

+ + +

Add one or more activation keys below, each on a new line.

+ + +
+
+
+
+ +{% endblock content%} diff --git a/webapp/app.py b/webapp/app.py index 5d981da4d31..ef54af53e49 100644 --- a/webapp/app.py +++ b/webapp/app.py @@ -89,6 +89,7 @@ cred_submit_form, cred_syllabus_data, cred_your_exams, + cred_beta_activation, get_activation_keys, rotate_activation_key, ) @@ -900,6 +901,11 @@ def takeovers_index(): view_func=activate_activation_key, methods=["POST"], ) +app.add_url_rule( + "/credentials/beta/activation", + view_func=cred_beta_activation, + methods=["GET", "POST"], +) # Charmed OpenStack docs openstack_docs = Docs( diff --git a/webapp/marketo.py b/webapp/marketo.py index b8f44bd8e74..94944ae56cc 100644 --- a/webapp/marketo.py +++ b/webapp/marketo.py @@ -51,3 +51,18 @@ def submit_form(self, data): return self.request( "POST", "/rest/v1/leads/submitForm.json", json=data ) + + def describe_leads(self): + return self.request("GET", "/rest/v1/leads/describe.json") + + def get_lead(self, id_): + return self.request("GET", f"/rest/v1/leads/{id_}.json") + + def update_leads(self, leads=None): + data = { + "action": "updateOnly", + "lookupField": "email", + "input": leads, + + } + return self.request("POST", f"/rest/v1/leads.json", json=data) diff --git a/webapp/shop/cred/views.py b/webapp/shop/cred/views.py index 5dc105af6dd..62c26c96ed8 100644 --- a/webapp/shop/cred/views.py +++ b/webapp/shop/cred/views.py @@ -18,6 +18,8 @@ from googleapiclient.discovery import build from werkzeug.exceptions import BadRequest +from ...views import marketo_api + TIMEZONE_COUNTRIES = { timezone: country @@ -652,3 +654,25 @@ def activate_activation_key(ua_contracts_api, **kwargs): "activationKey": activation_key, } ) + + +@shop_decorator(area="cred", permission="user", response="html") +@canonical_staff() +def cred_beta_activation(**_): + if flask.request.method == "POST": + data = flask.request.form + + emails = data["emails"].split("\n") + keys = data["keys"].split("\n") + + leads = [] + for email, key in zip(emails, keys): + leads.append({ + "email": email, + "cred_activation_key": key + + }) + + marketo_api.update_leads(leads) + + return flask.render_template("credentials/beta-activation.html") From 0f996f34de3f119534ebaccdd92c84b6c606da45 Mon Sep 17 00:00:00 2001 From: Morgan Robertson Date: Tue, 30 May 2023 18:23:39 +0200 Subject: [PATCH 2/4] Fix python linting error. --- webapp/marketo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/marketo.py b/webapp/marketo.py index 94944ae56cc..22a3188eb8d 100644 --- a/webapp/marketo.py +++ b/webapp/marketo.py @@ -65,4 +65,4 @@ def update_leads(self, leads=None): "input": leads, } - return self.request("POST", f"/rest/v1/leads.json", json=data) + return self.request("POST", "/rest/v1/leads.json", json=data) From 4a4cdd40f5935c5f776b60d371f04a18ec5c9f0b Mon Sep 17 00:00:00 2001 From: Morgan Robertson Date: Wed, 31 May 2023 13:26:46 +0200 Subject: [PATCH 3/4] Fix page title. --- templates/credentials/beta-activation.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/templates/credentials/beta-activation.html b/templates/credentials/beta-activation.html index 2e3db995002..b9ceff46d0d 100644 --- a/templates/credentials/beta-activation.html +++ b/templates/credentials/beta-activation.html @@ -1,9 +1,8 @@ {% extends "credentials/base_cred.html" %} -{% block title %}Canonical Credentials -- Schedule an exam{% endblock %} +{% block title %}Canonical Credentials -- Beta activation{% endblock %} {% block meta_description %}The Canonical Ubuntu Essentials exams certify knowledge and verify skills in general Linux, Ubuntu Desktop, and Ubuntu Server topics.{% endblock meta_description %} -{% block meta_copydoc %}https://docs.google.com/document/d/1QuhO-9FEOGLrYp8bErS_9snqdljl7d6tFAUoNQxoVDQ/edit{% endblock meta_copydoc %} {% block content %} From e0087550068095c8018eb4d0bdf8cfb8310d33a8 Mon Sep 17 00:00:00 2001 From: Morgan Robertson Date: Wed, 31 May 2023 13:39:46 +0200 Subject: [PATCH 4/4] Fix python formatting. --- webapp/marketo.py | 1 - webapp/shop/cred/views.py | 6 +----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/webapp/marketo.py b/webapp/marketo.py index 22a3188eb8d..19c71ba093e 100644 --- a/webapp/marketo.py +++ b/webapp/marketo.py @@ -63,6 +63,5 @@ def update_leads(self, leads=None): "action": "updateOnly", "lookupField": "email", "input": leads, - } return self.request("POST", "/rest/v1/leads.json", json=data) diff --git a/webapp/shop/cred/views.py b/webapp/shop/cred/views.py index 62c26c96ed8..faca597df2e 100644 --- a/webapp/shop/cred/views.py +++ b/webapp/shop/cred/views.py @@ -667,11 +667,7 @@ def cred_beta_activation(**_): leads = [] for email, key in zip(emails, keys): - leads.append({ - "email": email, - "cred_activation_key": key - - }) + leads.append({"email": email, "cred_activation_key": key}) marketo_api.update_leads(leads)