mirror of
https://github.com/zitadel/zitadel.git
synced 2024-12-13 03:24:26 +00:00
feat: check passwordpolicy on login (#477)
* fix: password complexity policy * feat: check password policy * feat: check password policy * fix: password policy on password change * fix: remove double policy check * feat: check pw policy on register * feat: check pw policy on init * fix: hover on secondary buttons * fix: use data set instead of hidden inputs * fix: disabled button * fix: en login * fix: read policy * feat: check if org exists * multiple checks * feat: validate all forms * fix: check all forms * fix: remove unused err Co-authored-by: Livio Amstutz <livio.a@gmail.com>
This commit is contained in:
parent
c34f6b1074
commit
2a3ecc0c6a
@ -12,8 +12,9 @@ const (
|
||||
)
|
||||
|
||||
type changePasswordData struct {
|
||||
OldPassword string `schema:"old_password"`
|
||||
NewPassword string `schema:"new_password"`
|
||||
OldPassword string `schema:"change-old-password"`
|
||||
NewPassword string `schema:"change-new-password"`
|
||||
NewPasswordConfirmation string `schema:"change-password-confirmation"`
|
||||
}
|
||||
|
||||
func (l *Login) handleChangePassword(w http.ResponseWriter, r *http.Request) {
|
||||
@ -23,6 +24,7 @@ func (l *Login) handleChangePassword(w http.ResponseWriter, r *http.Request) {
|
||||
l.renderError(w, r, authReq, err)
|
||||
return
|
||||
}
|
||||
|
||||
err = l.authRepo.ChangePassword(setContext(r.Context(), authReq.UserOrgID), authReq.UserID, data.OldPassword, data.NewPassword)
|
||||
if err != nil {
|
||||
l.renderChangePassword(w, r, authReq, err)
|
||||
@ -36,10 +38,27 @@ func (l *Login) renderChangePassword(w http.ResponseWriter, r *http.Request, aut
|
||||
if err != nil {
|
||||
errMessage = l.getErrorMessage(r, err)
|
||||
}
|
||||
data := userData{
|
||||
data := passwordData{
|
||||
baseData: l.getBaseData(r, authReq, "Change Password", errType, errMessage),
|
||||
LoginName: authReq.LoginName,
|
||||
}
|
||||
policy, description, _ := l.getPasswordComplexityPolicy(r, authReq.UserOrgID)
|
||||
if policy != nil {
|
||||
data.PasswordPolicyDescription = description
|
||||
data.MinLength = policy.MinLength
|
||||
if policy.HasUppercase {
|
||||
data.HasUppercase = UpperCaseRegex
|
||||
}
|
||||
if policy.HasLowercase {
|
||||
data.HasLowercase = LowerCaseRegex
|
||||
}
|
||||
if policy.HasSymbol {
|
||||
data.HasSymbol = SymbolRegex
|
||||
}
|
||||
if policy.HasNumber {
|
||||
data.HasNumber = NumberRegex
|
||||
}
|
||||
}
|
||||
l.renderer.RenderTemplate(w, r, l.renderer.Templates[tmplChangePassword], data, nil)
|
||||
}
|
||||
|
||||
|
@ -25,8 +25,14 @@ type initPasswordFormData struct {
|
||||
|
||||
type initPasswordData struct {
|
||||
baseData
|
||||
Code string
|
||||
UserID string
|
||||
Code string
|
||||
UserID string
|
||||
PasswordPolicyDescription string
|
||||
MinLength uint64
|
||||
HasUppercase string
|
||||
HasLowercase string
|
||||
HasNumber string
|
||||
HasSymbol string
|
||||
}
|
||||
|
||||
func (l *Login) handleInitPassword(w http.ResponseWriter, r *http.Request) {
|
||||
@ -85,11 +91,29 @@ func (l *Login) renderInitPassword(w http.ResponseWriter, r *http.Request, authR
|
||||
if userID == "" && authReq != nil {
|
||||
userID = authReq.UserID
|
||||
}
|
||||
|
||||
data := initPasswordData{
|
||||
baseData: l.getBaseData(r, authReq, "Init Password", errType, errMessage),
|
||||
UserID: userID,
|
||||
Code: code,
|
||||
}
|
||||
policy, description, _ := l.getPasswordComplexityPolicyByUserID(r, userID)
|
||||
if policy != nil {
|
||||
data.PasswordPolicyDescription = description
|
||||
data.MinLength = policy.MinLength
|
||||
if policy.HasUppercase {
|
||||
data.HasUppercase = UpperCaseRegex
|
||||
}
|
||||
if policy.HasLowercase {
|
||||
data.HasLowercase = LowerCaseRegex
|
||||
}
|
||||
if policy.HasSymbol {
|
||||
data.HasSymbol = SymbolRegex
|
||||
}
|
||||
if policy.HasNumber {
|
||||
data.HasNumber = NumberRegex
|
||||
}
|
||||
}
|
||||
l.renderer.RenderTemplate(w, r, l.renderer.Templates[tmplInitPassword], data, nil)
|
||||
}
|
||||
|
||||
|
@ -28,9 +28,15 @@ type initUserFormData struct {
|
||||
|
||||
type initUserData struct {
|
||||
baseData
|
||||
Code string
|
||||
UserID string
|
||||
PasswordSet bool
|
||||
Code string
|
||||
UserID string
|
||||
PasswordSet bool
|
||||
PasswordPolicyDescription string
|
||||
MinLength uint64
|
||||
HasUppercase string
|
||||
HasLowercase string
|
||||
HasNumber string
|
||||
HasSymbol string
|
||||
}
|
||||
|
||||
func (l *Login) handleInitUser(w http.ResponseWriter, r *http.Request) {
|
||||
@ -96,6 +102,23 @@ func (l *Login) renderInitUser(w http.ResponseWriter, r *http.Request, authReq *
|
||||
Code: code,
|
||||
PasswordSet: passwordSet,
|
||||
}
|
||||
policy, description, _ := l.getPasswordComplexityPolicyByUserID(r, userID)
|
||||
if policy != nil {
|
||||
data.PasswordPolicyDescription = description
|
||||
data.MinLength = policy.MinLength
|
||||
if policy.HasUppercase {
|
||||
data.HasUppercase = UpperCaseRegex
|
||||
}
|
||||
if policy.HasLowercase {
|
||||
data.HasLowercase = LowerCaseRegex
|
||||
}
|
||||
if policy.HasSymbol {
|
||||
data.HasSymbol = SymbolRegex
|
||||
}
|
||||
if policy.HasNumber {
|
||||
data.HasNumber = NumberRegex
|
||||
}
|
||||
}
|
||||
l.renderer.RenderTemplate(w, r, l.renderer.Templates[tmplInitUser], data, nil)
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,98 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"github.com/caos/zitadel/internal/auth_request/model"
|
||||
"github.com/caos/zitadel/internal/errors"
|
||||
policy_model "github.com/caos/zitadel/internal/policy/model"
|
||||
"net/http"
|
||||
"regexp"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
const (
|
||||
LowerCaseRegex = `[a-z]`
|
||||
UpperCaseRegex = `[A-Z]`
|
||||
NumberRegex = `[0-9]`
|
||||
SymbolRegex = `[^A-Za-z0-9]`
|
||||
)
|
||||
|
||||
var (
|
||||
hasStringLowerCase = regexp.MustCompile(LowerCaseRegex).MatchString
|
||||
hasStringUpperCase = regexp.MustCompile(UpperCaseRegex).MatchString
|
||||
hasNumber = regexp.MustCompile(NumberRegex).MatchString
|
||||
hasSymbol = regexp.MustCompile(SymbolRegex).MatchString
|
||||
)
|
||||
|
||||
func (l *Login) getPasswordComplexityPolicy(r *http.Request, orgID string) (*policy_model.PasswordComplexityPolicy, string, error) {
|
||||
policy, err := l.authRepo.GetMyPasswordComplexityPolicy(setContext(r.Context(), orgID))
|
||||
if err != nil {
|
||||
return nil, err.Error(), err
|
||||
}
|
||||
description, err := l.generatePolicyDescription(r, policy)
|
||||
return policy, description, nil
|
||||
}
|
||||
|
||||
func (l *Login) getPasswordComplexityPolicyByUserID(r *http.Request, userID string) (*policy_model.PasswordComplexityPolicy, string, error) {
|
||||
user, err := l.authRepo.UserByID(r.Context(), userID)
|
||||
if err != nil {
|
||||
return nil, "", nil
|
||||
}
|
||||
policy, err := l.authRepo.GetMyPasswordComplexityPolicy(setContext(r.Context(), user.ResourceOwner))
|
||||
if err != nil {
|
||||
return nil, err.Error(), err
|
||||
}
|
||||
description, err := l.generatePolicyDescription(r, policy)
|
||||
return policy, description, nil
|
||||
}
|
||||
|
||||
func (l *Login) generatePolicyDescription(r *http.Request, policy *policy_model.PasswordComplexityPolicy) (string, error) {
|
||||
description := "<ul id=\"passwordcomplexity\">"
|
||||
minLength := l.renderer.LocalizeFromRequest(r, "Password.MinLength", nil)
|
||||
description += "<li id=\"minlength\" class=\"invalid\"><i class=\"material-icons\">clear</i>" + minLength + " " + strconv.Itoa(int(policy.MinLength)) + "</li>"
|
||||
if policy.HasUppercase {
|
||||
uppercase := l.renderer.LocalizeFromRequest(r, "Password.HasUppercase", nil)
|
||||
description += "<li id=\"uppercase\" class=\"invalid\"><i class=\"material-icons\">clear</i>" + uppercase + "</li>"
|
||||
}
|
||||
if policy.HasLowercase {
|
||||
lowercase := l.renderer.LocalizeFromRequest(r, "Password.HasLowercase", nil)
|
||||
description += "<li id=\"lowercase\" class=\"invalid\"><i class=\"material-icons\">clear</i>" + lowercase + "</li>"
|
||||
}
|
||||
if policy.HasNumber {
|
||||
hasnumber := l.renderer.LocalizeFromRequest(r, "Password.HasNumber", nil)
|
||||
description += "<li id=\"number\" class=\"invalid\"><i class=\"material-icons\">clear</i>" + hasnumber + "</li>"
|
||||
}
|
||||
if policy.HasSymbol {
|
||||
hassymbol := l.renderer.LocalizeFromRequest(r, "Password.HasSymbol", nil)
|
||||
description += "<li id=\"symbol\" class=\"invalid\"><i class=\"material-icons\">clear</i>" + hassymbol + "</li>"
|
||||
}
|
||||
|
||||
description += "</ul>"
|
||||
return description, nil
|
||||
}
|
||||
|
||||
func (l *Login) checkPasswordComplexityPolicy(password string, r *http.Request, authReq *model.AuthRequest) error {
|
||||
policy, err := l.authRepo.GetMyPasswordComplexityPolicy(setContext(r.Context(), authReq.UserOrgID))
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
if policy.MinLength != 0 && uint64(len(password)) < policy.MinLength {
|
||||
return errors.ThrowInvalidArgument(nil, "POLICY-LSo0p", "Errors.User.PasswordComplexityPolicy.MinLength")
|
||||
}
|
||||
|
||||
if policy.HasLowercase && !hasStringLowerCase(password) {
|
||||
return errors.ThrowInvalidArgument(nil, "POLICY-4Sjsf", "Errors.User.PasswordComplexityPolicy.HasLower")
|
||||
}
|
||||
|
||||
if policy.HasUppercase && !hasStringUpperCase(password) {
|
||||
return errors.ThrowInvalidArgument(nil, "POLICY-6Sjc9", "Errors.User.PasswordComplexityPolicy.HasUpper")
|
||||
}
|
||||
|
||||
if policy.HasNumber && !hasNumber(password) {
|
||||
return errors.ThrowInvalidArgument(nil, "POLICY-2Fksi", "Errors.User.PasswordComplexityPolicy.HasNumber")
|
||||
}
|
||||
|
||||
if policy.HasSymbol && !hasSymbol(password) {
|
||||
return errors.ThrowInvalidArgument(nil, "POLICY-0Js6e", "Errors.User.PasswordComplexityPolicy.HasSymbol")
|
||||
}
|
||||
return nil
|
||||
}
|
@ -10,7 +10,7 @@ const (
|
||||
tmplPassword = "password"
|
||||
)
|
||||
|
||||
type passwordData struct {
|
||||
type passwordFormData struct {
|
||||
Password string `schema:"password"`
|
||||
}
|
||||
|
||||
@ -27,7 +27,7 @@ func (l *Login) renderPassword(w http.ResponseWriter, r *http.Request, authReq *
|
||||
}
|
||||
|
||||
func (l *Login) handlePasswordCheck(w http.ResponseWriter, r *http.Request) {
|
||||
data := new(passwordData)
|
||||
data := new(passwordFormData)
|
||||
authReq, err := l.getAuthRequestAndParseData(r, data)
|
||||
if err != nil {
|
||||
l.renderError(w, r, authReq, err)
|
||||
|
@ -23,13 +23,19 @@ type registerFormData struct {
|
||||
Lastname string `schema:"lastname"`
|
||||
Language string `schema:"language"`
|
||||
Gender int32 `schema:"gender"`
|
||||
Password string `schema:"password"`
|
||||
Password2 string `schema:"password2"`
|
||||
Password string `schema:"register-password"`
|
||||
Password2 string `schema:"register-password-confirmation"`
|
||||
}
|
||||
|
||||
type registerData struct {
|
||||
baseData
|
||||
registerFormData
|
||||
PasswordPolicyDescription string
|
||||
MinLength uint64
|
||||
HasUppercase string
|
||||
HasLowercase string
|
||||
HasNumber string
|
||||
HasSymbol string
|
||||
}
|
||||
|
||||
func (l *Login) handleRegister(w http.ResponseWriter, r *http.Request) {
|
||||
@ -88,10 +94,32 @@ func (l *Login) renderRegister(w http.ResponseWriter, r *http.Request, authReque
|
||||
if formData.Language == "" {
|
||||
formData.Language = l.renderer.Lang(r).String()
|
||||
}
|
||||
|
||||
data := registerData{
|
||||
baseData: l.getBaseData(r, authRequest, "Register", errType, errMessage),
|
||||
registerFormData: *formData,
|
||||
}
|
||||
iam, _ := l.authRepo.GetIam(r.Context())
|
||||
if iam != nil {
|
||||
policy, description, _ := l.getPasswordComplexityPolicy(r, iam.GlobalOrgID)
|
||||
if policy != nil {
|
||||
data.PasswordPolicyDescription = description
|
||||
data.MinLength = policy.MinLength
|
||||
if policy.HasUppercase {
|
||||
data.HasUppercase = UpperCaseRegex
|
||||
}
|
||||
if policy.HasLowercase {
|
||||
data.HasLowercase = LowerCaseRegex
|
||||
}
|
||||
if policy.HasSymbol {
|
||||
data.HasSymbol = SymbolRegex
|
||||
}
|
||||
if policy.HasNumber {
|
||||
data.HasNumber = NumberRegex
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
funcs := map[string]interface{}{
|
||||
"selectedLanguage": func(l string) bool {
|
||||
if formData == nil {
|
||||
|
@ -3,12 +3,11 @@ package handler
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/gorilla/csrf"
|
||||
"html/template"
|
||||
"net/http"
|
||||
"path"
|
||||
|
||||
"github.com/gorilla/csrf"
|
||||
|
||||
"github.com/caos/zitadel/internal/api/http/middleware"
|
||||
"github.com/caos/zitadel/internal/auth_request/model"
|
||||
caos_errs "github.com/caos/zitadel/internal/errors"
|
||||
@ -264,6 +263,17 @@ type userData struct {
|
||||
SelectedMfaProvider model.MfaType
|
||||
}
|
||||
|
||||
type passwordData struct {
|
||||
baseData
|
||||
LoginName string
|
||||
PasswordPolicyDescription string
|
||||
MinLength uint64
|
||||
HasUppercase string
|
||||
HasLowercase string
|
||||
HasNumber string
|
||||
HasSymbol string
|
||||
}
|
||||
|
||||
type userSelectionData struct {
|
||||
baseData
|
||||
Users []model.UserSelection
|
||||
|
@ -2,6 +2,11 @@ Password:
|
||||
Title: Passwort
|
||||
Description: Gib deine Benutzerdaten ein.
|
||||
Password: Passwort
|
||||
MinLength: Mindestlänge
|
||||
HasUppercase: Grossbuchstaben
|
||||
HasLowercase: Kleinbuchstaben
|
||||
HasNumber: Nummer
|
||||
HasSymbol: Symbol
|
||||
|
||||
Login:
|
||||
Title: Anmeldung
|
||||
@ -66,6 +71,7 @@ PasswordChange:
|
||||
Description: Ändere dein Password in dem du dein altes und dann dein neuen Passwort eingibst.
|
||||
OldPassword: Altes Passwort
|
||||
NewPassword: Neues Passwort
|
||||
NewPasswordConfirmation: Passwort Bestätigung
|
||||
|
||||
PasswordChangeDone:
|
||||
Title: Passwort ändern
|
||||
|
@ -15,6 +15,11 @@ Password:
|
||||
Title: Password
|
||||
Description: Enter your logindata.
|
||||
Password: Password
|
||||
MinLength: Minimumlength
|
||||
HasUppercase: Uppercase letter
|
||||
HasLowercase: Lowercase letter
|
||||
HasNumber: Number
|
||||
HasSymbol: Symbol
|
||||
|
||||
MfaVerify:
|
||||
Title: Verify Multificator
|
||||
@ -66,6 +71,7 @@ PasswordChange:
|
||||
Description: Change your password. Enter your old and new password.
|
||||
OldPassword: Old Password
|
||||
NewPassword: New Password
|
||||
NewPasswordConfirmation: Passwort confirmation
|
||||
|
||||
PasswordChangeDone:
|
||||
Title: Change Password
|
||||
|
@ -0,0 +1,14 @@
|
||||
function CheckChangePwPolicy() {
|
||||
let policyElement = document.getElementById("change-new-password")
|
||||
let pwNew = policyElement.value;
|
||||
let pwNewConfirmation = document.getElementById("change-password-confirmation").value;
|
||||
|
||||
if (ComplexityPolicyCheck(policyElement, pwNew) === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return pwNew == pwNewConfirmation;
|
||||
}
|
||||
|
||||
let button = document.getElementById("change-password--button");
|
||||
disableSubmit(CheckChangePwPolicy, button);
|
@ -0,0 +1,3 @@
|
||||
|
||||
let button = document.getElementById("submit-button");
|
||||
disableSubmit(undefined, button);
|
29
internal/ui/login/static/resources/scripts/form_submit.js
Normal file
29
internal/ui/login/static/resources/scripts/form_submit.js
Normal file
@ -0,0 +1,29 @@
|
||||
function disableSubmit(checks, button) {
|
||||
console.log("GUGUS");
|
||||
let form = document.getElementsByTagName('form')[0];
|
||||
let inputs = form.getElementsByTagName('input');
|
||||
for (i = 0; i < inputs.length; i++) {
|
||||
inputs[i].addEventListener('input', function () {
|
||||
if (checks != undefined) {
|
||||
if (checks() === false) {
|
||||
button.disabled = true;
|
||||
return
|
||||
}
|
||||
}
|
||||
if (checkRequired(form, inputs) === false) {
|
||||
button.disabled = true;
|
||||
return
|
||||
}
|
||||
button.disabled = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function checkRequired(form, inputs) {
|
||||
for (i = 0; i < inputs.length; i++) {
|
||||
if (inputs[i].required && inputs[i].value == '') {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
function CheckInitPwPolicy() {
|
||||
let policyElement = document.getElementById("password");
|
||||
let pwNew = policyElement.value;
|
||||
let pwNewConfirmation = document.getElementById("passwordconfirm").value;
|
||||
|
||||
if (ComplexityPolicyCheck(policyElement, pwNew) === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return pwNew == pwNewConfirmation;
|
||||
}
|
||||
|
||||
let button = document.getElementById("init-button");
|
||||
disableSubmit(CheckInitPwPolicy, button);
|
@ -0,0 +1,68 @@
|
||||
function ComplexityPolicyCheck(policyElement, pwNew) {
|
||||
let minLength = policyElement.dataset.minlength;
|
||||
let upperRegex = policyElement.dataset.hasUppercase;
|
||||
let lowerRegex = policyElement.dataset.hasLowercase;
|
||||
let numberRegex = policyElement.dataset.hasNumber;
|
||||
let symbolRegex = policyElement.dataset.hasSymbol;
|
||||
|
||||
let valid = true;
|
||||
|
||||
let minlengthelem = document.getElementById('minlength')
|
||||
if (pwNew.length >= minLength) {
|
||||
ValidPolicy(minlengthelem);
|
||||
valid = true;
|
||||
} else {
|
||||
InvalidPolicy(minlengthelem);
|
||||
valid = false;
|
||||
}
|
||||
let upper = document.getElementById('uppercase')
|
||||
if (upperRegex !== "") {
|
||||
if (RegExp(upperRegex).test(pwNew)) {
|
||||
ValidPolicy(upper);
|
||||
valid = true;
|
||||
} else {
|
||||
InvalidPolicy(upper);
|
||||
valid = false;
|
||||
}
|
||||
}
|
||||
let lower = document.getElementById('lowercase')
|
||||
if (lowerRegex !== "") {
|
||||
if (RegExp(lowerRegex).test(pwNew)) {
|
||||
ValidPolicy(lower);
|
||||
valid = true;
|
||||
} else {
|
||||
InvalidPolicy(lower);
|
||||
valid = false;
|
||||
}
|
||||
}
|
||||
let number = document.getElementById('number')
|
||||
if (numberRegex != "") {
|
||||
if (RegExp(numberRegex).test(pwNew)) {
|
||||
ValidPolicy(number);
|
||||
valid = true;
|
||||
} else {
|
||||
InvalidPolicy(number);
|
||||
valid = false;
|
||||
}
|
||||
}
|
||||
let symbol = document.getElementById('symbol')
|
||||
if (symbolRegex != "") {
|
||||
if (RegExp(symbolRegex).test(pwNew)) {
|
||||
ValidPolicy(symbol)
|
||||
valid = true;
|
||||
} else {
|
||||
InvalidPolicy(symbol);
|
||||
valid = false;
|
||||
}
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
function ValidPolicy(element) {
|
||||
element.classList.remove('invalid')
|
||||
element.getElementsByTagName('i')[0].innerText = 'check';
|
||||
}
|
||||
|
||||
function InvalidPolicy(element) {
|
||||
element.classList.add('invalid')
|
||||
element.getElementsByTagName('i')[0].innerText = 'clear';
|
||||
}
|
14
internal/ui/login/static/resources/scripts/register_check.js
Normal file
14
internal/ui/login/static/resources/scripts/register_check.js
Normal file
@ -0,0 +1,14 @@
|
||||
function CheckRegisterPwPolicy() {
|
||||
let policyElement = document.getElementById("register-password");
|
||||
let pwNew = policyElement.value;
|
||||
let pwNewConfirmation = document.getElementById("register-password-confirmation").value;
|
||||
|
||||
if (ComplexityPolicyCheck(policyElement, pwNew) === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return pwNew == pwNewConfirmation;
|
||||
}
|
||||
|
||||
let button = document.getElementById("register-button");
|
||||
disableSubmit(CheckRegisterPwPolicy, button);
|
@ -144,6 +144,7 @@ button {
|
||||
}
|
||||
button:hover {
|
||||
background-color: #f60075;
|
||||
color: #282828;
|
||||
border: 2px solid #f60075;
|
||||
}
|
||||
button.primary {
|
||||
@ -154,6 +155,14 @@ button.primary {
|
||||
button.primary:hover {
|
||||
background-color: #f60075;
|
||||
}
|
||||
button:disabled {
|
||||
background-color: #505050;
|
||||
border: 2px solid #505050;
|
||||
}
|
||||
button:disabled:hover {
|
||||
background-color: #505050;
|
||||
border: 2px solid #505050;
|
||||
}
|
||||
|
||||
input:not([type=radio]), select {
|
||||
background-color: #252525;
|
||||
@ -300,6 +309,28 @@ form button.other-user > div:nth-of-type(2) {
|
||||
margin: 15px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
form ul#passwordcomplexity {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
form ul#passwordcomplexity li {
|
||||
flex: 1 0 50%;
|
||||
display: block;
|
||||
font-weight: 300;
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
}
|
||||
form ul#passwordcomplexity li i {
|
||||
height: 26px;
|
||||
padding-right: 10px;
|
||||
vertical-align: middle;
|
||||
color: #0DF279;
|
||||
}
|
||||
form ul#passwordcomplexity li.invalid i {
|
||||
color: #F20D6B;
|
||||
}
|
||||
|
||||
#copy-secret {
|
||||
visibility: hidden;
|
||||
|
@ -1 +1 @@
|
||||
{"version":3,"sourceRoot":"","sources":["../../scss/fonts.scss","../../scss/main.scss","../../scss/caos/variables.scss","../../scss/variables.scss"],"names":[],"mappings":"AACA;EACI;EACA;;AAIJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;AAA6D;EAC7D;;AC5EJ;EACI;EACA,aCMW;EDLX;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA,kBCDc;EDEd,OCDQ;EDER;EACA;EACA;;;AAMJ;EACI,OCXQ;EDYR,aClBS;EDmBT;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;AAEA;EACI;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;EACA;;;AAGJ;EACI,OCxCW;EDyCX;EACA;;AAEA;EACI,OC5CY;;;ADgDpB;EACI,kBCpDc;EDqDd,OCnDW;EDoDX;EACA;EACA;EACA;EACA,QErEU;EFsEV;EACA;EACA;;AACA;EACI,kBC5DY;ED6DZ;;AAGJ;EACI,kBClEO;EDmEP,OCpEI;EDqEJ;;AACA;EACI,kBCrEQ;;;AD0EpB;EACI,kBElEmB;EFmEnB,OC9EQ;ED+ER,QE3FU;EF4FV;EACA;EACA;;;AAIA;EACI;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAIR;EACI,OEnGK;EFoGL;EACA;EACA;;AAEA;EACI;EACA;;AAIR;EACI;;AAEA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA,OCtII;EDuIJ;EACA;EACA;EACA;;AAEA;EACI;EACA,kBEnIW;;AFsIf;EACI;;AAIR;EACI;;AAIA;EACI;EACA;EEhKV;;AACA;EF6JM;IE5JJ;IACA;;;AFkKQ;EErKV;;AACA;EFoKU;IEnKR;IACA;;;AFuKI;EACI;EACA;EACA;EACA;EACA,cElKO;EFmKP;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAKR;EACI;;AAEA;EACI;;AAEA;EACI;;AAEJ;EACI,OE9LP;;AFqML;EACI;;AAEJ;EACI;EACA;EACA;EACA;EExNV;;AACA;EFmNM;IElNJ;IACA;;;AF0NQ;EACI;EACA;EE/Nd;;AACA;EF4NU;IE3NR;IACA;;;AFiOI;EACI;EACA;;;AAKZ;EACI;EACA;;;AAGJ;EACI;;AAEA;EACI,MCjPI;;ADoPR;EACI,MCtPU;;;AD2Pd;EACI;EACA;;;AAIR;EAEQ;EAEJ;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;AAAkB;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;AACA;EACA;AAEA;EACA;AAEA;EACA","file":"dark.css"}
|
||||
{"version":3,"sourceRoot":"","sources":["../../scss/fonts.scss","../../scss/main.scss","../../scss/caos/variables.scss","../../scss/variables.scss"],"names":[],"mappings":"AACA;EACI;EACA;;AAIJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;AAA6D;EAC7D;;AC5EJ;EACI;EACA,aCMW;EDLX;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA,kBCDc;EDEd,OCDQ;EDER;EACA;EACA;;;AAMJ;EACI,OCXQ;EDYR,aClBS;EDmBT;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;AAEA;EACI;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;EACA;;;AAGJ;EACI,OCxCW;EDyCX;EACA;;AAEA;EACI,OC5CY;;;ADgDpB;EACI,kBCpDc;EDqDd,OCnDW;EDoDX;EACA;EACA;EACA;EACA,QErEU;EFsEV;EACA;EACA;;AACA;EACI,kBC5DY;ED6DZ,OChEU;EDiEV;;AAGJ;EACI,kBCnEO;EDoEP,OCrEI;EDsEJ;;AACA;EACI,kBCtEQ;;AD0EhB;EACI,kBEnEW;EFoEX;;AAEA;EACI,kBEvEO;EFwEP;;;AAKZ;EACI,kBE7EmB;EF8EnB,OCzFQ;ED0FR,QEtGU;EFuGV;EACA;EACA;;;AAIA;EACI;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAIR;EACI,OE9GK;EF+GL;EACA;EACA;;AAEA;EACI;EACA;;AAIR;EACI;;AAEA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA,OCjJI;EDkJJ;EACA;EACA;EACA;;AAEA;EACI;EACA,kBE9IW;;AFiJf;EACI;;AAIR;EACI;;AAIA;EACI;EACA;EE3KV;;AACA;EFwKM;IEvKJ;IACA;;;AF6KQ;EEhLV;;AACA;EF+KU;IE9KR;IACA;;;AFkLI;EACI;EACA;EACA;EACA;EACA,cE7KO;EF8KP;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAKR;EACI;;AAEA;EACI;;AAEA;EACI;;AAEJ;EACI,OEzMP;;AFgNL;EACI;;AAEJ;EACI;EACA;EACA;EACA;EEnOV;;AACA;EF8NM;IE7NJ;IACA;;;AFqOQ;EACI;EACA;EE1Od;;AACA;EFuOU;IEtOR;IACA;;;AF4OI;EACI;EACA;;AAIR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA,OEnPN;;AFwPE;EACI,OE1PL;;;AFgQX;EACI;EACA;;;AAGJ;EACI;;AAEA;EACI,MCxRI;;AD2RR;EACI,MC7RU;;;ADkSd;EACI;EACA;;;AAIR;EAEQ;EAEJ;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;AAAkB;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;AACA;EACA;AAEA;EACA;AAEA;EACA","file":"dark.css"}
|
@ -144,6 +144,7 @@ button {
|
||||
}
|
||||
button:hover {
|
||||
background-color: #f60075;
|
||||
color: #282828;
|
||||
border: 2px solid #f60075;
|
||||
}
|
||||
button.primary {
|
||||
@ -154,6 +155,14 @@ button.primary {
|
||||
button.primary:hover {
|
||||
background-color: #f60075;
|
||||
}
|
||||
button:disabled {
|
||||
background-color: #505050;
|
||||
border: 2px solid #505050;
|
||||
}
|
||||
button:disabled:hover {
|
||||
background-color: #505050;
|
||||
border: 2px solid #505050;
|
||||
}
|
||||
|
||||
input:not([type=radio]), select {
|
||||
background-color: #252525;
|
||||
@ -300,6 +309,28 @@ form button.other-user > div:nth-of-type(2) {
|
||||
margin: 15px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
form ul#passwordcomplexity {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
form ul#passwordcomplexity li {
|
||||
flex: 1 0 50%;
|
||||
display: block;
|
||||
font-weight: 300;
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
}
|
||||
form ul#passwordcomplexity li i {
|
||||
height: 26px;
|
||||
padding-right: 10px;
|
||||
vertical-align: middle;
|
||||
color: #0DF279;
|
||||
}
|
||||
form ul#passwordcomplexity li.invalid i {
|
||||
color: #F20D6B;
|
||||
}
|
||||
|
||||
#copy-secret {
|
||||
visibility: hidden;
|
||||
|
@ -1 +1 @@
|
||||
{"version":3,"sourceRoot":"","sources":["../../scss/fonts.scss","../../scss/main.scss","../../scss/caos/variables.scss","../../scss/variables.scss","../../scss/light.scss"],"names":[],"mappings":"AACA;EACI;EACA;;AAIJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;AAA6D;EAC7D;;AC5EJ;EACI;EACA,aCMW;EDLX;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA,kBCDc;EDEd,OCDQ;EDER;EACA;EACA;;;AAMJ;EACI,OCXQ;EDYR,aClBS;EDmBT;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;AAEA;EACI;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;EACA;;;AAGJ;EACI,OCxCW;EDyCX;EACA;;AAEA;EACI,OC5CY;;;ADgDpB;EACI,kBCpDc;EDqDd,OCnDW;EDoDX;EACA;EACA;EACA;EACA,QErEU;EFsEV;EACA;EACA;;AACA;EACI,kBC5DY;ED6DZ;;AAGJ;EACI,kBClEO;EDmEP,OCpEI;EDqEJ;;AACA;EACI,kBCrEQ;;;AD0EpB;EACI,kBElEmB;EFmEnB,OC9EQ;ED+ER,QE3FU;EF4FV;EACA;EACA;;;AAIA;EACI;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAIR;EACI,OEnGK;EFoGL;EACA;EACA;;AAEA;EACI;EACA;;AAIR;EACI;;AAEA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA,OCtII;EDuIJ;EACA;EACA;EACA;;AAEA;EACI;EACA,kBEnIW;;AFsIf;EACI;;AAIR;EACI;;AAIA;EACI;EACA;EEhKV;;AACA;EF6JM;IE5JJ;IACA;;;AFkKQ;EErKV;;AACA;EFoKU;IEnKR;IACA;;;AFuKI;EACI;EACA;EACA;EACA;EACA,cElKO;EFmKP;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAKR;EACI;;AAEA;EACI;;AAEA;EACI;;AAEJ;EACI,OE9LP;;AFqML;EACI;;AAEJ;EACI;EACA;EACA;EACA;EExNV;;AACA;EFmNM;IElNJ;IACA;;;AF0NQ;EACI;EACA;EE/Nd;;AACA;EF4NU;IE3NR;IACA;;;AFiOI;EACI;EACA;;;AAKZ;EACI;EACA;;;AAGJ;EACI;;AAEA;EACI,MCjPI;;ADoPR;EACI,MCtPU;;;AD2Pd;EACI;EACA;;;AAIR;EAEQ;EAEJ;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;AAAkB;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;AACA;EACA;AAEA;EACA;AAEA;EACA;;;AGlTJ;EACI,kBFeQ;EEdR,OFac;;AERd;EACI;;AAGJ;EACI,OFGU;;AEAd;EACI;EACA;EACA;;AAEA;EACI,kBFIa;EEHb;;AAGJ;EACI,kBFTG;EEUH,OFXA;EEYA;EACA;;AACA;EACI,kBFbI;;AEiBZ;EACI,OFrBM;;AEuBN;EACI;EACA,kBDbO;;ACkBX;EDhCV;;AACA;EC+BU;ID9BR;IACA;;;ACiCQ;EACI,kBDvBO;;ACyBP;EDvCd;;AACA;ECsCc;IDrCZ;IACA;;;AC2CQ;ED9CV;;AACA;EC6CU;ID5CR;IACA;;;ACgDY;EDnDd;;AACA;ECkDc;IDjDZ;IACA;;;ACuDA;EACI,kBDlCoB;ECmCpB,OF1DU;;AE8DV;EACI,MF/DM;;AEkEV;EACI,MFlEA;;AEsER;EAEQ","file":"light.css"}
|
||||
{"version":3,"sourceRoot":"","sources":["../../scss/fonts.scss","../../scss/main.scss","../../scss/caos/variables.scss","../../scss/variables.scss","../../scss/light.scss"],"names":[],"mappings":"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","file":"light.css"}
|
@ -78,6 +78,7 @@ button {
|
||||
outline: none;
|
||||
&:hover {
|
||||
background-color: $primaryColorHover;
|
||||
color: $backgroundColor;
|
||||
border: 2px solid $primaryColorHover;
|
||||
}
|
||||
|
||||
@ -89,6 +90,16 @@ button {
|
||||
background-color: $primaryColorHover;
|
||||
}
|
||||
}
|
||||
|
||||
&:disabled {
|
||||
background-color: $inputBorderColor;
|
||||
border: 2px solid $inputBorderColor;
|
||||
|
||||
&:hover {
|
||||
background-color: $inputBorderColor;
|
||||
border: 2px solid $inputBorderColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
input:not([type='radio']), select {
|
||||
@ -245,6 +256,34 @@ form {
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
}
|
||||
|
||||
ul#passwordcomplexity {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
|
||||
li {
|
||||
flex: 1 0 50%;
|
||||
display: block;
|
||||
font-weight: 300;
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
|
||||
i {
|
||||
height: 26px;
|
||||
padding-right: 10px;
|
||||
vertical-align: middle;
|
||||
color: $okColor;
|
||||
}
|
||||
}
|
||||
|
||||
li.invalid {
|
||||
i {
|
||||
color: $nokColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#copy-secret {
|
||||
|
@ -30,6 +30,8 @@ $inputBackgroundColor: #252525;
|
||||
$buttonBackgroundColorHover: $inputBackgroundColor;
|
||||
$profileImgDark: "/resources/images/icon-user-dark";
|
||||
$otherUserImgDark: "/resources/images/icon-newuser-dark";
|
||||
$nokColor: #F20D6B;
|
||||
$okColor: #0DF279;
|
||||
|
||||
|
||||
// ----- LIGHT-THEME --------
|
||||
|
@ -145,6 +145,7 @@ button {
|
||||
}
|
||||
button:hover {
|
||||
background-color: #5b8fd3;
|
||||
color: #282828;
|
||||
border: 2px solid #5b8fd3;
|
||||
}
|
||||
button.primary {
|
||||
@ -155,6 +156,14 @@ button.primary {
|
||||
button.primary:hover {
|
||||
background-color: #5b8fd3;
|
||||
}
|
||||
button:disabled {
|
||||
background-color: #505050;
|
||||
border: 2px solid #505050;
|
||||
}
|
||||
button:disabled:hover {
|
||||
background-color: #505050;
|
||||
border: 2px solid #505050;
|
||||
}
|
||||
|
||||
input:not([type=radio]), select {
|
||||
background-color: #252525;
|
||||
@ -301,6 +310,28 @@ form button.other-user > div:nth-of-type(2) {
|
||||
margin: 15px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
form ul#passwordcomplexity {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
form ul#passwordcomplexity li {
|
||||
flex: 1 0 50%;
|
||||
display: block;
|
||||
font-weight: 300;
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
}
|
||||
form ul#passwordcomplexity li i {
|
||||
height: 26px;
|
||||
padding-right: 10px;
|
||||
vertical-align: middle;
|
||||
color: #0DF279;
|
||||
}
|
||||
form ul#passwordcomplexity li.invalid i {
|
||||
color: #F20D6B;
|
||||
}
|
||||
|
||||
#copy-secret {
|
||||
visibility: hidden;
|
||||
|
@ -1 +1 @@
|
||||
{"version":3,"sourceRoot":"","sources":["../../scss/fonts.scss","../../scss/main.scss","../../scss/variables.scss"],"names":[],"mappings":"AACA;EACI;EACA;;AAIJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;AAA6D;EAC7D;;AC5EJ;EACI;EACA,aCHW;EDIX;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA,kBCKc;EDJd,OCKQ;EDJR;EACA;EACA;EAEI;;;AAIR;EACI,OCLQ;EDMR,aC3BS;ED4BT;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;AAEA;EACI;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;EACA;;;AAGJ;EACI,OClCW;EDmCX;EACA;;AAEA;EACI,OCtCY;;;AD0CpB;EACI,kBC9Cc;ED+Cd,OC7CW;ED8CX;EACA;EACA;EACA;EACA,QCrEU;EDsEV;EACA;EACA;;AACA;EACI,kBCtDY;EDuDZ;;AAGJ;EACI,kBC5DO;ED6DP,OC9DI;ED+DJ;;AACA;EACI,kBC/DQ;;;ADoEpB;EACI,kBClEmB;EDmEnB,OCxEQ;EDyER,QC3FU;ED4FV;EACA;EACA;;;AAIA;EACI;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAIR;EACI,OCnGK;EDoGL;EACA;EACA;;AAEA;EACI;EACA;;AAIR;EACI;;AAEA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA,OChII;EDiIJ;EACA;EACA;EACA;;AAEA;EACI;EACA,kBCnIW;;ADsIf;EACI;;AAIR;EACI;;AAIA;EACI;EACA;EChKV;;AACA;ED6JM;IC5JJ;IACA;;;ADkKQ;ECrKV;;AACA;EDoKU;ICnKR;IACA;;;ADuKI;EACI;EACA;EACA;EACA;EACA,cClKO;EDmKP;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAKR;EACI;;AAEA;EACI;;AAEA;EACI;;AAEJ;EACI,OC9LP;;ADqML;EACI;;AAEJ;EACI;EACA;EACA;EACA;ECxNV;;AACA;EDmNM;IClNJ;IACA;;;AD0NQ;EACI;EACA;EC/Nd;;AACA;ED4NU;IC3NR;IACA;;;ADiOI;EACI;EACA;;;AAKZ;EACI;EACA;;;AAGJ;EACI;;AAEA;EACI,MC3OI;;AD8OR;EACI,MChPU;;;ADqPd;EACI;EACA;;;AAIR;EAII;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;AAAkB;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;AACA;EACA;AAEA;EACA;AAEA;EACA","file":"dark.css"}
|
||||
{"version":3,"sourceRoot":"","sources":["../../scss/fonts.scss","../../scss/main.scss","../../scss/variables.scss"],"names":[],"mappings":"AACA;EACI;EACA;;AAIJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEJ;EACI;EACA;EACA;EACA;;AAIJ;EACI;EACA;EACA;EACA;AAA6D;EAC7D;;AC5EJ;EACI;EACA,aCHW;EDIX;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA,kBCKc;EDJd,OCKQ;EDJR;EACA;EACA;EAEI;;;AAIR;EACI,OCLQ;EDMR,aC3BS;ED4BT;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;AAEA;EACI;EACA;EACA;EACA;EACA;;;AAIR;EACI;EACA;EACA;EACA;;;AAGJ;EACI,OClCW;EDmCX;EACA;;AAEA;EACI,OCtCY;;;AD0CpB;EACI,kBC9Cc;ED+Cd,OC7CW;ED8CX;EACA;EACA;EACA;EACA,QCrEU;EDsEV;EACA;EACA;;AACA;EACI,kBCtDY;EDuDZ,OC1DU;ED2DV;;AAGJ;EACI,kBC7DO;ED8DP,OC/DI;EDgEJ;;AACA;EACI,kBChEQ;;ADoEhB;EACI,kBCnEW;EDoEX;;AAEA;EACI,kBCvEO;EDwEP;;;AAKZ;EACI,kBC7EmB;ED8EnB,OCnFQ;EDoFR,QCtGU;EDuGV;EACA;EACA;;;AAIA;EACI;EACA;;AAGJ;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAIR;EACI,OC9GK;ED+GL;EACA;EACA;;AAEA;EACI;EACA;;AAIR;EACI;;AAEA;EACI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA,OC3II;ED4IJ;EACA;EACA;EACA;;AAEA;EACI;EACA,kBC9IW;;ADiJf;EACI;;AAIR;EACI;;AAIA;EACI;EACA;EC3KV;;AACA;EDwKM;ICvKJ;IACA;;;AD6KQ;EChLV;;AACA;ED+KU;IC9KR;IACA;;;ADkLI;EACI;EACA;EACA;EACA;EACA,cC7KO;ED8KP;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAKR;EACI;;AAEA;EACI;;AAEA;EACI;;AAEJ;EACI,OCzMP;;ADgNL;EACI;;AAEJ;EACI;EACA;EACA;EACA;ECnOV;;AACA;ED8NM;IC7NJ;IACA;;;ADqOQ;EACI;EACA;EC1Od;;AACA;EDuOU;ICtOR;IACA;;;AD4OI;EACI;EACA;;AAIR;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA,OCnPN;;ADwPE;EACI,OC1PL;;;ADgQX;EACI;EACA;;;AAGJ;EACI;;AAEA;EACI,MClRI;;ADqRR;EACI,MCvRU;;;AD4Rd;EACI;EACA;;;AAIR;EAII;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;AAAkB;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;AACA;EACA;AAEA;EACA;AAEA;EACA","file":"dark.css"}
|
@ -145,6 +145,7 @@ button {
|
||||
}
|
||||
button:hover {
|
||||
background-color: #5b8fd3;
|
||||
color: #282828;
|
||||
border: 2px solid #5b8fd3;
|
||||
}
|
||||
button.primary {
|
||||
@ -155,6 +156,14 @@ button.primary {
|
||||
button.primary:hover {
|
||||
background-color: #5b8fd3;
|
||||
}
|
||||
button:disabled {
|
||||
background-color: #505050;
|
||||
border: 2px solid #505050;
|
||||
}
|
||||
button:disabled:hover {
|
||||
background-color: #505050;
|
||||
border: 2px solid #505050;
|
||||
}
|
||||
|
||||
input:not([type=radio]), select {
|
||||
background-color: #252525;
|
||||
@ -301,6 +310,28 @@ form button.other-user > div:nth-of-type(2) {
|
||||
margin: 15px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
form ul#passwordcomplexity {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
form ul#passwordcomplexity li {
|
||||
flex: 1 0 50%;
|
||||
display: block;
|
||||
font-weight: 300;
|
||||
font-size: 12px;
|
||||
line-height: 12px;
|
||||
}
|
||||
form ul#passwordcomplexity li i {
|
||||
height: 26px;
|
||||
padding-right: 10px;
|
||||
vertical-align: middle;
|
||||
color: #0DF279;
|
||||
}
|
||||
form ul#passwordcomplexity li.invalid i {
|
||||
color: #F20D6B;
|
||||
}
|
||||
|
||||
#copy-secret {
|
||||
visibility: hidden;
|
||||
|
@ -1 +1 @@
|
||||
{"version":3,"sourceRoot":"","sources":["../../scss/fonts.scss","../../scss/main.scss","../../scss/variables.scss","../../scss/light.scss"],"names":[],"mappings":"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","file":"light.css"}
|
||||
{"version":3,"sourceRoot":"","sources":["../../scss/fonts.scss","../../scss/main.scss","../../scss/variables.scss","../../scss/light.scss"],"names":[],"mappings":"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","file":"light.css"}
|
@ -1,6 +1,5 @@
|
||||
{{template "main-top" .}}
|
||||
|
||||
|
||||
<h1>{{t "PasswordChange.Title"}}</h1>
|
||||
<p>{{t "PasswordChange.Description"}}</p>
|
||||
|
||||
@ -12,23 +11,43 @@
|
||||
|
||||
<div class="fields">
|
||||
<div class="field">
|
||||
<label class="label" for="old_password">{{t "PasswordChange.OldPassword"}}</label>
|
||||
<input class="input" type="password" id="old_password" name="old_password" autocomplete="current-password" autofocus required>
|
||||
<label class="label" for="change-old-password">{{t "PasswordChange.OldPassword"}}</label>
|
||||
<input class="input" type="password" id="change-old-password" name="change-old-password" autocomplete="current-password" autofocus required>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label class="label" for="new_password">{{t "PasswordChange.NewPassword"}}</label>
|
||||
<input class="input" type="password" id="new-password" name="new_password" autocomplete="new-password" required>
|
||||
<label class="label" for="change-new-password">{{t "PasswordChange.NewPassword"}}</label>
|
||||
<input data-minlength="{{ .MinLength }}"
|
||||
data-has-uppercase="{{ .HasUppercase }}"
|
||||
data-has-lowercase="{{ .HasLowercase }}"
|
||||
data-has-number="{{ .HasNumber }}"
|
||||
data-has-symbol="{{ .HasSymbol }}"
|
||||
class="input"
|
||||
type="password"
|
||||
id="change-new-password"
|
||||
name="change-new-password"
|
||||
autocomplete="new-password"
|
||||
required>
|
||||
{{ .PasswordPolicyDescription }}
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<label class="label" for="change-password-confirmation">{{t "PasswordChange.NewPasswordConfirmation"}}</label>
|
||||
<input class="input" type="password" id="change-password-confirmation" name="change-password-confirmation" autocomplete="new-password" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ template "error-message" .}}
|
||||
|
||||
<div class="actions">
|
||||
<button type="submit" name="resend" value="false" class="primary right" >{{t "Actions.Next"}}</buttontype="submit">
|
||||
<button type="submit" id="change-password-button" name="resend" value="false" class="primary right" disabled>{{t "Actions.Next"}}</buttontype="submit">
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script src="{{ resourceUrl "scripts/form_submit.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/password_policy_check.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/change_password_check.js" }}"></script>
|
||||
|
||||
|
||||
{{template "main-bottom" .}}
|
||||
|
@ -18,22 +18,42 @@
|
||||
</div>
|
||||
<div class="field">
|
||||
<label class="label" for="password">{{t "InitPassword.NewPassword"}}</label>
|
||||
<input class="input" type="password" id="password" name="password" autocomplete="new-password" autofocus required>
|
||||
<input data-minlength="{{ .MinLength }}"
|
||||
data-has-uppercase="{{ .HasUppercase }}"
|
||||
data-has-lowercase="{{ .HasLowercase }}"
|
||||
data-has-number="{{ .HasNumber }}"
|
||||
data-has-symbol="{{ .HasSymbol }}"
|
||||
class="input"
|
||||
type="password"
|
||||
id="password"
|
||||
name="password"
|
||||
autocomplete="new-password"
|
||||
autofocus required>
|
||||
{{ .PasswordPolicyDescription }}
|
||||
</div>
|
||||
<div class="field">
|
||||
<label class="label" for="passwordconfirm">{{t "InitPassword.NewPasswordConfirm"}}</label>
|
||||
<input class="input" type="password" id="passwordconfirm" name="passwordconfirm" autocomplete="new-password" autofocus required>
|
||||
<input class="input"
|
||||
type="password"
|
||||
id="passwordconfirm"
|
||||
name="passwordconfirm"
|
||||
autocomplete="new-password"
|
||||
autofocus required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{ template "error-message" .}}
|
||||
|
||||
<div class="actions">
|
||||
<button type="submit" name="resend" value="false" class="primary right" >{{t "Actions.Next"}}</button>
|
||||
<button type="submit" id="init-button" name="resend" value="false" class="primary right" >{{t "Actions.Next"}}</button>
|
||||
<button type="submit" name="resend" value="true" class="secondary right" formnovalidate>{{t "Actions.Resend" }}</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script src="{{ resourceUrl "scripts/form_submit.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/password_policy_check.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/init_password_check.js" }}"></script>
|
||||
|
||||
|
||||
{{template "main-bottom" .}}
|
||||
|
@ -20,7 +20,18 @@
|
||||
{{ if not .PasswordSet }}
|
||||
<div class="field">
|
||||
<label class="label" for="password">{{t "InitUser.NewPassword"}}</label>
|
||||
<input class="input" type="password" id="password" name="password" autocomplete="new-password" autofocus required>
|
||||
<input data-minlength="{{ .MinLength }}"
|
||||
data-has-uppercase="{{ .HasUppercase }}"
|
||||
data-has-lowercase="{{ .HasLowercase }}"
|
||||
data-has-number="{{ .HasNumber }}"
|
||||
data-has-symbol="{{ .HasSymbol }}"
|
||||
class="input"
|
||||
type="password"
|
||||
id="password"
|
||||
name="password"
|
||||
autocomplete="new-password"
|
||||
autofocus required>
|
||||
{{ .PasswordPolicyDescription }}
|
||||
</div>
|
||||
<div class="field">
|
||||
<label class="label" for="passwordconfirm">{{t "InitUser.NewPasswordConfirm"}}</label>
|
||||
@ -32,11 +43,21 @@
|
||||
{{ template "error-message" .}}
|
||||
|
||||
<div class="actions">
|
||||
<button type="submit" name="resend" value="false" class="primary right" >{{t "Actions.Next"}}</button>
|
||||
<button type="submit"
|
||||
id="init-button"
|
||||
name="resend"
|
||||
value="false"
|
||||
class="primary right"
|
||||
{{ if not .PasswordSet }} disabled {{ end }}>{{t "Actions.Next"}}</button>
|
||||
<button type="submit" name="resend" value="true" class="secondary right" formnovalidate>{{t "Actions.Resend" }}</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{{ if not .PasswordSet }}
|
||||
<script src="{{ resourceUrl "scripts/form_submit.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/password_policy_check.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/init_password_check.js" }}"></script>
|
||||
{{ end }}
|
||||
|
||||
{{template "main-bottom" .}}
|
||||
|
@ -20,11 +20,14 @@
|
||||
{{template "error-message" .}}
|
||||
|
||||
<div class="actions">
|
||||
<button class="primary right" type="submit">{{t "Actions.Next"}}</button>
|
||||
<button class="primary right" id="submit-button" type="submit" disabled>{{t "Actions.Next"}}</button>
|
||||
<button class="secondary right" name="register" value="true" formnovalidate>{{t "Actions.Register"}}</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
<script src="{{ resourceUrl "scripts/form_submit.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/default_form_validation.js" }}"></script>
|
||||
|
||||
{{template "main-bottom" .}}
|
||||
|
@ -21,13 +21,14 @@
|
||||
{{ template "error-message" .}}
|
||||
|
||||
<div class="actions">
|
||||
<button type="submit" name="resend" value="false" class="primary right" >{{t "Actions.Next"}}</button>
|
||||
<button type="submit" id="submit-button" name="resend" value="false" class="primary right" disabled>{{t "Actions.Next"}}</button>
|
||||
{{ if .UserID }}
|
||||
<button type="submit" name="resend" value="true" class="secondary right" formnovalidate>{{t "Actions.Resend"}}</button>
|
||||
{{ end }}
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script src="{{ resourceUrl "scripts/form_submit.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/default_form_validation.js" }}"></script>
|
||||
|
||||
{{template "main-bottom" .}}
|
||||
|
@ -34,11 +34,13 @@
|
||||
{{end}}
|
||||
|
||||
<div class="actions">
|
||||
<button class="primary right" type="submit">{{t "Actions.Next"}}</button>
|
||||
<button class="primary right" id="submit-button" type="submit" disabled>{{t "Actions.Next"}}</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script src="{{ resourceUrl "scripts/copy_to_clipboard.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/form_submit.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/default_form_validation.js" }}"></script>
|
||||
|
||||
{{template "main-bottom" .}}
|
||||
|
@ -21,10 +21,11 @@
|
||||
{{ template "error-message" .}}
|
||||
|
||||
<div class="actions">
|
||||
<button class="primary right" type="submit">{{t "Actions.Next"}}</button>
|
||||
<button class="primary right" id="submit-button" type="submit" disabled>{{t "Actions.Next"}}</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
<script src="{{ resourceUrl "scripts/form_submit.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/default_form_validation.js" }}"></script>
|
||||
{{template "main-bottom" .}}
|
||||
|
@ -20,7 +20,7 @@
|
||||
{{template "error-message" .}}
|
||||
|
||||
<div class="actions">
|
||||
<button class="primary right" type="submit">{{t "Actions.Next"}}</button>
|
||||
<button id="submit-button" class="primary right" type="submit" disabled>{{t "Actions.Next"}}</button>
|
||||
<a href="{{ loginNameChangeUrl .AuthReqID }}">
|
||||
<button class="secondary" type="button">{{t "Actions.Back"}}</button>
|
||||
</a>
|
||||
@ -30,6 +30,7 @@
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
<script src="{{ resourceUrl "scripts/form_submit.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/default_form_validation.js" }}"></script>
|
||||
{{template "main-bottom" .}}
|
||||
|
@ -43,21 +43,31 @@
|
||||
</select>
|
||||
</div>
|
||||
<div class="field">
|
||||
<label class="label" for="password">{{t "Registration.Password"}}</label>
|
||||
<input class="input" type="password" id="password" name="password" autocomplete="new-password" required>
|
||||
<label class="label" for="register-password">{{t "Registration.Password"}}</label>
|
||||
<input data-minlength="{{ .MinLength }}"
|
||||
data-has-uppercase="{{ .HasUppercase }}"
|
||||
data-has-lowercase="{{ .HasLowercase }}"
|
||||
data-has-number="{{ .HasNumber }}"
|
||||
data-has-symbol="{{ .HasSymbol }}"
|
||||
class="input" type="password" id="register-password" name="register-password" autocomplete="new-password" required>
|
||||
{{ .PasswordPolicyDescription }}
|
||||
</div>
|
||||
<div class="field">
|
||||
<label class="label" for="password2">{{t "Registration.Password2"}}</label>
|
||||
<input class="input" type="password" id="password2" name="password2" autocomplete="new-password" required>
|
||||
<label class="label" for="register-password-confirmation">{{t "Registration.Password2"}}</label>
|
||||
<input class="input" type="password" id="register-password-confirmation" name="register-password-confirmation" autocomplete="new-password" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{template "error-message" .}}
|
||||
|
||||
<div class="actions">
|
||||
<button class="primary right" type="submit">{{t "Actions.Next"}}</button>
|
||||
<button class="primary right" id="register-button" type="submit" disabled>{{t "Actions.Next"}}</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
|
||||
<script src="{{ resourceUrl "scripts/form_submit.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/password_policy_check.js" }}"></script>
|
||||
<script src="{{ resourceUrl "scripts/register_check.js" }}"></script>
|
||||
|
||||
{{template "main-bottom" .}}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1702,7 +1702,7 @@ message PasswordComplexityPolicy {
|
||||
|
||||
message PasswordComplexityPolicyCreate {
|
||||
string description = 1 [(validate.rules).string = {max_len: 500}];
|
||||
uint64 min_length = 2;
|
||||
uint64 min_length = 2 [(validate.rules).uint64.gt = 0];
|
||||
bool has_lowercase = 3;
|
||||
bool has_uppercase = 4;
|
||||
bool has_number = 5;
|
||||
|
Loading…
Reference in New Issue
Block a user