From 7d2d7e41d940042a5c8fe66d05fdc89b2e3e6473 Mon Sep 17 00:00:00 2001 From: stianst Date: Tue, 19 Dec 2017 19:37:14 +0100 Subject: [PATCH] KEYCLOAK-6065 Prevent password managers from saving credentials in admin console --- .../SAMLClientCredentialsForm.java | 2 +- .../page/federation/LdapUserProviderForm.java | 2 +- .../console/page/users/UserCredentials.java | 4 +- .../rh-sso/admin/resources/css/styles.css | 5 + .../theme/rh-sso/admin/theme.properties | 2 +- .../theme/base/admin/resources/js/app.js | 11 + .../partials/authenticator-config.html | 3 - .../client-credentials-jwt-key-export.html | 11 +- .../client-credentials-jwt-key-import.html | 7 +- .../admin/resources/partials/client-keys.html | 19 +- .../partials/client-saml-key-export.html | 11 +- .../partials/client-saml-key-import.html | 7 +- .../realm-identity-provider-bitbucket.html | 5 +- .../realm-identity-provider-gitlab.html | 5 +- .../realm-identity-provider-oidc.html | 5 +- .../realm-identity-provider-openshift-v3.html | 7 +- .../realm-identity-provider-social.html | 5 +- .../admin/resources/partials/realm-smtp.html | 7 +- .../resources/partials/user-credentials.html | 11 +- .../resources/partials/user-storage-ldap.html | 7 +- .../keycloak/admin/resources/css/styles.css | 5 + .../theme/keycloak/admin/theme.properties | 2 +- .../node_modules/text-security/.npmignore | 4 + .../node_modules/text-security/LICENSE | 21 + .../node_modules/text-security/README.md | 52 + .../text-security/assets/circle.svg | 16 + .../text-security/assets/disc.svg | 5 + .../text-security/assets/square.svg | 5 + .../dist/text-security-circle.eot | Bin 0 -> 12608 bytes .../dist/text-security-circle.svg | 2316 +++++++++++++++++ .../dist/text-security-circle.ttf | Bin 0 -> 12392 bytes .../dist/text-security-circle.woff | Bin 0 -> 2984 bytes .../text-security/dist/text-security-disc.eot | Bin 0 -> 12544 bytes .../text-security/dist/text-security-disc.svg | 2316 +++++++++++++++++ .../text-security/dist/text-security-disc.ttf | Bin 0 -> 12336 bytes .../dist/text-security-disc.woff | Bin 0 -> 2948 bytes .../dist/text-security-square.eot | Bin 0 -> 12560 bytes .../dist/text-security-square.svg | 2316 +++++++++++++++++ .../dist/text-security-square.ttf | Bin 0 -> 12344 bytes .../dist/text-security-square.woff | Bin 0 -> 2936 bytes .../text-security/dist/text-security.css | 24 + .../node_modules/text-security/index.js | 89 + .../node_modules/text-security/package.json | 60 + .../text-security/style-template.css | 8 + .../keycloak/common/resources/package.json | 35 +- 45 files changed, 7310 insertions(+), 100 deletions(-) create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/.npmignore create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/LICENSE create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/README.md create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/assets/circle.svg create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/assets/disc.svg create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/assets/square.svg create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-circle.eot create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-circle.svg create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-circle.ttf create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-circle.woff create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-disc.eot create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-disc.svg create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-disc.ttf create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-disc.woff create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-square.eot create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-square.svg create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-square.ttf create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-square.woff create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security.css create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/index.js create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/package.json create mode 100644 themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/style-template.css diff --git a/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/clients/credentials/SAMLClientCredentialsForm.java b/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/clients/credentials/SAMLClientCredentialsForm.java index 95dd490c9e..1790834707 100644 --- a/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/clients/credentials/SAMLClientCredentialsForm.java +++ b/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/clients/credentials/SAMLClientCredentialsForm.java @@ -40,7 +40,7 @@ public class SAMLClientCredentialsForm extends Form { @FindBy(id = "uploadKeyAlias") private WebElement uploadKeyAlias; - @FindBy(id = "uploadStorePassword") + @FindBy(id = "uploadStorePas") private WebElement uploadStorePassword; public void importPemCertificateKey() { diff --git a/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/federation/LdapUserProviderForm.java b/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/federation/LdapUserProviderForm.java index 017468625d..65510eb24f 100644 --- a/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/federation/LdapUserProviderForm.java +++ b/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/federation/LdapUserProviderForm.java @@ -48,7 +48,7 @@ public class LdapUserProviderForm extends Form { @FindBy(id = "ldapBindDn") private WebElement ldapBindDnInput; - @FindBy(id = "ldapBindCredential") + @FindBy(id = "ldapBindCred") private WebElement ldapBindCredentialInput; @FindBy(id = "customUserSearchFilter") diff --git a/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/users/UserCredentials.java b/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/users/UserCredentials.java index ff091a45ef..886cbb4494 100644 --- a/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/users/UserCredentials.java +++ b/testsuite/integration-arquillian/tests/other/console/src/main/java/org/keycloak/testsuite/console/page/users/UserCredentials.java @@ -18,10 +18,10 @@ public class UserCredentials extends User { return super.getUriFragment() + "/user-credentials"; } - @FindBy(id = "password") + @FindBy(id = "newPas") private WebElement newPasswordInput; - @FindBy(id = "confirmPassword") + @FindBy(id = "confirmPas") private WebElement confirmPasswordInput; @FindBy(xpath = ".//div[@class='onoffswitch' and ./input[@id='temporaryPassword']]") diff --git a/themes/src/main/resources-product/theme/rh-sso/admin/resources/css/styles.css b/themes/src/main/resources-product/theme/rh-sso/admin/resources/css/styles.css index a1960ed2b9..b59b231fe2 100644 --- a/themes/src/main/resources-product/theme/rh-sso/admin/resources/css/styles.css +++ b/themes/src/main/resources-product/theme/rh-sso/admin/resources/css/styles.css @@ -409,3 +409,8 @@ table.kc-authz-table-expanded { padding-right:0!important; padding-left:0!important; } + +.password-conceal { + font-family: 'text-security-disc'; + font-size: 14px; +} diff --git a/themes/src/main/resources-product/theme/rh-sso/admin/theme.properties b/themes/src/main/resources-product/theme/rh-sso/admin/theme.properties index 5b489c1780..7efe91f5f5 100755 --- a/themes/src/main/resources-product/theme/rh-sso/admin/theme.properties +++ b/themes/src/main/resources-product/theme/rh-sso/admin/theme.properties @@ -1,3 +1,3 @@ parent=keycloak import=common/rh-sso -styles=lib/rcue/css/rcue.min.css lib/rcue/css/rcue-additions.min.css node_modules/select2/select2.css css/styles.css lib/angular/treeview/css/angular.treeview.css +styles=lib/rcue/css/rcue.min.css lib/rcue/css/rcue-additions.min.css node_modules/select2/select2.css css/styles.css lib/angular/treeview/css/angular.treeview.css node_modules/text-security/dist/text-security.css diff --git a/themes/src/main/resources/theme/base/admin/resources/js/app.js b/themes/src/main/resources/theme/base/admin/resources/js/app.js index 540f236b68..0e25ae9cdc 100755 --- a/themes/src/main/resources/theme/base/admin/resources/js/app.js +++ b/themes/src/main/resources/theme/base/admin/resources/js/app.js @@ -2955,4 +2955,15 @@ module.filter('startFrom', function () { } return []; }; +}); + + +module.directive('kcPassword', function ($compile, Notifications) { + return { + restrict: 'A', + link: function ($scope, elem, attr, ctrl) { + elem.addClass("password-conceal"); + elem.attr("type","text"); + } + } }); \ No newline at end of file diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/authenticator-config.html b/themes/src/main/resources/theme/base/admin/resources/partials/authenticator-config.html index 9ce157f152..8542060564 100755 --- a/themes/src/main/resources/theme/base/admin/resources/partials/authenticator-config.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/authenticator-config.html @@ -16,9 +16,6 @@
- - -
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-credentials-jwt-key-export.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-credentials-jwt-key-export.html index 82e50b78f3..a1da8c1426 100644 --- a/themes/src/main/resources/theme/base/admin/resources/partials/client-credentials-jwt-key-export.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-credentials-jwt-key-export.html @@ -10,9 +10,6 @@

{{:: 'generate-private-key' | translate}}

- - -
@@ -34,16 +31,16 @@ {{:: 'key-alias.tooltip' | translate}}
- +
- +
{{:: 'key-password.tooltip' | translate}}
- +
- +
{{:: 'store-password.tooltip' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-credentials-jwt-key-import.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-credentials-jwt-key-import.html index ec88cd6f65..6ea01180f1 100644 --- a/themes/src/main/resources/theme/base/admin/resources/partials/client-credentials-jwt-key-import.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-credentials-jwt-key-import.html @@ -10,9 +10,6 @@

{{:: 'import-client-certificate' | translate}}

- - -
@@ -34,9 +31,9 @@ {{:: 'jwt-import.key-alias.tooltip' | translate}}
- +
- +
{{:: 'store-password.tooltip' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-keys.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-keys.html index c74f54f4fd..c412e27269 100755 --- a/themes/src/main/resources/theme/base/admin/resources/partials/client-keys.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-keys.html @@ -8,9 +8,6 @@ - - -
{{:: 'import-keys-and-cert' | translate}} {{:: 'import-keys-and-cert.tooltip' | translate}}
@@ -33,16 +30,16 @@ {{:: 'key-alias.tooltip' | translate}}
- +
- +
{{:: 'key-password.tooltip' | translate}}
- +
- +
{{:: 'store-password.tooltip' | translate}}
@@ -85,9 +82,9 @@ Archive alias for your private key and certificate.
- +
- +
Password to access the private key in the archive
@@ -99,9 +96,9 @@ Realm certificate is stored in archive too. This is the alias to it.
- +
- +
Password to access the archive itself
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-saml-key-export.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-saml-key-export.html index ec51e9674f..1c8f737326 100755 --- a/themes/src/main/resources/theme/base/admin/resources/partials/client-saml-key-export.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-saml-key-export.html @@ -10,9 +10,6 @@

{{:: 'export-saml-key' | translate}} {{client.clientId|capitalize}}

- - -
@@ -34,9 +31,9 @@ {{:: 'key-alias.tooltip' | translate}}
- +
- +
{{:: 'key-password.tooltip' | translate}}
@@ -48,9 +45,9 @@ {{:: 'realm-certificate-alias.tooltip' | translate}}
- +
- +
{{:: 'store-password.tooltip' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/client-saml-key-import.html b/themes/src/main/resources/theme/base/admin/resources/partials/client-saml-key-import.html index a580a61b18..5b14c24f60 100755 --- a/themes/src/main/resources/theme/base/admin/resources/partials/client-saml-key-import.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/client-saml-key-import.html @@ -10,9 +10,6 @@

{{:: 'import-saml-key' | translate}} {{client.clientId|capitalize}}

- - -
@@ -34,9 +31,9 @@ {{:: 'key-alias.tooltip' | translate}}
- +
- +
{{:: 'store-password.tooltip' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-bitbucket.html b/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-bitbucket.html index 90d5c1fbd4..9667b34518 100755 --- a/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-bitbucket.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-bitbucket.html @@ -8,9 +8,6 @@ - - -
@@ -31,7 +28,7 @@
- +
{{:: 'bitbucket.secret.tooltip' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-gitlab.html b/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-gitlab.html index 152d1f1f40..9a30c52188 100755 --- a/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-gitlab.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-gitlab.html @@ -8,9 +8,6 @@ - - -
@@ -31,7 +28,7 @@
- +
{{:: 'gitlab.application-secret.tooltip' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-oidc.html b/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-oidc.html index ee815a3b3c..54bbcd64a8 100755 --- a/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-oidc.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-oidc.html @@ -9,9 +9,6 @@ - - -
@@ -172,7 +169,7 @@
- +
{{:: 'client-secret.tooltip' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-openshift-v3.html b/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-openshift-v3.html index 054b98ac43..3323e1d85c 100755 --- a/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-openshift-v3.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-openshift-v3.html @@ -8,11 +8,6 @@ - - - - -
@@ -47,7 +42,7 @@
- +
{{:: 'social.client-secret.tooltip' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-social.html b/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-social.html index 1976fde114..191002f4da 100755 --- a/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-social.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/realm-identity-provider-social.html @@ -8,9 +8,6 @@ - - -
@@ -31,7 +28,7 @@
- +
{{:: 'social.client-secret.tooltip' | translate}}
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/realm-smtp.html b/themes/src/main/resources/theme/base/admin/resources/partials/realm-smtp.html index 43df76147c..d1a0d98acd 100755 --- a/themes/src/main/resources/theme/base/admin/resources/partials/realm-smtp.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/realm-smtp.html @@ -2,9 +2,6 @@ - - -
@@ -79,9 +76,9 @@
- +
- +
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/user-credentials.html b/themes/src/main/resources/theme/base/admin/resources/partials/user-credentials.html index 5c2760531a..c35a767fd0 100755 --- a/themes/src/main/resources/theme/base/admin/resources/partials/user-credentials.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/user-credentials.html @@ -7,22 +7,19 @@ - - -
{{:: 'manage-user-password' | translate}}
- +
- +
- +
- +
diff --git a/themes/src/main/resources/theme/base/admin/resources/partials/user-storage-ldap.html b/themes/src/main/resources/theme/base/admin/resources/partials/user-storage-ldap.html index 0a391b9274..abf9045726 100755 --- a/themes/src/main/resources/theme/base/admin/resources/partials/user-storage-ldap.html +++ b/themes/src/main/resources/theme/base/admin/resources/partials/user-storage-ldap.html @@ -8,9 +8,6 @@ - - -
{{:: 'required-settings' | translate}}
@@ -151,9 +148,9 @@ {{:: 'ldap.bind-dn.tooltip' | translate}}
- +
- +
{{:: 'ldap.bind-credential.tooltip' | translate}}
diff --git a/themes/src/main/resources/theme/keycloak/admin/resources/css/styles.css b/themes/src/main/resources/theme/keycloak/admin/resources/css/styles.css index 6f72a78cb3..8b0a4d36ac 100755 --- a/themes/src/main/resources/theme/keycloak/admin/resources/css/styles.css +++ b/themes/src/main/resources/theme/keycloak/admin/resources/css/styles.css @@ -399,4 +399,9 @@ table.kc-authz-table-expanded { .no-gutter > [class*='col-'] { padding-right:0!important; padding-left:0!important; +} + +.password-conceal { + font-family: 'text-security-disc'; + font-size: 14px; } \ No newline at end of file diff --git a/themes/src/main/resources/theme/keycloak/admin/theme.properties b/themes/src/main/resources/theme/keycloak/admin/theme.properties index 8519d8907c..83e4e92d6c 100755 --- a/themes/src/main/resources/theme/keycloak/admin/theme.properties +++ b/themes/src/main/resources/theme/keycloak/admin/theme.properties @@ -1,3 +1,3 @@ parent=base import=common/keycloak -styles=lib/patternfly/css/patternfly.css node_modules/select2/select2.css css/styles.css lib/angular/treeview/css/angular.treeview.css \ No newline at end of file +styles=lib/patternfly/css/patternfly.css node_modules/select2/select2.css css/styles.css lib/angular/treeview/css/angular.treeview.css node_modules/text-security/dist/text-security.css \ No newline at end of file diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/.npmignore b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/.npmignore new file mode 100644 index 0000000000..2a11bc9b24 --- /dev/null +++ b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/.npmignore @@ -0,0 +1,4 @@ +demo.html +.eslintrc* +.vscode/ +.idea/ diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/LICENSE b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/LICENSE new file mode 100644 index 0000000000..a664c94276 --- /dev/null +++ b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Oskari Noppa + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/README.md b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/README.md new file mode 100644 index 0000000000..3f421f24e8 --- /dev/null +++ b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/README.md @@ -0,0 +1,52 @@ +# text-security +Cross-browser alternative to `-webkit-text-security` + +This is a simple set of fonts that only consists of 3 different characters. +Disc circle and square . For example, setting `font-family: "text-security-circle"` for +an element should then display all the element's characters in a concealed +way, like it was a password field. + +This is useful if you want to get the benefits of `input[type="password"]` +but also combine that with other element types, like `input[type="tel"]`. In +fact, the project was created for this exact purpose [as an answer to a +StackOverflow +question](https://stackoverflow.com/questions/36935576/how-to-make-input-type-tel-work-as-type-password/36950075#36950075). + +## Installation +``` +npm install text-security +``` + +You can use the fonts by adding this repo as a dependency and including +`dist/text-security.css` in your project, like so + +`` + +## Building with custom modifications +If you want to make your own tweaks, the `npm run build` command has two +optional arguments for you. By default, 768 different unicode characters are +included in the fonts, making it reliable for different use-cases but also +adding quite a big font files as a dependency. You can use the +`--max={number}` option to reduce the amount of included unicode characters. + +If you are feeling wild, you can also add your custom shapes by dropping them +to *assets* folder and running the build with `--shapes={string}` option. The +value should be comma-separated list of svg file names (don't include the +file extension in the name). The default value is `circle,square,disc`. +The generated css will have class names with `text-security-*` prefix +followed by the name of the shape, like `text-security-disc`. + +## Demo +*demo.html* contains a proof-of-concept demo file, which you can just open in +any browser. The same thing can also be found [as a +fiddle](https://jsfiddle.net/449Lamue/6/). In development, you can also try +out the library by just including the css using RawGit `` \ No newline at end of file diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/assets/circle.svg b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/assets/circle.svg new file mode 100644 index 0000000000..32095841b7 --- /dev/null +++ b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/assets/circle.svg @@ -0,0 +1,16 @@ + + + + \ No newline at end of file diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/assets/disc.svg b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/assets/disc.svg new file mode 100644 index 0000000000..dbee77f1ff --- /dev/null +++ b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/assets/disc.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/assets/square.svg b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/assets/square.svg new file mode 100644 index 0000000000..60dc8eb3e6 --- /dev/null +++ b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/assets/square.svg @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-circle.eot b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-circle.eot new file mode 100644 index 0000000000000000000000000000000000000000..6581a4471737cab482039228ec2c2a86e2cea9e9 GIT binary patch literal 12608 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 literal 0 HcmV?d00001 diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-circle.svg b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-circle.svg new file mode 100644 index 0000000000..4bd8ce8f87 --- /dev/null +++ b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-circle.svg @@ -0,0 +1,2316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-circle.ttf b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-circle.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0f62fc38052e8cbff4b475218beb36bcc0c61bda GIT binary patch literal 12392 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 literal 0 HcmV?d00001 diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-disc.eot b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-disc.eot new file mode 100644 index 0000000000000000000000000000000000000000..21f4c8738b3d49b6ec8b455a5477ee3f3a22ea91 GIT binary patch literal 12544 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 Z{vbE~p-jzV|2}z{JpSKRzJA6!^&hm;^=tqD literal 0 HcmV?d00001 diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-disc.svg b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-disc.svg new file mode 100644 index 0000000000..f12aad29c7 --- /dev/null +++ b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-disc.svg @@ -0,0 +1,2316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-disc.ttf b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-disc.ttf new file mode 100644 index 0000000000000000000000000000000000000000..566a358672342048c634971f86a13a6f9682867c GIT binary patch literal 12336 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 literal 0 HcmV?d00001 diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-square.eot b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-square.eot new file mode 100644 index 0000000000000000000000000000000000000000..25ec7c68c91dcf7e0cace8a857d6d5b714b9e898 GIT binary patch literal 12560 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-square.ttf b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-square.ttf new file mode 100644 index 0000000000000000000000000000000000000000..bea2cf8ec0b7bb2822b3eb7b5362b2e629f92f9a GIT binary patch literal 12344 zcmeI&d6bR?AI9wl>8W&oG+J%tMs+T`6r^v}mDSN~@$@ zN}G~4l_;%Bixw5{_qyiiJ@p=c^#5z-eCPT+_p{8RbLNgaNhL{ACpjyrmbC9ZXh^rY z8|SS}lGFhl?bd%#yN>;*3|qqO$=n`VP?BFhW_A7$Zm&p^)+0w3PbzHiN5k)uq-`JW zZ!#vGKdNqzX8YomwBHyGWGzj#!waazn3BxIR2!6}mhquxaalorQdhUzcI87(N&dw0 zRK27D_c!5oZfSl=dd})$b+~^-l4Q*;FRRR~Sv8?3N!r)s{`Lu9d+KMDRK04lLP!4b zmgOTHZMsk8jN$dWtWWAxJ!5%`b+h!y&C7E)aIw=_vw$R_}WuEW9$3YpTO3iz}BC@)}O%t+fN`#@p~)vfBsf=w$g$# z6utf9mvhzc`OUxY^~<{|9oGYutg{3q>$kI#byl$X%%BEVI<9kw&F2xdu+njzizt~h zBq!^9O3C#id7DVCAIbV&l)P;uH;m-%B6<5rZWPIlBYB5N)|s4=cZ}qnBDrZK?;Ody zMDnhYyjvvaMsl-A-aV3=M{Cnr%2u>l69u7lDkIoVUgS| zlDkK8k4Wwr$-N@EcO>_T_NFEu<1(7@|lGBk~7|Ej}c}yf1 zMe^84J~@($Be^7!OCz}~lFK7`TqIXSa%CiEB6)lyPl)7GB6(sYPm1JIBl)yQo*c=i zNAekwd}bt{70G8u@;Q-wZX}-<$>&G%1(AGVBwrNC7f14xNWLVJFOB4>k$hPsUmnTR zBKe9)zA}=pisY*!`I<p zk$gua&x+*Pk$h()-xbMsNAf+9d~YP*7s>ZW@|;M1Ad=@s@`I85P$bWb~KO4!q!14lE01QwUPW?B!3^t z>mvDwNd7UBe~RRvBYAx!{}Rc+M)Gfw{CgyCh~z&a`OirHE0Q-x@}>yurqYL0WM^@k z>}m|z*$mm$8M1R2vTHD8*JQ}9#gJW_A-fJkc3p<-dJNgyFl5(f$Zo)py)8p_Lx$|_ z7_zr#$Zo`t-IyVJ2Zrn>4B0y}Wbed~-IO7FXNK%u7_xU|$li@1JC`B58AJB&4B5>Y zvRg1@@4=AWk|BFfhU``h*?Tc$@6C|injyOlLv~w+>^z3-b`06=8L~StWOro9?!=J2 z4@3684B7iJWbeuDfehK58L|&z$nL_BeK14zAq?4vGGupU$UclAyBkAxcZTd9 z4B0&yvU@RP_h!iM!;pPAL-r92*+(*D_hraFiXponLw0|L>;VkfM>Av(WXK-GkUf|o zdk91JP=@Sd7_yIL$UcrC`*?=z6Bx3GF=U^}kbM$E_Hc&m5e(V+4A~kb}>VC2}5=%Lv|TMb~!`#IEL&BhU`j)><1aLA7aR!$B_LnL-r#K*^e@0 zKgN*#I79Xm4B7J;vY%wgUciw36hrnxhU}*qvY%ndewHEoIfm@#8M0qs$bOL_dl5tS zOAOhI8M0qy$bN+(dkI7Ks|?w%F=W5ako^Wj_L~gZOBu4?V#t1*A$u7^_B#yO%NerY zWypSyA^UxX><<{SKV-;W!I1qCL-xlE*`F|EuVl#nlp%W+L-uNh?9UjoKWE5Z!;t+2 zL-v;p*tj-WHSH5R<(fCVP8Kb|Xx7V@&oAnCvE) z>>V-LJ7Kb$VzPI}WbcB>-W8L*8zws!liduHy*nnmIVQUWCVLM|c1uk5o|x=bnC!hU z*?VKMTVt}@V6xj{vhy(6?J(KxG1(n3*&Q+2oiN$^V6ykcWbcQ`-XD{F04DoDOm=5X z_Cc8JE|~0tG1-S;vJb^%cg18MhRN=R$?lHH?t#hfiOKGT$?lEG?t{rb9Fu(nCi_TC zc3({PQJCz0nC$+T>;ahUqcPb7G1-GK*@H3JLonGxG16nCual?0ii2NKAGCCVLbnJB`UM#AJ`gWRJmQ7h$r;VzN)hWEW$yOEB4` znCvo4b~z?{945O0lU<3)&S0{~W3ne;vQNQePsC(T!epO{$vzE}JsFdIIwt!JO!k?W z?6WZ0XJfL@!DOF{$vzL0eLg1p0!;RWnCy!%*%xE7r(m)#!DL^G$)1YIz6_InIVO7= zCi@CZ_LZ3It1#JDW3sQoWKYLrUyI4U4wHR7Ci@0V_6$t+jhO74FxfX_vTwm;&%|Wk zipjnWlYKiT`wmR@EKK%nO!l3a?7J}8cVn{e!DQcy$-WPheLp694kr5nO!iz%_Jf%0 zhcMamFxd}dvLC@@KZ?nI43qshCi@9Y_IynClbGxUnCz!8*$Xk*Ph+y5!DK&+$$k!# z{X8c71x)sfnCwNE?3Xavi!s?RW3petWG}&FzlzCz4U_#kCi@Lc_M4dOrI_ruFxhWo zvX^19-@#-r$7H{Y$$k%${XQo915EaZnCump?2jmrQ zQCHV2ibtk=^-R^XvXUCys&X~dG@Omwg{yN_Pxo*R$NPnAbH&NXa2>ABnabx(W!K_J zt7K+4iz|K>hpTaXc{m$y3|CJY^LO4=&&^3%@%O$}uAL0!?+B}0Cuy0QpGi;5w5?1R zjISulOln&>ZhU@4dSH6=_~QJEE#0-HV?)ywl|^NxxgGM_Z|Uyd>C$vXekMICcjTnp z$_b-8W-^7jg%xEbxxLCtGwI^uvfT2Dva#ucOx~DGro3~zc7<^~ub`}is{+#eOMiwd zZYog$R|ZsYwL*q}@z;@Y+|K7nnyWg}T-`99s}ywm-#+W#K5i(lUcu)p;tGe-B$w-X z^0>a|-#)uH&o1>Vk8EKJ9of{GZ3?@hH6#|3Uk|)vD{!g8!JTR2Kh+l~eU+pCtbQC`aZu literal 0 HcmV?d00001 diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-square.woff b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security-square.woff new file mode 100644 index 0000000000000000000000000000000000000000..1c4b7a997457fadb25b9f8943216a306754b0f67 GIT binary patch literal 2936 zcmeHJ`&Sg_86H3p0t)VGL2FnQ6_`~QK?E@if+M73bVXzr1oi@6iv$o7=-363B9Q?R z<7kYy=;(+na#2t~++FJ>8coF+Yej|8GUd#zjJqos*yj3W#hPZGNeUl?4deCjx&5 zrJ^+HR%*H~Q_%7t$jKgpq$!)9=;AhQ{li8Ga{i;>@q7pOVbQD28+7XhZNI?h3s~fe z%m~^nh=O)i;L`-mvZw82o6~cIUd|5%{%*FD-CPLTnvwd>#|qr>JzOCuU6&`!b$%^y zF9Fl-#zXF(>(Vzs&`0jV_e4RE{mF(WNiLZg**U`h#tR;a0RO(nUv9~(O4Y8{Y9FTT zO}(Sj=41^z>mF*gx*gD7*VI)Tv6-t~Z#vvOvt!GI=^Kl_vWH5&9Td>}cfR>9q_B`E zEYwL-r|r!tVkDlkJf}|a{Khl>(3GZ~I~I0LavXQG)K;e1k(BKJ{iRDzGokDMbRNp9 zdim3ayZ-kMEq~Pi^xDTeJH(OG+Y&Qd|Kz?iEi+fB)-i6cL`g**9UTvvy6(pY1r^Mw z>S$=VSF@_%RfCtOr|0jrTJ39Dz73x-&T&^lmiCS;$R9A47ZXwnUSE3s!fi2_RW&7G zc-hFvVCUlNU#vEaJmsH{gj#Ml4n7|VzJ2NFv4USTX2+->60=HU#>E$n8||D5Y_2gy zSZ3z-8>m|xcT6h(j4G)InS_^_@m`BvMJv{Fl~OrMMc0GPgqMl2)B;b!tC>lS!(N~j zv0Ro^uBNUxf-!`li4n(Pk5R=M?srmo0_D>PCJ~0SOl%zX47HtS?ylu?3B&mjat(F? zRcN^Iwb(ASGoCvH%d@FXwcs>isArm0*dDYqfoq55xm15GxJVcpnL!m+h}zCDE=uee zDof&)!=}xYM;&-fs7Ypp601dJ$=n9mw3Rwo2i_3sV~kYED~Qo-N@WBZ*tCtZt>fZg zYb)Bgj=Kk&Fskbm_?A%DF=;C72-=v){R1}TQ^BV|uhgWYf{oxiqUQv2Scx^G8ES4G zY}!Dz8o`f5&q?Ni66-)SG~CCqDV54Kg4;w7#dIjKR&+qk$zjtb>a7v<5Ir@_uoAPN z0~*c&)@vy@Blt5Bc7iEU@=d5j&3VK6^;Crs&_vit=DLz^LnRtc4C_-Ug%NyDgi%b5 zl5at))m$K~-$->D!QY6m8m3>#Uqq`loC~biQMMSaK*^J+CW%`C>$gy{I`EV*lZ?#> z2*PY+R4V>kRFlX(hxK|Y;}j?-%(YCgia&t%uHzoS`t8)fDPWQ6H&Fvd@OQ#o!@O1U zX0%tsjf1UPN@4_8i2M_btri?7@=r4rDt)*Pz37Bmz24NRwsFGel#+(Fp7 zjndSDIwHTGX;ks$s3n1Gg{@ywy|ti&$Zuo@RD2Oy5YJV>)+{Q#7Ss@9G= z6A2EGts>JoHXX^3VoT@;cuxe_L*|N1&1^C<0As;)2i~&`7|6FGQ!A@S2BcUxJ&cDf z1%;%WNZ-URLnJWoPnY0fk)V>S5b0akR74`>L+I;xSOnNjDn$CTY%Ed@^9$)3JZu>_ zM0Sew=hbM}rQs zS8O%2Zb*SI?@deaQ3TYG;bLn$D?QCm!UCbq0{$0n&9B=0Bh}`fJ^p5 zUtx@pm)@6a@~X=B$v?lm)V;X(jmOv% zzH7*ZTh2#*I&slzGN5)cvm|(xdwCix zzqq~Ok)y`&{I3?l6>d13=bqd-4_s~TU(}bvwHGz~tLd3`m@1WieLvOG9ak9>c+PnC zMwRr)-M*XqYi~dG_pFjC;u=0%e{aqFJ!iWcqkfzdumF?#gto%BTIQDZochTzEe+4| zoTGM2F%=hIF3gb3_KO-@w10^9Thcdia`BYZYjd-QsN{oupX;*O#ZeP>&#-r$|H=@s zEqKN@`HEHXcV=_<2kWBO&J*=H%cmwXSJOk=1Jx_3%yZ=r*0&eDyzo)kkgE8_$bcLB q_=Ki->8_#=_nfi=QaZlavAc42<)Om*wx)$=e2GFk$bFgpDd^u2@sUUX literal 0 HcmV?d00001 diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security.css b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security.css new file mode 100644 index 0000000000..89e45814f8 --- /dev/null +++ b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/dist/text-security.css @@ -0,0 +1,24 @@ +@font-face { + font-family: 'text-security-circle'; + src: url('text-security-circle.eot'); + src: url('text-security-circle.eot?#iefix') format('embedded-opentype'), + url('text-security-circle.woff') format('woff'), + url('text-security-circle.ttf') format('truetype'), + url('text-security-circle.svg#text-security') format('svg'); +} +@font-face { + font-family: 'text-security-square'; + src: url('text-security-square.eot'); + src: url('text-security-square.eot?#iefix') format('embedded-opentype'), + url('text-security-square.woff') format('woff'), + url('text-security-square.ttf') format('truetype'), + url('text-security-square.svg#text-security') format('svg'); +} +@font-face { + font-family: 'text-security-disc'; + src: url('text-security-disc.eot'); + src: url('text-security-disc.eot?#iefix') format('embedded-opentype'), + url('text-security-disc.woff') format('woff'), + url('text-security-disc.ttf') format('truetype'), + url('text-security-disc.svg#text-security') format('svg'); +} diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/index.js b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/index.js new file mode 100644 index 0000000000..7a48412ac3 --- /dev/null +++ b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/index.js @@ -0,0 +1,89 @@ +var + icons2font = require('svgicons2svgfont'), + fs = require('fs'), + path = require('path'), + svg2ttf = require('svg2ttf'), + ttf2eot = require('ttf2eot'), + ttf2woff = require('ttf2woff'), + args = require('yargs').argv; +/** + * We need to loop through the unicode character list and pass them all for svgicons2svgfont. + * If you want to reduce the file-sizes with the cost of worse character support, you can + * specify --max={number} when building. This number will be the highest supported character + * code. For example, building with `npm run build -- --max=126` would only support the Basic Latin unicode block. + * + * @todo Perhaps this could be better achieved by just defining the notdef glyph? + * That would probably reduce the file sizes quite a bit, but I'm not quite sure how that would work with the + * tff and woff versions. + * @param {number=} [max=767] + */ +var MAX_VALUE = args.max || 767; +/** + * Comma-separated list of the supported shapes. + * @param {string} [shapes='circle,square,disc'] + */ +var SHAPES = args.shapes || 'circle,square,disc'; + +var styleTemplate = fs.readFileSync('style-template.css', 'utf-8'), stylesheet = '', + characters = []; + +for (var i = 0; i <= MAX_VALUE; i++){ + characters.push(String.fromCharCode(i)); +} + +function bufferFrom(source) { + return typeof Buffer.from === 'function' ? Buffer.from(source) : new Buffer(source); +} + +function logError(err) { + if (err) { + console.error(err); + } +} + +var DIST_DIR = path.join(__dirname, 'dist'); + +if (!fs.existsSync(DIST_DIR)) { + fs.mkdirSync(DIST_DIR); +} + +SHAPES.split(',').forEach(function (shape) { + var + fontName = 'text-security-' + shape, + fontPath = path.join(DIST_DIR, fontName), + fontStream = icons2font({ + fontName: fontName + }); + + fontStream + .pipe(fs.createWriteStream(fontPath + '.svg'))//Create the .svg font + .on('finish', function () { + //Create the other formats using the newly created font and Fontello's conversion libs + + var ttf = svg2ttf(fs.readFileSync(fontPath + '.svg', 'utf-8'), {}); + fs.writeFileSync(fontPath + '.ttf', bufferFrom(ttf.buffer), 'utf-8'); + + // ttf2eot and ttf2woff expect a buffer, while svg2ttf seems to expect a string + // this would be better read from the buffer, but will do for now + var ttfFile = fs.readFileSync(fontPath + '.ttf'); + + var eot = ttf2eot(ttfFile, {}); + fs.writeFile(fontPath + '.eot', bufferFrom(eot.buffer), 'utf-8', logError); + + var woff = ttf2woff(ttfFile, {}); + fs.writeFile(fontPath + '.woff', bufferFrom(woff.buffer), 'utf-8', logError); + }) + .on('error', logError); + + var glyph = fs.createReadStream(path.join(__dirname, 'assets', shape + '.svg')); + glyph.metadata = { + unicode: characters, + name: shape + }; + fontStream.write(glyph); + fontStream.end(); + //Append the new shape to the generated stylesheet + stylesheet += styleTemplate.replace(/\{\{shape}}/g, shape) + '\n'; +}); + +fs.writeFile(path.join(__dirname, 'dist', 'text-security.css'), stylesheet, logError); \ No newline at end of file diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/package.json b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/package.json new file mode 100644 index 0000000000..bf7d7f1083 --- /dev/null +++ b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/package.json @@ -0,0 +1,60 @@ +{ + "_from": "text-security@^1.0.1", + "_id": "text-security@1.0.1", + "_inBundle": false, + "_integrity": "sha512-Y5fStAKoEvLr6h2oz/nkSm+P3b5f3t+JAnNkycFJr15mz32XvrfBONjO+fNAnKaP5+YuD69tVNmlmKmfZu9ZGw==", + "_location": "/text-security", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "text-security@^1.0.1", + "name": "text-security", + "escapedName": "text-security", + "rawSpec": "^1.0.1", + "saveSpec": null, + "fetchSpec": "^1.0.1" + }, + "_requiredBy": [ + "/" + ], + "_resolved": "https://registry.npmjs.org/text-security/-/text-security-1.0.1.tgz", + "_shasum": "9a04f42c322123b1f1fffa49d1d62c638fe72ba3", + "_spec": "text-security@^1.0.1", + "_where": "/home/st/dev/keycloak/themes/src/main/resources/theme/keycloak/common/resources", + "author": { + "name": "Oskari Noppa" + }, + "bugs": { + "url": "https://github.com/noppa/text-security/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "Cross-browser alternative to -webkit-text-security", + "devDependencies": { + "svg2ttf": "4.0.0", + "svgicons2svgfont": "5.0.0", + "ttf2eot": "2.0.0", + "ttf2woff": "2.0.1", + "yargs": "4.6.0" + }, + "homepage": "https://github.com/noppa/text-security#readme", + "keywords": [ + "-webkit-text-security", + "conceal", + "password" + ], + "license": "MIT", + "main": "index.js", + "name": "text-security", + "repository": { + "type": "git", + "url": "git+https://github.com/noppa/text-security.git" + }, + "scripts": { + "build": "node index.js", + "prebuild": "npm install", + "test": "" + }, + "version": "1.0.1" +} diff --git a/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/style-template.css b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/style-template.css new file mode 100644 index 0000000000..4691893525 --- /dev/null +++ b/themes/src/main/resources/theme/keycloak/common/resources/node_modules/text-security/style-template.css @@ -0,0 +1,8 @@ +@font-face { + font-family: 'text-security-{{shape}}'; + src: url('text-security-{{shape}}.eot'); + src: url('text-security-{{shape}}.eot?#iefix') format('embedded-opentype'), + url('text-security-{{shape}}.woff') format('woff'), + url('text-security-{{shape}}.ttf') format('truetype'), + url('text-security-{{shape}}.svg#text-security') format('svg'); +} \ No newline at end of file diff --git a/themes/src/main/resources/theme/keycloak/common/resources/package.json b/themes/src/main/resources/theme/keycloak/common/resources/package.json index f0150f0f1f..067ca36078 100644 --- a/themes/src/main/resources/theme/keycloak/common/resources/package.json +++ b/themes/src/main/resources/theme/keycloak/common/resources/package.json @@ -4,22 +4,23 @@ "description": "Keycloak Admin Console", "license": "Apache-2.0", "dependencies": { - "angular": "^1.6.6", - "angular-cookies": "^1.6.6", - "angular-loader": "^1.6.6", - "angular-resource": "^1.6.6", - "angular-route": "^1.6.6", - "angular-sanitize": "^1.6.6", - "angular-translate": "^2.15.1", - "angular-translate-loader-url": "^2.15.1", - "angular-treeview": "^0.1.5", - "angular-ui-select2": "^0.0.5", - "autofill-event": "^0.0.1", - "bootstrap": "^3.3.7", - "filesaver": "^0.0.13", - "font-awesome": "^4.7.0", - "jquery": "^3.2.1", - "ng-file-upload": "^12.2.13", - "select2": "3.5.1" + "angular": "1.6.6", + "angular-cookies": "1.6.6", + "angular-loader": "1.6.6", + "angular-resource": "1.6.6", + "angular-route": "1.6.6", + "angular-sanitize": "1.6.6", + "angular-translate": "2.15.1", + "angular-translate-loader-url": "2.15.1", + "angular-treeview": "0.1.5", + "angular-ui-select2": "0.0.5", + "autofill-event": "0.0.1", + "bootstrap": "3.3.7", + "filesaver": "0.0.13", + "font-awesome": "4.7.0", + "jquery": "3.2.1", + "ng-file-upload": "12.2.13", + "select2": "3.5.1", + "text-security": "1.0.1" } }