From 4824e5c8ba71430866b79ce80e180fb2ab00ecd0 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 2 Jun 2020 23:52:02 +0200 Subject: [PATCH] docs: add docs for flows and all stages --- docs/Dockerfile | 14 ------ docs/build.sh | 3 ++ docs/flow/stages/email/email-recovery.png | Bin 0 -> 52236 bytes docs/flow/stages/email/email.md | 5 +++ .../stages/identification/identification.md | 25 +++++++++++ docs/flow/stages/invitation/invitation.md | 7 +++ docs/flow/stages/otp/otp.md | 7 +++ docs/flow/stages/password/password.md | 3 ++ docs/flow/stages/prompt/prompt.md | 42 ++++++++++++++++++ docs/flow/stages/prompt/validation.md | 17 +++++++ docs/flow/stages/user_delete.md | 8 ++++ docs/flow/stages/user_login.md | 5 +++ docs/flow/stages/user_logout.md | 3 ++ docs/flow/stages/user_write.md | 3 ++ docs/k8s/deployment.yml | 33 -------------- docs/k8s/ingress.yml | 21 --------- docs/k8s/service.yml | 17 ------- mkdocs.yml | 11 ++--- passbook/stages/invitation/stage.py | 2 + 19 files changed, 136 insertions(+), 90 deletions(-) delete mode 100644 docs/Dockerfile create mode 100755 docs/build.sh create mode 100644 docs/flow/stages/email/email-recovery.png create mode 100644 docs/flow/stages/email/email.md create mode 100644 docs/flow/stages/identification/identification.md create mode 100644 docs/flow/stages/invitation/invitation.md create mode 100644 docs/flow/stages/otp/otp.md create mode 100644 docs/flow/stages/password/password.md create mode 100644 docs/flow/stages/prompt/prompt.md create mode 100644 docs/flow/stages/prompt/validation.md create mode 100644 docs/flow/stages/user_delete.md create mode 100644 docs/flow/stages/user_login.md create mode 100644 docs/flow/stages/user_logout.md create mode 100644 docs/flow/stages/user_write.md delete mode 100644 docs/k8s/deployment.yml delete mode 100644 docs/k8s/ingress.yml delete mode 100644 docs/k8s/service.yml diff --git a/docs/Dockerfile b/docs/Dockerfile deleted file mode 100644 index d0953e8677..0000000000 --- a/docs/Dockerfile +++ /dev/null @@ -1,14 +0,0 @@ -FROM python:3.8-slim-buster as builder - -WORKDIR /mkdocs - -RUN pip install mkdocs mkdocs-material - -COPY docs/ docs -COPY mkdocs.yml . - -RUN mkdocs build - -FROM nginx - -COPY --from=builder /mkdocs/site /usr/share/nginx/html diff --git a/docs/build.sh b/docs/build.sh new file mode 100755 index 0000000000..3ca1642539 --- /dev/null +++ b/docs/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash -x +pip install -U mkdocs mkdocs-material +mkdocs gh-deploy diff --git a/docs/flow/stages/email/email-recovery.png b/docs/flow/stages/email/email-recovery.png new file mode 100644 index 0000000000000000000000000000000000000000..26c0cccb82345ba71569c9c20234b1f9b801caa3 GIT binary patch literal 52236 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 VxL73593J?mct!Pc?j_@Z{{f|bb`Ssn literal 0 HcmV?d00001 diff --git a/docs/flow/stages/email/email.md b/docs/flow/stages/email/email.md new file mode 100644 index 0000000000..c7f2f5e68b --- /dev/null +++ b/docs/flow/stages/email/email.md @@ -0,0 +1,5 @@ +# E-Mail + +This stage can be used for E-Mail verification. passbook's background worker will send an E-Mail using the specified connection details. When an E-Mail can't be delivered, it is automatically periodically retried. + +![](email-recovery.png) diff --git a/docs/flow/stages/identification/identification.md b/docs/flow/stages/identification/identification.md new file mode 100644 index 0000000000..4096f40b04 --- /dev/null +++ b/docs/flow/stages/identification/identification.md @@ -0,0 +1,25 @@ +# Identification + +This stage provides a ready-to-go form for users to identify themselves. + +## Options + +### User Fields + +Select which fields the user can use to identify themselves. Multiple fields can be specified and separated with a comma. +Valid choices: + +- email +- username + +### Template + +This specifies which template is rendered. Currently there are two templates. + +The `Login` template shows configured Sources below the login form, as well as linking to the defined Enrollment and Recovery flows. + +The `Recovery` template shows only the form. + +### Enrollment/Recovery Flow + +These fields specify if and which flows are linked on the form. The enrollment flow is linked as `Need an account? Sign up.`, and the recovery flow is linked as `Forgot username or password?`. diff --git a/docs/flow/stages/invitation/invitation.md b/docs/flow/stages/invitation/invitation.md new file mode 100644 index 0000000000..db01b83beb --- /dev/null +++ b/docs/flow/stages/invitation/invitation.md @@ -0,0 +1,7 @@ +# Invitation Stage + +This stage can be used to invite users. You can use this enroll users with preset values. + +If the option `Continue Flow without Invitation`, this stage will continue when no invitation token is present. + +If you want to check if a user has used an invitation within a policy, you can check `request.context.invitation_in_effect`. diff --git a/docs/flow/stages/otp/otp.md b/docs/flow/stages/otp/otp.md new file mode 100644 index 0000000000..c14f6af274 --- /dev/null +++ b/docs/flow/stages/otp/otp.md @@ -0,0 +1,7 @@ +# OTP Stage + +This stage offers a generic Time-based One-time Password authentication step. + +You can optionally enforce this step, which will force every user without OTP setup to configure it. + +This stage uses a 6-digit Code with a 30 second time-drift. This is currently not changeable. diff --git a/docs/flow/stages/password/password.md b/docs/flow/stages/password/password.md new file mode 100644 index 0000000000..319b0f486e --- /dev/null +++ b/docs/flow/stages/password/password.md @@ -0,0 +1,3 @@ +# Password Stage + +This is a generic password prompt, which authenticates the currently `pending_user`. This stage allows the selection of the Backend the user is authenticated against. diff --git a/docs/flow/stages/prompt/prompt.md b/docs/flow/stages/prompt/prompt.md new file mode 100644 index 0000000000..fa95e5e476 --- /dev/null +++ b/docs/flow/stages/prompt/prompt.md @@ -0,0 +1,42 @@ +# Prompt Stage + +This stage is used to show the user arbitrary prompts. + +## Prompt + +The prompt can be any of the following types: + +| | | +|----------|------------------------------------------------------------------| +| text | Arbitrary text, no client-side validation is done. | +| email | E-Mail input, requires a valid E-Mail adress | +| password | Password Input | +| number | Number Input, any number is allowed | +| checkbox | Simple Checkbox | +| hidden | Hidden Input field, allows for the pre-setting of default values | + +A Prompt has the following attributes: + +### `field_key` + +HTML name used for the prompt. This key is also used to later retrieve the data in expression policies: + +```jinja2 +{{ request.context.prompt_data. }} +``` + +### `label` + +Label used to describe the Field. This might not be shown depending on the template selected. + +### `required` + +Flag that decides whether or not this field is required. + +### `placeholder` + +Field placeholder, shown within the input field. This field is also used by the `hidden` type as the actual value. + +### `order` + +Numerical index of the prompt. This applies to all stages this prompt is a part of. diff --git a/docs/flow/stages/prompt/validation.md b/docs/flow/stages/prompt/validation.md new file mode 100644 index 0000000000..8c1ac4f288 --- /dev/null +++ b/docs/flow/stages/prompt/validation.md @@ -0,0 +1,17 @@ +# Prompt Validation + +Further validation of prompts can be done using policies. + +To validate that two password fields are identical, create the following expression policy: + +```jinja2 +{% if request.context.prompt_data.password == request.context.prompt_data.password_repeat %} +True +{% else %} +{% do pb_message("Passwords don't match.") %} +False +{% endif %} +``` +This policy expects you two have two password fields with `field_key` set to `password` and `password_repeat`. + +Afterwards bind this policy to the prompt stage you want to validate. diff --git a/docs/flow/stages/user_delete.md b/docs/flow/stages/user_delete.md new file mode 100644 index 0000000000..040337a814 --- /dev/null +++ b/docs/flow/stages/user_delete.md @@ -0,0 +1,8 @@ +# User Delete Stage + +!!! danger + This stage deletes the `pending_user` without any confirmation. You have to make sure the user is aware of this. + +This stage is intended for an unenrollment flow. It deletes the currently pending user. + +The pending user is also removed from the current session. diff --git a/docs/flow/stages/user_login.md b/docs/flow/stages/user_login.md new file mode 100644 index 0000000000..ab3f18d6c6 --- /dev/null +++ b/docs/flow/stages/user_login.md @@ -0,0 +1,5 @@ +# User Login Stage + +This stage attaches a currently pending user to the current session. + +It can be used after `user_write` during an enrollment flow, or after a `password` stage during an authentication flow. diff --git a/docs/flow/stages/user_logout.md b/docs/flow/stages/user_logout.md new file mode 100644 index 0000000000..47c7b3b7b2 --- /dev/null +++ b/docs/flow/stages/user_logout.md @@ -0,0 +1,3 @@ +# User Logout Stage + +Opposite stage of [User Login Stages](user_login.md). It removes the user from the current session. diff --git a/docs/flow/stages/user_write.md b/docs/flow/stages/user_write.md new file mode 100644 index 0000000000..9fd718ce00 --- /dev/null +++ b/docs/flow/stages/user_write.md @@ -0,0 +1,3 @@ +# User Write Stage + +This stages writes data from the current context to the current pending user. If no user is pending, a new one is created. diff --git a/docs/k8s/deployment.yml b/docs/k8s/deployment.yml deleted file mode 100644 index 616245cbb5..0000000000 --- a/docs/k8s/deployment.yml +++ /dev/null @@ -1,33 +0,0 @@ ---- -apiVersion: apps/v1beta2 -kind: Deployment -metadata: - name: passbook-docs - namespace: prod-passbook-docs - labels: - app.kubernetes.io/name: passbook-docs - app.kubernetes.io/managed-by: passbook-docs -spec: - replicas: 1 - selector: - matchLabels: - app.kubernetes.io/name: passbook-docs - template: - metadata: - labels: - app.kubernetes.io/name: passbook-docs - spec: - containers: - - name: passbook-docs - image: "beryju/passbook-docs:latest" - ports: - - name: http - containerPort: 80 - protocol: TCP - resources: - limits: - cpu: 10m - memory: 20Mi - requests: - cpu: 10m - memory: 20Mi diff --git a/docs/k8s/ingress.yml b/docs/k8s/ingress.yml deleted file mode 100644 index 210826cad0..0000000000 --- a/docs/k8s/ingress.yml +++ /dev/null @@ -1,21 +0,0 @@ ---- -apiVersion: extensions/v1beta1 -kind: Ingress -metadata: - labels: - app.kubernetes.io/name: passbook-docs - name: passbook-docs - namespace: prod-passbook-docs -spec: - rules: - - host: docs.passbook.beryju.org - http: - paths: - - backend: - serviceName: passbook-docs-http - servicePort: http - path: / - tls: - - hosts: - - docs.passbook.beryju.org - secretName: passbook-docs-acme diff --git a/docs/k8s/service.yml b/docs/k8s/service.yml deleted file mode 100644 index 0e83a1a8a2..0000000000 --- a/docs/k8s/service.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -apiVersion: v1 -kind: Service -metadata: - name: passbook-docs-http - namespace: prod-passbook-docs - labels: - app.kubernetes.io/name: passbook-docs -spec: - type: ClusterIP - ports: - - port: 80 - targetPort: http - protocol: TCP - name: http - selector: - app.kubernetes.io/name: passbook-docs diff --git a/mkdocs.yml b/mkdocs.yml index cc2d5e5256..e9f1731135 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -12,11 +12,12 @@ nav: - Captcha Stage: flow/stages/captcha/captcha.md - Dummy Stage: flow/stages/dummy/dummy.md - E-Mail Stage: flow/stages/email/email.md - - Identification Stage: flow/stages/identification.md - - Invitation Stage: flow/stages/invitation.md - - OTP Stage: flow/stages/otp.md - - Password Stage: flow/stages/password.md - - Prompt Stage: flow/stages/prompt.md + - Identification Stage: flow/stages/identification/identification.md + - Invitation Stage: flow/stages/invitation/invitation.md + - OTP Stage: flow/stages/otp/otp.md + - Password Stage: flow/stages/password/password.md + - Prompt Stage: flow/stages/prompt/prompt.md + - Prompt Stage Validation: flow/stages/prompt/validation.md - User Delete Stage: flow/stages/user_delete.md - User Login Stage: flow/stages/user_login.md - User Logout Stage: flow/stages/user_logout.md diff --git a/passbook/stages/invitation/stage.py b/passbook/stages/invitation/stage.py index 2ec3a5de7f..be15827759 100644 --- a/passbook/stages/invitation/stage.py +++ b/passbook/stages/invitation/stage.py @@ -7,6 +7,7 @@ from passbook.stages.invitation.models import Invitation, InvitationStage from passbook.stages.prompt.stage import PLAN_CONTEXT_PROMPT INVITATION_TOKEN_KEY = "token" +INVITATION_IN_EFFECT = "invitation_in_effect" class InvitationStageView(StageView): @@ -23,4 +24,5 @@ class InvitationStageView(StageView): token = request.GET[INVITATION_TOKEN_KEY] invite: Invitation = get_object_or_404(Invitation, pk=token) self.executor.plan.context[PLAN_CONTEXT_PROMPT] = invite.fixed_data + self.executor.plan.context[INVITATION_IN_EFFECT] = True return self.executor.stage_ok()