feat: Privacy policy (#1957)

* feat: command side privacy policy

* feat: add privacy policy to api

* feat: add privacy policy query side

* fix: add privacy policy to mgmt api

* fix: add privacy policy to auth and base data

* feat: use privacyPolicy in login gui

* feat: use privacyPolicy in login gui

* feat: test org fatures

* feat: typos

* feat: tos in register
This commit is contained in:
Fabi
2021-07-05 10:36:51 +02:00
committed by GitHub
parent 91f1c88d4e
commit beb1c1604a
75 changed files with 3171 additions and 34 deletions

View File

@@ -0,0 +1,15 @@
package handler
import (
"net/http"
iam_model "github.com/caos/zitadel/internal/iam/model"
)
func (l *Login) getDefaultPrivacyPolicy(r *http.Request) (*iam_model.PrivacyPolicyView, error) {
policy, err := l.authRepo.GetDefaultPrivacyPolicy(r.Context())
if err != nil {
return nil, err
}
return policy, nil
}

View File

@@ -321,8 +321,19 @@ func (l *Login) getBaseData(r *http.Request, authReq *domain.AuthRequest, title
baseData.LoginPolicy = authReq.LoginPolicy
baseData.LabelPolicy = authReq.LabelPolicy
baseData.IDPProviders = authReq.AllowedExternalIDPs
if authReq.PrivacyPolicy != nil {
baseData.TOSLink = authReq.PrivacyPolicy.TOSLink
baseData.PrivacyLink = authReq.PrivacyPolicy.PrivacyLink
}
} else {
//TODO: How to handle LabelPolicy if no auth req (eg Register)
privacyPolicy, err := l.getDefaultPrivacyPolicy(r)
if err != nil {
return baseData
}
if privacyPolicy != nil {
baseData.TOSLink = privacyPolicy.TOSLink
baseData.PrivacyLink = privacyPolicy.PrivacyLink
}
}
return baseData
}
@@ -405,7 +416,6 @@ func (l *Login) isDisplayLoginNameSuffix(authReq *domain.AuthRequest) bool {
}
return authReq.LabelPolicy != nil && !authReq.LabelPolicy.HideLoginNameSuffix
}
func getRequestID(authReq *domain.AuthRequest, r *http.Request) string {
if authReq != nil {
return authReq.ID
@@ -437,6 +447,8 @@ type baseData struct {
OrgName string
PrimaryDomain string
DisplayLoginNameSuffix bool
TOSLink string
PrivacyLink string
AuthReqID string
CSRF template.HTML
Nonce string

View File

@@ -160,9 +160,7 @@ Registration:
TosConfirm: Ich akzeptiere die
TosLinkText: AGBs
TosConfirmAnd: und die
TosLink: https://docs.zitadel.ch/docs/legal/terms-of-service
PrivacyLinkText: Datenschutzerklärung
PrivacyLink: https://docs.zitadel.ch/docs/legal/privacy-policy
ExternalLogin: oder registriere dich mit einem externen Benutzer
RegistrationOrg:
@@ -187,9 +185,7 @@ RegistrationOrg:
TosConfirm: Ich akzeptiere die
TosLinkText: AGBs
TosConfirmAnd: und die
TosLink: https://docs.zitadel.ch/docs/legal/terms-of-service
PrivacyLinkText: Datenschutzerklärung
PrivacyLink: https://docs.zitadel.ch/docs/legal/privacy-policy
LinkingUsersDone:
Title: Benutzerlinking
@@ -228,9 +224,7 @@ Actions:
Footer:
PoweredBy: Powered By
Tos: AGB
TosLink: https://docs.zitadel.ch/docs/legal/terms-of-service
Privacy: Datenschutzerklärung
PrivacyLink: https://docs.zitadel.ch/docs/legal/privacy-policy
Help: Hilfe
Errors:

View File

@@ -160,9 +160,7 @@ Registration:
TosConfirm: I accept the
TosLinkText: TOS
TosConfirmAnd: and the
TosLink: https://docs.zitadel.ch/docs/legal/terms-of-service
PrivacyLinkText: privacy policy
PrivacyLink: https://docs.zitadel.ch/docs/legal/privacy-policy
ExternalLogin: or register with an external user
RegistrationOrg:
@@ -187,9 +185,7 @@ RegistrationOrg:
TosConfirm: I accept the
TosLinkText: TOS
TosConfirmAnd: and the
TosLink: https://docs.zitadel.ch/docs/legal/terms-of-service
PrivacyLinkText: privacy policy
PrivacyLink: https://docs.zitadel.ch/docs/legal/privacy-policy
LoginSuccess:
Title: Login successful
@@ -228,9 +224,7 @@ Actions:
Footer:
PoweredBy: Powered By
Tos: TOS
TosLink: https://docs.zitadel.ch/docs/legal/terms-of-service
Privacy: Privacy policy
PrivacyLink: https://docs.zitadel.ch/docs/legal/privacy-policy
Help: Help
Errors:

View File

@@ -1,3 +1,4 @@
{{define "footer"}}
<footer>
{{ if hasWatermark .LabelPolicy }}
@@ -7,8 +8,12 @@
</span>
{{end}}
<span class="fill-space"></span>
<a href="{{t "Footer.TosLink"}}" rel="noopener noreferrer" target="_blank" alt="TOS">{{t "Footer.Tos"}}</a>
<a href="{{t "Footer.PrivacyLink"}}" rel="noopener noreferrer" target="_blank" alt="Privacy Policy">{{t "Footer.Privacy"}}</a>
{{ if .TOSLink }}
<a href="{{.TOSLink}}" rel="noopener noreferrer" target="_blank" alt="TOS">{{t "Footer.Tos"}}</a>
{{ end }}
{{ if .PrivacyLink }}
<a href="{{.PrivacyLink}}" rel="noopener noreferrer" target="_blank" alt="Privacy Policy">{{t "Footer.Privacy"}}</a>
{{end}}
<a href="https://docs.zitadel.ch/docs/manuals/user-login" target="_black" alt="Help">{{t "Footer.Help"}}</a>
</footer>
{{end}}

View File

@@ -91,23 +91,31 @@
{{ .PasswordPolicyDescription }}
</div>
{{ if or .TOSLink .PrivacyLink }}
<div class="lgn-field">
<label class="lgn-label">{{t "Registration.TosAndPrivacy"}}</label>
<div class="lgn-checkbox">
<input type="checkbox" id="register-term-confirmation"
name="register-term-confirmation" required>
<label for="register-term-confirmation">
{{t "Registration.TosConfirm"}}
<a class="tos-link" target="_blank" href="{{t "Registration.TosLink"}}" rel="noopener noreferrer">
{{t "Registration.TosLinkText"}}
</a>
{{t "Registration.TosConfirmAnd"}}
<a class="tos-link" target="_blank" href="{{t "Registration.PrivacyLink"}}" rel="noopener noreferrer">
{{t "Registration.PrivacyLinkText"}}
</a>
{{t "Registration.TosConfirm"}}
{{ if .TOSLink }}
<a class="tos-link" target="_blank" href="{{ .TOSLink }}" rel="noopener noreferrer">
{{t "Registration.TosLinkText"}}
</a>
{{end}}
{{ if and .TOSLink .PrivacyLink }}
{{t "Registration.TosConfirmAnd"}}
{{ end }}
{{ if .PrivacyLink }}
<a class="tos-link" target="_blank" href="{{ .PrivacyLink}}" rel="noopener noreferrer">
{{t "Registration.PrivacyLinkText"}}
</a>
{{end}}
</label>
</div>
</div>
{{ end }}
</div>
{{template "error-message" .}}

View File

@@ -67,21 +67,32 @@
{{ .PasswordPolicyDescription }}
</div>
{{ if or .TOSLink .PrivacyLink }}
<div class="lgn-field">
<label class="lgn-label" for="register-term-confirmation">{{t "RegistrationOrg.TosAndPrivacy"}}</label>
<div class="lgn-checkbox">
<input class="lgn-input" type="checkbox" id="register-term-confirmation"
name="register-term-confirmation" required>
<label class="lgn-label" for="register-term-confirmation">
{{t "RegistrationOrg.TosConfirm"}}
<a class="tos-link" target="_blank" href="{{t "RegistrationOrg.TosLink"}}" rel="noopener noreferrer">{{t "RegistrationOrg.TosLinkText"}}</a>
{{t "Registration.TosConfirmAnd"}}
<a class="tos-link" target="_blank" href="{{t "Registration.PrivacyLink"}}" rel="noopener noreferrer">
{{t "Registration.PrivacyLinkText"}}
</a>
{{t "RegistrationOrg.TosConfirm"}}
{{ if .TOSLink }}
<a class="tos-link" target="_blank" href="{{.TOSLink}}" rel="noopener noreferrer">{{t "RegistrationOrg.TosLinkText"}}</a>
{{end}}
{{ if and .TOSLink .PrivacyLink }}
{{t "Registration.TosConfirmAnd"}}
{{end}}
{{ if .PrivacyLink }}
<a class="tos-link" target="_blank" href="{{.PrivacyLink}}" rel="noopener noreferrer">
{{t "Registration.PrivacyLinkText"}}
</a>
{{end}}
</label>
</div>
</div>
{{ end }}
</div>
{{template "error-message" .}}