diff --git a/console/src/app/app-routing.module.ts b/console/src/app/app-routing.module.ts index 4947ee464d..2db6941e5d 100644 --- a/console/src/app/app-routing.module.ts +++ b/console/src/app/app-routing.module.ts @@ -11,6 +11,15 @@ const routes: Routes = [ loadChildren: () => import('./pages/home/home.module').then(m => m.HomeModule), canActivate: [AuthGuard], }, + { + path: 'firststeps', + loadChildren: () => import('./modules/onboarding/onboarding.module') + .then(m => m.OnboardingModule), + canActivate: [AuthGuard, RoleGuard], + data: { + roles: ['iam.write'], + } + }, { path: 'granted-projects', loadChildren: () => import('./pages/projects/granted-projects/granted-projects.module') diff --git a/console/src/app/app.component.html b/console/src/app/app.component.html index dd61103f61..a2fde281a3 100644 --- a/console/src/app/app.component.html +++ b/console/src/app/app.component.html @@ -1,19 +1,25 @@ - - + + src="../assets/images/zitadel-logo-solo-light.svg" /> - + - @@ -37,8 +43,8 @@ - + + + + + +

{{'HOME.QUICKSTARTS.LABEL' | translate}}

+

{{'HOME.QUICKSTARTS.TITLE' | translate}}

+

{{'HOME.QUICKSTARTS.DESCRIPTION' | translate}}

+
+ + + + +
+ +
+

- {{'HOME.IAM'| translate}}

+ {{'HOME.IAM'| translate}} +

{{'HOME.IAM_DESC'| translate}}

@@ -30,15 +60,12 @@ class="las la-link">
- {{'HOME.IAM_POLICY_IAM' | translate}} - {{'HOME.IAM_POLICY_COMPLEXITY' | translate}} - {{'HOME.IAM_POLICY_LOGIN' | translate}} + {{'HOME.IAM_POLICY_IAM' | + translate}} + {{'HOME.IAM_POLICY_COMPLEXITY' + | translate}} + {{'HOME.IAM_POLICY_LOGIN' | + translate}} @@ -59,8 +86,8 @@ @@ -69,18 +96,18 @@

- {{'HOME.PROJECTS'| translate}}

+ {{'HOME.PROJECTS'| translate}} +

{{'HOME.PROJECTS_DESC'| translate}}

- {{'HOME.PROJECTS_NEW_LINK' | translate}} + {{'HOME.PROJECTS_NEW_LINK' | + translate}}
@@ -92,23 +119,21 @@ {{'HOME.PROTECTION'| translate}}

{{'HOME.PROTECTION_DESC'| translate}}

- {{'HOME.ORG_POLICY_IAM' | translate}} + {{'HOME.ORG_POLICY_IAM' | + translate}} {{'HOME.ORG_POLICY_COMPLEXITY' | translate}} - {{'HOME.ORG_POLICY_LOGIN' | translate}} + [routerLink]="[ '/org', 'policy','complexity']">{{'HOME.ORG_POLICY_COMPLEXITY' | + translate}} + {{'HOME.ORG_POLICY_LOGIN' | + translate}} @@ -118,15 +143,14 @@

- {{'HOME.USERS'| translate}}

+ {{'HOME.USERS'| translate}} +

{{'HOME.USERS_DESC'| translate}}

- {{'HOME.USERS_HUMANS' | translate}} - {{'HOME.USERS_MACHINES' | translate}} + {{'HOME.USERS_HUMANS' | + translate}} + {{'HOME.USERS_MACHINES' | + translate}} {{'HOME.USERS_CREATE' | translate}} diff --git a/console/src/app/pages/home/home.component.scss b/console/src/app/pages/home/home.component.scss index af6a5c076a..091d2f1ea8 100644 --- a/console/src/app/pages/home/home.component.scss +++ b/console/src/app/pages/home/home.component.scss @@ -1,6 +1,7 @@ .wrapper { padding-bottom: 100px; + position: relative; .header { display: flex; @@ -31,6 +32,78 @@ margin: -1rem; justify-content: space-evenly; + .onboard, + .quickstart { + text-decoration: none; + cursor: pointer; + box-sizing: border-box; + flex: 1 0 45%; + position: relative; + border-radius: 0.5rem; + margin: 1rem; + padding: 1.5rem; + box-shadow: 0 3px 8px 0 rgb(0 0 0 / 6%); + + h2 { + color: white; + } + + .first-steps { + text-transform: uppercase; + font-size: 12px; + font-weight: bold; + } + + .close { + visibility: hidden; + position: absolute; + top: 0; + right: 0; + + i { + color: white; + font-size: 1rem; + } + } + + &:hover { + .close { + visibility: visible; + } + } + } + + .onboard { + background: linear-gradient(40deg, rgb(80, 66, 121),rgb(177, 59, 122),rgb(225,53,81), rgb(230,107,86)); + + p { + color: #fad6e3; + } + } + + .quickstart { + background: linear-gradient(30deg, #2283a6,#6c8f59); + + p { + color: #d6f3fa; + } + + .logo-cloud { + display: flex; + flex-wrap: wrap; + margin: -0.5rem; + + i { + font-size: 40px; + padding: .5rem; + border: 1px solid #ffffff50; + border-radius: .5rem; + margin: 0.5rem; + color: white; + } + } + } + .item { flex: 1 0 45%; margin: 0 1rem; diff --git a/console/src/app/pages/home/home.component.ts b/console/src/app/pages/home/home.component.ts index 71a65d38cf..e9cbc25f4b 100644 --- a/console/src/app/pages/home/home.component.ts +++ b/console/src/app/pages/home/home.component.ts @@ -8,8 +8,26 @@ import { GrpcAuthService } from 'src/app/services/grpc-auth.service'; }) export class HomeComponent { public dark: boolean = true; + public firstStepsDismissed: boolean = false; + public quickstartsDismissed: boolean = false; + constructor(public authService: GrpcAuthService) { const theme = localStorage.getItem('theme'); this.dark = theme === 'dark-theme' ? true : theme === 'light-theme' ? false : true; + + this.firstStepsDismissed = localStorage.getItem('firstStartDismissed') == 'true' ? true : false; + this.quickstartsDismissed = localStorage.getItem('quickstartsDismissed') == 'true' ? true : false; + } + + dismissFirstSteps(event: Event): void { + event.preventDefault(); + localStorage.setItem('firstStartDismissed', 'true'); + this.firstStepsDismissed = true; + } + + dismissQuickstarts(event: Event): void { + event.preventDefault(); + localStorage.setItem('quickstartsDismissed', 'true'); + this.firstStepsDismissed = true; } } diff --git a/console/src/app/pages/home/home.module.ts b/console/src/app/pages/home/home.module.ts index 2d397bd3fb..535d247a14 100644 --- a/console/src/app/pages/home/home.module.ts +++ b/console/src/app/pages/home/home.module.ts @@ -1,19 +1,20 @@ import { CommonModule } from '@angular/common'; import { NgModule } from '@angular/core'; import { MatButtonModule } from '@angular/material/button'; +import { MatRippleModule } from '@angular/material/core'; import { MatIconModule } from '@angular/material/icon'; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { MatTooltipModule } from '@angular/material/tooltip'; import { TranslateModule } from '@ngx-translate/core'; import { HasRoleModule } from 'src/app/directives/has-role/has-role.module'; import { AvatarModule } from 'src/app/modules/avatar/avatar.module'; import { CardModule } from 'src/app/modules/card/card.module'; +import { OnboardingModule } from 'src/app/modules/onboarding/onboarding.module'; import { SharedModule } from 'src/app/modules/shared/shared.module'; import { HomeRoutingModule } from './home-routing.module'; import { HomeComponent } from './home.component'; - - @NgModule({ declarations: [HomeComponent], imports: [ @@ -24,9 +25,12 @@ import { HomeComponent } from './home.component'; MatButtonModule, TranslateModule, AvatarModule, + MatTooltipModule, SharedModule, MatProgressSpinnerModule, CardModule, + MatRippleModule, + OnboardingModule, ], }) export class HomeModule { } diff --git a/console/src/app/pages/projects/owned-projects/project-grant-detail/project-grant-detail.component.html b/console/src/app/pages/projects/owned-projects/project-grant-detail/project-grant-detail.component.html index 6e72151365..031c088860 100644 --- a/console/src/app/pages/projects/owned-projects/project-grant-detail/project-grant-detail.component.html +++ b/console/src/app/pages/projects/owned-projects/project-grant-detail/project-grant-detail.component.html @@ -39,7 +39,7 @@

{{ 'PROJECT.GRANT.DETAIL.MEMBERTITLE' | translate }}

{{ 'PROJECT.GRANT.DETAIL.MEMBERDESC' | translate }}

- +
\ No newline at end of file diff --git a/console/src/app/pages/signedout/signedout.component.scss b/console/src/app/pages/signedout/signedout.component.scss index 1577de9c7f..d5320c36a7 100644 --- a/console/src/app/pages/signedout/signedout.component.scss +++ b/console/src/app/pages/signedout/signedout.component.scss @@ -17,19 +17,24 @@ p { color: var(--grey); text-align: center; - font-size: 1rem; + font-size: 14px; margin: 0; margin-bottom: 3rem; } img { height: 100px; + max-width: 170px; margin-bottom: 2rem; } button { display: block; padding: .5rem 4rem; + + i { + margin-left: .5rem; + } } } } diff --git a/console/src/app/pages/users/user-detail/user-detail/user-detail.component.scss b/console/src/app/pages/users/user-detail/user-detail/user-detail.component.scss index 0f113e67c5..154ae46fb8 100644 --- a/console/src/app/pages/users/user-detail/user-detail/user-detail.component.scss +++ b/console/src/app/pages/users/user-detail/user-detail/user-detail.component.scss @@ -1,7 +1,6 @@ .head { display: flex; align-items: center; - border-bottom: 1px solid #ffffff20; flex-wrap: wrap; padding-bottom: .5rem; diff --git a/console/src/app/services/interceptors/auth.interceptor.ts b/console/src/app/services/interceptors/auth.interceptor.ts index 37b1371dc0..08e13e0ab0 100644 --- a/console/src/app/services/interceptors/auth.interceptor.ts +++ b/console/src/app/services/interceptors/auth.interceptor.ts @@ -55,6 +55,7 @@ export class AuthInterceptor implements UnaryIn titleKey: 'ERRORS.TOKENINVALID.TITLE', descriptionKey: 'ERRORS.TOKENINVALID.DESCRIPTION', }, + disableClose: true, width: '400px', }); diff --git a/console/src/assets/i18n/de.json b/console/src/assets/i18n/de.json index 7f12d7b93f..27fb1a90b8 100644 --- a/console/src/assets/i18n/de.json +++ b/console/src/assets/i18n/de.json @@ -1,5 +1,29 @@ { "APP_NAME": "ZITADEL", + "ONBOARDING": { + "HEADER":"Erste Schritte", + "TITLE":"Lernen Sie unsere ZITADEL Console kennen.", + "LOGINDESC":"Melden Sie sich an um Zugriff auf Funktionen von Zitadel zu erhalten", + "LOGIN":"Anmelden", + "DESCRIPTION":"Führen Sie die folgenden Schritte aus und passen Sie ZITADEL optimal an Ihre Bedürfnisse an.", + "STEPS_TITLE":"Führen Sie die folgenden Schritte in gewünschter Reihenfolge aus:", + "STEPS": { + "1": { + "TITLE":"Projekt erstellen", + "DESC":"Erstellen Sie Ihr erstes Projekt und legen Sie Zugangsberechtigungen eventueller Mitarbeiter fest." + }, + "2": { + "TITLE":"Applikation erstellen", + "DESC":"Erstellen Sie eine Applikation innerhalb Ihres Projektes und legen Sie dessen Eigenschaften fest." + }, + "3": { + "TITLE":"Sicherheit verbessern", + "DESC":"Erweitern Sie die Zugangsrichtlinien und erhöhen Sie dadurch die Sicherheit ihrer Benutzer." + } + }, + "START":"Start", + "DOCS":"Docs" + }, "HOME": { "TITLE": "ZITADEL", "SECURITYANDPRIVACY": "Datenschutz und Personalisierung", @@ -32,9 +56,15 @@ "WELCOME":"Willkommen", "WELCOMESENTENCE":"Hier findest Du die empfohlenen Aktionen basierend auf Deinen zuletzt erworbenen Berechtigungen. Beachte bitte, dass Du möglicherweise Deine Organisation in der Kopfzeile wechseln musst.", "DISCLAIMER":"Du kannst nur die Einstellungen Deiner aktuellen Organisation, die in der Kopfzeile angegeben ist, sehen. ZITADEL behandelt Deine Daten vertraulich und sicher.", - "DISCLAIMERLINK":"Mehr Informationen zur Sicherheit" + "DISCLAIMERLINK":"Mehr Informationen zur Sicherheit", + "QUICKSTARTS": { + "LABEL":"Erste Schritte", + "TITLE":"Quickstarts", + "DESCRIPTION":"Mit ZITADEL schnell durchstarten." + } }, "MENU": { + "DASHBOARD":"Übersicht", "PERSONAL_INFO": "Persönliche Informationen", "DOCUMENTATION":"Dokumentation", "IAMPOLICIES":"IAM", @@ -54,6 +84,7 @@ "SHOWORGS":"Alle Organisationen anzeigen", "GRANTSECTION":"Berechtigungssektion", "GRANTS":"Berechtigungen", + "TOC":"Datenschutz und AGB", "TOOLTIP": { "PERSONAL":"Verwalte deinen persönlichen Account, deine IDPs, Login Methoden, Faktoren und Berechtigungen", "IAMPOLICIES":"Verwalte ZITADELs globale Zugangsrichtlinien und verwalte ZITADEL Manager", diff --git a/console/src/assets/i18n/en.json b/console/src/assets/i18n/en.json index ee90a3b6c8..2e3d2765b6 100644 --- a/console/src/assets/i18n/en.json +++ b/console/src/assets/i18n/en.json @@ -1,5 +1,29 @@ { "APP_NAME": "ZITADEL", + "ONBOARDING": { + "HEADER":"First Steps", + "TITLE":"Learn how to use ZITADEL", + "LOGINDESC":"You need to log in to control your ZITADEL settings.", + "LOGIN":"Login", + "DESCRIPTION":"We at ZITADEL care a lot about security and performance. Carry out the following steps and adapt ZITADEL optimally to your needs.", + "STEPS_TITLE":"Complete the following steps in the order you want:", + "STEPS": { + "1": { + "TITLE":"Projekt erstellen", + "DESC":"Erstellen Sie Ihr erstes Projekt und legen Sie Zugangsberechtigungen eventueller Mitarbeiter fest." + }, + "2": { + "TITLE":"Applikation erstellen", + "DESC":"Erstellen Sie eine Applikation innerhalb Ihres Projektes und legen Sie dessen Eigenschaften fest." + }, + "3": { + "TITLE":"Sicherheit verbessern", + "DESC":"Erweitern Sie die Zugangsrichtlinien und erhöhen Sie dadurch die Sicherheit ihrer Benutzer." + } + }, + "START":"Start", + "DOCS":"Docs" + }, "HOME": { "TITLE": "ZITADEL", "SECURITYANDPRIVACY": "Data Protection and Personalisation", @@ -32,9 +56,15 @@ "WELCOME":"Welcome", "WELCOMESENTENCE":"Here you can find recommended actions based on your last acquired permissions. Note that you may have to select your organisation in the header above.", "DISCLAIMER":"You can only see settings of your current organisation specified in the header. ZITADEL treats your data confidentially and securely.", - "DISCLAIMERLINK":"Further information" + "DISCLAIMERLINK":"Further information", + "QUICKSTARTS": { + "LABEL":"First Steps", + "TITLE":"Quickstarts", + "DESCRIPTION":"Get started with ZITADEL quickly." + } }, "MENU": { + "DASHBOARD":"Overview", "PERSONAL_INFO": "Personal Information", "DOCUMENTATION":"Documentation", "IAMPOLICIES":"IAM", @@ -54,6 +84,7 @@ "SHOWORGS":"Show All Organisations", "GRANTSECTION":"Authorization Section", "GRANTS":"Authorizations", + "TOC":"Privacy Policy and TOC", "TOOLTIP": { "PERSONAL":"Show your Personal Account, your IDPs, Login methods, Factors and Authorisations", "IAMPOLICIES":"Manage ZITADELs global Access policies und elect ZITADEL Managers", diff --git a/console/src/assets/images/zitadel-logo-solo-dark.svg b/console/src/assets/images/zitadel-logo-solo-dark.svg new file mode 100644 index 0000000000..4d3181174e --- /dev/null +++ b/console/src/assets/images/zitadel-logo-solo-dark.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/console/src/assets/images/zitadel-logo-solo-light.svg b/console/src/assets/images/zitadel-logo-solo-light.svg new file mode 100644 index 0000000000..df44ec5398 --- /dev/null +++ b/console/src/assets/images/zitadel-logo-solo-light.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/console/src/component-themes.scss b/console/src/component-themes.scss index 40f16d4354..436f57086f 100644 --- a/console/src/component-themes.scss +++ b/console/src/component-themes.scss @@ -15,6 +15,7 @@ @import 'src/app/modules/form-field/form-field.component.scss'; @import 'src/app/modules/label/label.component.scss'; @import 'src/app/modules/meta-layout/meta.scss'; +@import 'src/app/modules/onboarding/onboarding.component.scss'; @mixin component-themes($theme) { @include avatar-theme($theme); @@ -34,4 +35,5 @@ @include link-theme($theme); @include meta-theme($theme); @include info-section-theme($theme); + @include onboarding-theme($theme); } diff --git a/console/src/index.html b/console/src/index.html index 5e48f270bc..08720e98a5 100644 --- a/console/src/index.html +++ b/console/src/index.html @@ -29,6 +29,7 @@ + diff --git a/console/src/styles.scss b/console/src/styles.scss index 3eaff83014..fbe3b6a0c9 100644 --- a/console/src/styles.scss +++ b/console/src/styles.scss @@ -219,18 +219,21 @@ $custom-typography: box-shadow: inset 0 0 6px rgba(0, 0, 0, .3); background-color: #2d2e30; border-radius: 8px; + transition: all .3s cubic-bezier(.645, .045, .355, 1) !important; } ::-webkit-scrollbar { width: 6px; height: 6px; background-color: #2d2e30; + transition: all .3s cubic-bezier(.645, .045, .355, 1) !important; } ::-webkit-scrollbar-thumb { background-color: #737c8870; border-radius: 8px; cursor: pointer; + transition: all .3s cubic-bezier(.645, .045, .355, 1) !important; } .root-header { diff --git a/console/src/styles/sidenav-list.scss b/console/src/styles/sidenav-list.scss index baf779d774..025e164c47 100644 --- a/console/src/styles/sidenav-list.scss +++ b/console/src/styles/sidenav-list.scss @@ -16,18 +16,23 @@ box-shadow: inset 1px 0 if($is-dark-theme, #303131, #e3e8ee); } + .sidenav { + box-shadow: inset -1px 0 if($is-dark-theme, #303131, #e3e8ee); + transition: all .3s cubic-bezier(.645, .045, .355, 1) !important; + } + .nav-item { color: mat-color($foreground, text) !important; &:hover { - background-color: $sec-dark; + background-color: if($is-dark-theme, $sec-dark, rgb(84 105 212 / 6%)); border-top-right-radius: 1.5rem; border-bottom-right-radius: 1.5rem; } &.active { color: $primary-color !important; - background-color: rgba($color: $primary-color, $alpha: .1) !important; + background-color: if($is-dark-theme, rgba($color: $primary-color, $alpha: .1), rgb(84 105 212 / 6%)) !important; } .c_label { @@ -54,7 +59,16 @@ .root-header { box-shadow: inset 0 -1px #e3e8ee; background-color: $primary-dark !important; - transition: background-color .3s cubic-bezier(.645, .045, .355, 1); + transition: all .3s cubic-bezier(.645, .045, .355, 1); + + .slash { + color: if($is-dark-theme, #525454, #d1d5d9); + } + + .org-button { + border: 1px solid if($is-dark-theme, #303131, #e3e8ee); + transition: all .3s cubic-bezier(.645, .045, .355, 1) !important; + } } .admin-line { diff --git a/site/config.js b/site/config.js index e2ad88aec8..9a3d24fdb2 100644 --- a/site/config.js +++ b/site/config.js @@ -1,4 +1,4 @@ export const SLUG_PRESERVE_UNICODE = false; export const SLUG_SEPARATOR = '_'; export const SLUG_LANG = 'en'; -export const LANGUAGES = ['de', 'en']; +export const LANGUAGES = ['en']; diff --git a/site/docs/administrate/00-overview.de.md b/site/docs/administrate/00-overview.de.md deleted file mode 100644 index 43cac2931e..0000000000 --- a/site/docs/administrate/00-overview.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Übersicht ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/00-overview.en.md b/site/docs/administrate/00-overview.md similarity index 88% rename from site/docs/administrate/00-overview.en.md rename to site/docs/administrate/00-overview.md index a7ed644984..d03f204a6d 100644 --- a/site/docs/administrate/00-overview.en.md +++ b/site/docs/administrate/00-overview.md @@ -2,6 +2,8 @@ title: Overview --- +This documentation describes the structure of ZITADEL, its role system and in parallel the use of [console](https://console.zitadel.ch), our administration UI for ZITADEL. + > All documentations are under active work and subject to change soon! ### Features diff --git a/site/docs/administrate/01-console.de.md b/site/docs/administrate/01-console.de.md deleted file mode 100644 index 54759f73ed..0000000000 --- a/site/docs/administrate/01-console.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Console ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/01-console.en.md b/site/docs/administrate/01-console.md similarity index 100% rename from site/docs/administrate/01-console.en.md rename to site/docs/administrate/01-console.md diff --git a/site/docs/administrate/02-organisations.de.md b/site/docs/administrate/02-organisations.de.md deleted file mode 100644 index 88fc1ffc1d..0000000000 --- a/site/docs/administrate/02-organisations.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Organisationen ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/02-organisations.en.md b/site/docs/administrate/02-organisations.md similarity index 100% rename from site/docs/administrate/02-organisations.en.md rename to site/docs/administrate/02-organisations.md diff --git a/site/docs/administrate/03-projects.de.md b/site/docs/administrate/03-projects.de.md deleted file mode 100644 index 9421b86c01..0000000000 --- a/site/docs/administrate/03-projects.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Projekte ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/03-projects.en.md b/site/docs/administrate/03-projects.md similarity index 100% rename from site/docs/administrate/03-projects.en.md rename to site/docs/administrate/03-projects.md diff --git a/site/docs/administrate/04-clients.de.md b/site/docs/administrate/04-clients.de.md deleted file mode 100644 index b7f53dfa17..0000000000 --- a/site/docs/administrate/04-clients.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Clients ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/04-clients.en.md b/site/docs/administrate/04-clients.md similarity index 98% rename from site/docs/administrate/04-clients.en.md rename to site/docs/administrate/04-clients.md index 4fdc436b29..1de64e4c48 100644 --- a/site/docs/administrate/04-clients.en.md +++ b/site/docs/administrate/04-clients.md @@ -13,7 +13,7 @@ Typical types of applications are: * User Agent (Single-Page-Application) * Native -Check out our [Integration Guide](integrate#Overview) for more information. +Check out our [Integration Guide](quickstarts#Overview) for more information. ### Manage clients diff --git a/site/docs/administrate/05-roles.de.md b/site/docs/administrate/05-roles.de.md deleted file mode 100644 index 26565011a6..0000000000 --- a/site/docs/administrate/05-roles.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Rollen ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/05-roles.en.md b/site/docs/administrate/05-roles.md similarity index 95% rename from site/docs/administrate/05-roles.en.md rename to site/docs/administrate/05-roles.md index 4bd418446e..caa4470d34 100644 --- a/site/docs/administrate/05-roles.en.md +++ b/site/docs/administrate/05-roles.md @@ -10,7 +10,7 @@ title: Roles For more information about how **roles** can be consumed, have a look the protocol specific information. -- [OpenID Connect / OAuth](integrate#How_to_consume_authorizations_in_your_application_or_service) +- [OpenID Connect / OAuth](quickstarts#How_to_consume_authorizations_in_your_application_or_service) ### Manage Roles diff --git a/site/docs/administrate/06-users.de.md b/site/docs/administrate/06-users.de.md deleted file mode 100644 index ab58e1c2e0..0000000000 --- a/site/docs/administrate/06-users.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Benutzer ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/06-users.en.md b/site/docs/administrate/06-users.md similarity index 100% rename from site/docs/administrate/06-users.en.md rename to site/docs/administrate/06-users.md diff --git a/site/docs/administrate/07-policies.de.md b/site/docs/administrate/07-policies.de.md deleted file mode 100644 index f78961becd..0000000000 --- a/site/docs/administrate/07-policies.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Richtlinien ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/07-policies.en.md b/site/docs/administrate/07-policies.md similarity index 100% rename from site/docs/administrate/07-policies.en.md rename to site/docs/administrate/07-policies.md diff --git a/site/docs/administrate/08-providers.de.md b/site/docs/administrate/08-providers.de.md deleted file mode 100644 index 428e170df5..0000000000 --- a/site/docs/administrate/08-providers.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Identitäts Provider ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/08-providers.en.md b/site/docs/administrate/08-providers.md similarity index 100% rename from site/docs/administrate/08-providers.en.md rename to site/docs/administrate/08-providers.md diff --git a/site/docs/administrate/09-authorizations.de.md b/site/docs/administrate/09-authorizations.de.md deleted file mode 100644 index 42e58c92a8..0000000000 --- a/site/docs/administrate/09-authorizations.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Authorizations ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/09-authorizations.en.md b/site/docs/administrate/09-authorizations.md similarity index 100% rename from site/docs/administrate/09-authorizations.en.md rename to site/docs/administrate/09-authorizations.md diff --git a/site/docs/administrate/09-management-roles.de.md b/site/docs/administrate/09-management-roles.de.md deleted file mode 100644 index 95481566c9..0000000000 --- a/site/docs/administrate/09-management-roles.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Management Rollen ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/09-management-roles.en.md b/site/docs/administrate/09-management-roles.md similarity index 100% rename from site/docs/administrate/09-management-roles.en.md rename to site/docs/administrate/09-management-roles.md diff --git a/site/docs/administrate/70-zitadelroles.de.md b/site/docs/administrate/70-zitadelroles.de.md deleted file mode 100644 index d44dec90f4..0000000000 --- a/site/docs/administrate/70-zitadelroles.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: ZITADEL Rollen ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/70-zitadelroles.en.md b/site/docs/administrate/70-zitadelroles.md similarity index 100% rename from site/docs/administrate/70-zitadelroles.en.md rename to site/docs/administrate/70-zitadelroles.md diff --git a/site/docs/administrate/80-audit.de.md b/site/docs/administrate/80-audit.de.md deleted file mode 100644 index abb8125fb8..0000000000 --- a/site/docs/administrate/80-audit.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Audit ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/80-audit.en.md b/site/docs/administrate/80-audit.md similarity index 100% rename from site/docs/administrate/80-audit.en.md rename to site/docs/administrate/80-audit.md diff --git a/site/docs/administrate/90-system.de.md b/site/docs/administrate/90-system.de.md deleted file mode 100644 index 99a0c4ac05..0000000000 --- a/site/docs/administrate/90-system.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: System Administration ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/administrate/90-system.en.md b/site/docs/administrate/90-system.md similarity index 98% rename from site/docs/administrate/90-system.en.md rename to site/docs/administrate/90-system.md index 96b6909ec4..4e287ac3e4 100644 --- a/site/docs/administrate/90-system.en.md +++ b/site/docs/administrate/90-system.md @@ -38,7 +38,7 @@ There is even a possibility to regenerate a read model. -> Additional infos to the architecture of ZITADEL is located in [Architecture Docs](documentation#Architecture) +> Additional infos to the architecture of ZITADEL is located in [Architecture Docs](architecture#Architecture) ### Secret Handling diff --git a/site/docs/administrate/seo_de.html b/site/docs/administrate/seo_de.html deleted file mode 100644 index 19e0f914f2..0000000000 --- a/site/docs/administrate/seo_de.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/site/docs/administrate/seo_en.html b/site/docs/administrate/seo_en.html deleted file mode 100644 index ec0b59a18b..0000000000 --- a/site/docs/administrate/seo_en.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/site/docs/angular/00-overview.md b/site/docs/angular/00-overview.md new file mode 100644 index 0000000000..19a97dd7cc --- /dev/null +++ b/site/docs/angular/00-overview.md @@ -0,0 +1,16 @@ +--- +title: Angular +--- + +
+ zitadel + + angular +
+ +This Integration guide shows you the recommended way to integrate **ZITADEL** into your Angular Application. +It demonstrates how to add a user login to your application and fetch some data from the user info endpoint. + +At the end of the guide you should have an application able to login a user and read the user profile. + +> Note that our **ZITADEL Console** is also written in Angular and can therefore be used as a reference. \ No newline at end of file diff --git a/site/docs/angular/01-configure.md b/site/docs/angular/01-configure.md new file mode 100644 index 0000000000..690bafa6b9 --- /dev/null +++ b/site/docs/angular/01-configure.md @@ -0,0 +1,29 @@ +--- +title: Configure Zitadel +--- + +### Setup Application and get Keys + +Before we can start building our application we have do do a few configuration steps in ZITADEL Console. +You will need to provide some information about your app. We recommend creating a new app to start from scratch. Navigate to your [Project](https://console.zitadel.ch/projects) and add a new application at the top of the page. +Select Web Application and continue. +We recommend that you use [Authorization Code](architecture#Authorization_Code) in combination with [Proof Key for Code Exchange](architecture#Proof_Key_for_Code_Exchange) for all web applications. + +> Make sure Authentication Method is set to `NONE` and the Application Type is set to `SPA` or `NATIVE`. + +#### Redirect URLs + +A redirect URL is a URL in your application where ZITADEL redirects the user after they have authenticated. Set your url to the domain the web app will be deployed to or use `localhost:4200` for development as Angular will be running on port 4200. + +> If you are following along with the sample project you downloaded from our templates, you should set the Allowed Callback URL to http://localhost:4200/auth/callback. You will also have to set dev mode to `true` as this will enable unsecure http for the moment. + +If you want to redirect the users back to a route on your application after they have logged out, add an optional redirect in the post redirectURI field. + +Continue and Create the application. + +#### Client ID and Secret + +After successful app creation a popup will appear showing you your clientID as well as a secret. +Copy your client ID as it will be needed in the next step. + +> Note: You will be able to regenerate the secret at a later time, though it is not needed for SPAs with Authorization Code Flow. diff --git a/site/docs/angular/02-code.md b/site/docs/angular/02-code.md new file mode 100644 index 0000000000..b2596a67d4 --- /dev/null +++ b/site/docs/angular/02-code.md @@ -0,0 +1,198 @@ +--- +title: Angular Setup +--- + +### Install Angular dependencies + +You need to install an oauth / oidc client to connect with ZITADEL. Run the following command: + +```bash +npm install angular-oauth2-oidc +``` + +This library helps integrating ZITADEL Authentication in your Angular Application. + +### Create and configure Auth Module + +Add the Auth module to your Angular imports in AppModule and setup the AuthConfig in a constant above. + +```ts +... +import { AuthConfig, OAuthModule } from 'angular-oauth2-oidc'; + +const authConfig: AuthConfig = { + clientId: 'YOUR CLIENT ID', + redirectUri: 'http://localhost:4200/auth/callback', // change this to your domain later or use window.location.origin. + scope: 'openid profile email', + responseType: 'code', + oidc: true, +}; + +@NgModule({ + declarations: [ + AppComponent, + SignedoutComponent, + ], + imports: [ + OAuthModule..forRoot(), +... +``` + +Set **openid**, **profile** and **email** as scope, **code** as responseType, and oidc to **true**. +Then create a Authentication Service to provide the functions to authenticate your user. + +You can use Angulars schematics to do so: + +``` bash +ng g component services/auth +``` +This will create an AuthService automatically for you. + +Copy the following code to your service. This code provides a function `authenticate()` which redirects the user to ZITADEL. After the user has logged in it will be redirected back to your redirectURI set in Auth Module and Console. Make sure both correspond, otherwise ZITADEL will throw an error. + +```ts +import { AuthConfig, OAuthService } from 'angular-oauth2-oidc'; + +export default class AuthService { + private authConfig!: AuthConfig; + private _authenticated: boolean = false; + private readonly _authenticationChanged: BehaviorSubject< + boolean + > = new BehaviorSubject(this.authenticated); + + constructor( + private oauthService: OAuthService, + private statehandler: StatehandlerService, + ) { } + + public get authenticated(): boolean { + return this._authenticated; + } + + public get authenticationChanged(): Observable { + return this._authenticationChanged; + } + + public getOIDCUser(): Observable { + return from(this.oauthService.loadUserProfile()); + } + + public async authenticate(): Promise { + this.oauthService.configure(this.authConfig); + + this.oauthService.strictDiscoveryDocumentValidation = false; + await this.oauthService.loadDiscoveryDocumentAndTryLogin(); + + this._authenticated = this.oauthService.hasValidAccessToken(); + + if (!this.oauthService.hasValidIdToken() || !this.authenticated || partialConfig || force) { + const newState = setState ? await this.statehandler.createState().toPromise() : undefined; + this.oauthService.initCodeFlow(newState); + } + this._authenticationChanged.next(this.authenticated); + + return this.authenticated; + } + + public signout(): void { + this.oauthService.logOut(); + this._authenticated = false; + this._authenticationChanged.next(false); + } +} +``` + +### Add Login in your application + +To login a user, a component or a guard is needed. + +- A component provides a button prompting the user to start the login flow. +`authenticate()` redirects your user to ZITADEL.ch for authentication. Upon successfull Authentication, ZITADEL will redirect the user back to your previously defined Redirect URL. + +- A guard can be setup to check if the user has a valid **Access Token** to proceed. This will check if the user has a stored **accesstoken** in storage or otherwise prompt the user to login. + +The use of this components totally depends on your application. In most cases you need both. + +To create a component use +``` bash +ng g component components/login +``` +and then inject the authService to call `authenticate()`. + +Same for the guard: +``` bash +ng g guard guards/auth +``` + +This code shows the AuthGuard used in our Console. + +```ts +import { AuthService } from 'src/app/services/auth.service'; + +@Injectable({ + providedIn: 'root', +}) +export class AuthGuard implements CanActivate { + constructor(private auth: AuthService) { } + + public canActivate( + _: ActivatedRouteSnapshot, + state: RouterStateSnapshot, + ): Observable | Promise | boolean { + if (!this.auth.authenticated) { + return this.auth.authenticate(); + } + return this.auth.authenticated; + } +} +``` + +it can easily be added to your RouterModule. + +```ts +... +const routes: Routes = [ + { + path: '', + loadChildren: () => import('./pages/home/home.module').then(m => m.HomeModule), + canActivate: [AuthGuard], + }, +... +``` + +### Add Logout in your application + +The authService and Library also provides a useful function for logging out your users. Just call `auth.signout()` to log out your user. Note that you can also configure your Logout Redirect URL if you want your Users to be redirected after logout. + +```ts +import { AuthService } from 'src/app/services/auth.service.ts'; + +export class SomeComponentWithLogout { + constructor(private authService: AuthService){} + + public signout(): Promise { + return this.authService.signout(); + } +} +``` + +### Show User Information + +To fetch user data, ZITADELS user info endpoint has to be called. This data contains sensitive information and artifacts related to your users identity and the scopes you defined in your Auth Config. +Our AuthService already includes a function called getOIDCUser(). You can call it whereever you need this information. + +```ts +import { AuthService } from 'src/app/services/auth.service.ts'; + +export class SomeComponentWithUserInfo { + constructor(public authService: AuthService){} +} +``` + +and in your html + +```html +
+

{{oidcInfo | json}}

+
+``` \ No newline at end of file diff --git a/site/docs/angular/03-end.md b/site/docs/angular/03-end.md new file mode 100644 index 0000000000..813951affe --- /dev/null +++ b/site/docs/angular/03-end.md @@ -0,0 +1,9 @@ +--- +title: Completion +--- + +### What next? + +You have successfully integrated ZITADEL in your Angular Application! Now you can proceed implementing our APIs to include Authorization. Refer to our [Docs](apis#Authentication_API) or checkout our Console Code on [Github](https://github.com/caos/zitadel) which is using GRPC to access data. + +For more information about creating an angular application we refer to [Angular](https://angular.io/start) and for more information about the used oauth/oidc library consider reading their docs at [angular-oauth2-oidc](https://github.com/manfredsteyer/angular-oauth2-oidc). \ No newline at end of file diff --git a/site/docs/develop/00-overview.en.md b/site/docs/apis/00-overview.md similarity index 95% rename from site/docs/develop/00-overview.en.md rename to site/docs/apis/00-overview.md index ec508cc0a8..8af2ffed13 100644 --- a/site/docs/develop/00-overview.en.md +++ b/site/docs/apis/00-overview.md @@ -3,6 +3,8 @@ title: Overview description: … --- + + > All documentations are under active work and subject to change soon! ### APIs diff --git a/site/docs/develop/01-authentication.en.md b/site/docs/apis/01-authentication.md similarity index 100% rename from site/docs/develop/01-authentication.en.md rename to site/docs/apis/01-authentication.md diff --git a/site/docs/develop/02-management.en.md b/site/docs/apis/02-management.md similarity index 100% rename from site/docs/develop/02-management.en.md rename to site/docs/apis/02-management.md diff --git a/site/docs/develop/03-administration.en.md b/site/docs/apis/03-administration.md similarity index 100% rename from site/docs/develop/03-administration.en.md rename to site/docs/apis/03-administration.md diff --git a/site/docs/documentation/00-overview.en.md b/site/docs/architecture/00-overview.md similarity index 83% rename from site/docs/documentation/00-overview.en.md rename to site/docs/architecture/00-overview.md index aab91c5dff..577cde7217 100644 --- a/site/docs/documentation/00-overview.en.md +++ b/site/docs/architecture/00-overview.md @@ -2,6 +2,8 @@ title: Overview --- + + > All documentations are under active work and subject to change soon! This part of the **ZITADEL** documentation comprises three major subject areas: diff --git a/site/docs/documentation/01-priciples.en.md b/site/docs/architecture/01-priciples.md similarity index 100% rename from site/docs/documentation/01-priciples.en.md rename to site/docs/architecture/01-priciples.md diff --git a/site/docs/documentation/02-architecture.en.md b/site/docs/architecture/02-architecture.md similarity index 99% rename from site/docs/documentation/02-architecture.en.md rename to site/docs/architecture/02-architecture.md index 9d7b986675..6921af9e96 100644 --- a/site/docs/documentation/02-architecture.en.md +++ b/site/docs/architecture/02-architecture.md @@ -97,3 +97,4 @@ With this design even the outage of a whole data-center would have a minimal imp
Multi-Cluster Architecture
+ diff --git a/site/docs/documentation/03-openidoauth.en.md b/site/docs/architecture/03-openidoauth.md similarity index 97% rename from site/docs/documentation/03-openidoauth.en.md rename to site/docs/architecture/03-openidoauth.md index 6f961bd1b8..3e22faaec0 100644 --- a/site/docs/documentation/03-openidoauth.en.md +++ b/site/docs/architecture/03-openidoauth.md @@ -3,22 +3,21 @@ title: OpenID Connect 1.0 & OAuth 2.0 --- ### Endpoints and Domains - This chapter documents the [OpenID Connect 1.0](https://openid.net/connect/) and [OAuth 2.0](https://oauth.net/2/) features provided by **ZITADEL**. Under normal circumstances **ZITADEL** need four domain names to operate properly. | Domain Name | Example | Description | |:------------|:----------------------|--------------------------------------------------------------------------------------------------------------------------------------| -| issuer | `issuer.zitadel.ch` | Provides the [OpenID Connect 1.0 Discovery Endpoint](#openid-connect-10-discovery) | -| api | `api.zitadel.ch` | All ZITADEL API's are located under this domain see [API explanation](develop#APIs) for details | +| issuer | `issuer.zitadel.ch` | Provides the [OpenID Connect 1.0 Discovery Endpoint](#OpenID_Connect_1_0_Discovery) | +| api | `api.zitadel.ch` | All ZITADEL API's are located under this domain see [API explanation](apis#APIs) for details | | login | `accounts.zitadel.ch` | The accounts.* page provides server renderer pages like login and register and as well the authorization_endpoint for OpenID Connect | | console | `console.zitadel.ch` | With the console.* domain we serve the assets for the management gui | #### OpenID Connect 1.0 Discovery The OpenID Connect Discovery Endpoint is located within the issuer domain. -For example with [zitadel.ch](zitadel.ch) this would be the domain [issuer.zitadel.ch](issuer.zitadel.ch). This would give us [https://issuer.zitadel.ch/.well-known/openid-configuration](https://issuer.zitadel.ch/.well-known/openid-configuration). +For example with [zitadel.ch](https://zitadel.ch), issuer.zitadel.ch would be the domain. This would give us [https://issuer.zitadel.ch/.well-known/openid-configuration](https://issuer.zitadel.ch/.well-known/openid-configuration). **Link to spec.** [OpenID Connect Discovery 1.0 incorporating errata set 1](https://openid.net/specs/openid-connect-discovery-1_0.html) @@ -50,7 +49,7 @@ For example with [zitadel.ch](zitadel.ch) this would be the domain [issuer.zitad #### OAuth 2.0 Metadata -**ZITADEL** does not yet provide a OAuth 2.0 Metadata endpoint but instead provides a [OpenID Connect Discovery Endpoint](#openid-connect-10-discovery). +**ZITADEL** does not yet provide a OAuth 2.0 Metadata endpoint but instead provides a [OpenID Connect Discovery Endpoint](#OpenID_Connect_1_0_Discovery). ### Scopes @@ -287,3 +286,4 @@ curl --request POST \ #### Security Assertion Markup Language (SAML) 2.0 Profile **Link to spec.** [Security Assertion Markup Language (SAML) 2.0 Profile for OAuth 2.0 Client Authentication and Authorization Grants](https://tools.ietf.org/html/rfc7522) + diff --git a/site/docs/aspnet/00-overview.md b/site/docs/aspnet/00-overview.md new file mode 100644 index 0000000000..1f8f346f8c --- /dev/null +++ b/site/docs/aspnet/00-overview.md @@ -0,0 +1,15 @@ +--- +title: ASP.NET Auth and Authz +description: ... +--- + +
+ zitadel + + aspnet +
+ + +> This quickstart is not yet released. Come back later! + +This Integration guide shows you the recommended way on how to integrate **ZITADEL** into your ASP NET Backend. diff --git a/site/docs/develop/00-overview.de.md b/site/docs/develop/00-overview.de.md deleted file mode 100644 index ee626691f2..0000000000 --- a/site/docs/develop/00-overview.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Übersicht -description: … ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/develop/01-authentication.de.md b/site/docs/develop/01-authentication.de.md deleted file mode 100644 index ee94e19c7b..0000000000 --- a/site/docs/develop/01-authentication.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Authentication API -description: … ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/develop/02-management.de.md b/site/docs/develop/02-management.de.md deleted file mode 100644 index 18adf5bf64..0000000000 --- a/site/docs/develop/02-management.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Management API -description: … ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/develop/03-administration.de.md b/site/docs/develop/03-administration.de.md deleted file mode 100644 index b6b59725b6..0000000000 --- a/site/docs/develop/03-administration.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Admin API -description: … ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/documentation/00-overview.de.md b/site/docs/documentation/00-overview.de.md deleted file mode 100644 index 6d9be1de6e..0000000000 --- a/site/docs/documentation/00-overview.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Übersicht ---- - -> This Language is not yet translated. Please consult the English version. \ No newline at end of file diff --git a/site/docs/documentation/01-priciples.de.md b/site/docs/documentation/01-priciples.de.md deleted file mode 100644 index 51456b6b62..0000000000 --- a/site/docs/documentation/01-priciples.de.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Prinzipien ---- - -- Seien Sie bei Ihren Entscheidungen transparent -- Zustandsloses Anwendungsdesign -- Das System der Aufzeichnungen ist der Ereignisspeicher -- Alles andere muss regeneriert werden können -- Versuchen Sie nicht, komplexe Probleme außerhalb des IAM-Bereichs zu lösen -- Verwenden Sie skalierbaren Speicher für den Ereignisspeicher und die Abfragemodelle -- Versuchen Sie, wenn immer möglich idempotent zu sein -- Reduzieren Sie die Notwendigkeit von System- oder externen Abhängigkeiten so weit wie möglich -- Automatisierung einbeziehen -- Zuerst die Design-API -- Optimieren Sie alle Komponenten für den Betrieb am zweiten Tag -- Verwenden Sie nur Open-Source-Projekte mit permissiven Lizenzen -- Rollen Sie nicht Ihre eigene Krypto -- Standard so weit wie möglich einbeziehen -- Nutzen Sie die Funktionen der Plattform -- Mit einem CDN und einer WAF laufen können diff --git a/site/docs/documentation/02-architecture.de.md b/site/docs/documentation/02-architecture.de.md deleted file mode 100644 index 3f807cab7e..0000000000 --- a/site/docs/documentation/02-architecture.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Architektur ---- - -> TBD diff --git a/site/docs/documentation/03-openidoauth.de.md b/site/docs/documentation/03-openidoauth.de.md deleted file mode 100644 index 98d47d61d8..0000000000 --- a/site/docs/documentation/03-openidoauth.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: OpenID Connect 1.0 & OAuth 2.0 ---- - -> TBD diff --git a/site/docs/export-log b/site/docs/export-log new file mode 100644 index 0000000000..8680b49e13 --- /dev/null +++ b/site/docs/export-log @@ -0,0 +1,78 @@ + 4.66 kB service-worker-index.html + 10.5 kB index.html + 1.15 kB icons/favicon.ico + 481 B manifest.json + 3.17 kB prism.css + 11.6 kB default-skin/default-skin.css + 14.8 kB client/client-48a0d285.css + 3.88 kB client/index-5d76bab7.css + 4.14 kB photoswipe.css + 33.9 kB client/client.ea30bda8.js + 559 B client/inject_styles.5607aec6.js + 18.1 kB client/index.6f1d050b.js + 5.54 kB start.json + 967 B quickstarts.json + 6.45 kB logos/zitadel-logo-light.svg + 8.3 kB logos/zitadel-logo-solo-darkdesign.svg + 18 kB start/index.html + 14.9 kB img/develop2.png + 10.1 kB img/projects2.png + 11.1 kB img/personal2.png + 7.96 kB quickstarts/index.html + 15.2 kB use/index.html + 22.8 kB apis/index.html + 73.1 kB img/accounts_org_register.png + 10.3 kB client/[slug]-3cb415b8.css + 1.52 kB client/index-4d174bf5.css + 20.7 kB client/[slug].aebb20dc.js + 4.16 kB client/index.c2043c63.js + 114 kB architecture/index.html + 207 kB img/accounts_password.png + 199 kB img/accounts_page.png + 899 B tech/angular.svg + 1.79 kB tech/dart.svg + 2.29 kB tech/golang.svg + 200 kB img/accounts_otp_verify.png + 21.3 kB img/zitadel_software_architecture.png + 10.4 kB img/zitadel_cluster_architecture.png + 184 kB administrate/index.html + 39 kB angular/index.html + 38.9 kB dart/index.html + 38.8 kB go/index.html + 7.37 kB img/zitadel_multicluster_architecture.png + 31 kB img/console_user_entry.png + 83.5 kB img/console_admin_entry.png + 167 kB img/console_admin_system.png + 129 kB img/console_org_domain_default.png + 126 kB img/console_org_domain_add.png + 142 kB img/console_org_domain_added.png + 126 kB img/console_user_personal_information.png + 135 kB img/console_org_domain_verify.png + 52.8 kB img/console_user_personal_info.png + 15 kB img/console_projects_empty.png + 40.2 kB img/console_projects_my_first_project.png + 40.7 kB img/console_org_domain_verified.png + 178 kB img/console_org_manage_roles_2.png + 129 kB img/console_org_manage_roles_1.png + 38.1 kB img/console_org_domain_verify_dns.png + 112 kB img/console_project_manage_roles_1.png + 19.5 kB img/console_clients_my_first_spa_wizard_1.png + 21.6 kB img/console_clients_my_first_spa_wizard_4.png + 22.3 kB img/console_clients_my_first_spa_wizard_3.png + 28.3 kB img/console_clients_my_first_spa_config.png + 27.1 kB img/console_user_list_search.png + 159 kB img/console_project_manage_roles_2.png + 25.2 kB img/console_user_list.png + 16.3 kB img/console_clients_my_first_spa_wizard_2.png + 38.8 kB img/console_authz_add_1.png + 77.2 kB administrate.json + 26.6 kB img/console_authz_overview.png + 186 kB img/console_user_manage_roles_1.png + 47.9 kB img/console_user_manage_roles_2.png + 110 kB img/console_user_create_done.png + 36.1 kB img/console_authz_add_2.png + 34.1 kB img/console_authz_add_3.png + 29.6 kB img/console_user_create_form.png + 6.53 kB apis.json + 142 kB img/console_iam_admin_failed.png + 167 kB img/console_iam_admin_views.png \ No newline at end of file diff --git a/site/docs/flutter/00-overview.md b/site/docs/flutter/00-overview.md new file mode 100644 index 0000000000..d4e370f3bf --- /dev/null +++ b/site/docs/flutter/00-overview.md @@ -0,0 +1,14 @@ +--- +title: Flutter Login +description: ... +--- + +
+ zitadel + + flutter +
+ +> This quickstart is not yet released. Come back later! + +This Integration guide shows you the recommended way on how to integrate **ZITADEL** into your Dart Application. diff --git a/site/docs/go/00-overview.md b/site/docs/go/00-overview.md new file mode 100644 index 0000000000..af5fafb423 --- /dev/null +++ b/site/docs/go/00-overview.md @@ -0,0 +1,15 @@ +--- +title: Dart Login +description: ... +--- + +
+ zitadel + + golang +
+ + +> This quickstart is not yet released. Come back later! + +This Integration guide shows you the recommended way on how to integrate **ZITADEL** into your Go Lang Backend. diff --git a/site/docs/integrate/00-overview.de.md b/site/docs/integrate/00-overview.de.md deleted file mode 100644 index 5057e686af..0000000000 --- a/site/docs/integrate/00-overview.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Übersicht -description: ... ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/integrate/01-singlepageapp.de.md b/site/docs/integrate/01-singlepageapp.de.md deleted file mode 100644 index 5766daed2d..0000000000 --- a/site/docs/integrate/01-singlepageapp.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Single Page Application -description: ... ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/integrate/02-serverapp.de.md b/site/docs/integrate/02-serverapp.de.md deleted file mode 100644 index 7fa8515343..0000000000 --- a/site/docs/integrate/02-serverapp.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Server Side Application -description: ... ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/integrate/03-mobileapp.de.md b/site/docs/integrate/03-mobileapp.de.md deleted file mode 100644 index 085e060c06..0000000000 --- a/site/docs/integrate/03-mobileapp.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Mobile Application -description: ... ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/integrate/04-nativeapp.de.md b/site/docs/integrate/04-nativeapp.de.md deleted file mode 100644 index a96998467d..0000000000 --- a/site/docs/integrate/04-nativeapp.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Native Application -description: ... ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/integrate/05-proxy.de.md b/site/docs/integrate/05-proxy.de.md deleted file mode 100644 index 5a605d7965..0000000000 --- a/site/docs/integrate/05-proxy.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Proxy / WAF -description: ... ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/integrate/06-api.de.md b/site/docs/integrate/06-api.de.md deleted file mode 100644 index a4961d6a29..0000000000 --- a/site/docs/integrate/06-api.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: API -description: ... ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/integrate/07-products.de.md b/site/docs/integrate/07-products.de.md deleted file mode 100644 index 9eaf2a9817..0000000000 --- a/site/docs/integrate/07-products.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Products -description: ... ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/oauth2-proxy/00-overview.md b/site/docs/oauth2-proxy/00-overview.md new file mode 100644 index 0000000000..165e1bbe86 --- /dev/null +++ b/site/docs/oauth2-proxy/00-overview.md @@ -0,0 +1,13 @@ +--- +title: OAuth 2.0 Proxy +--- + +
+ zitadel + + oauth2-proxy +
+ +### OAuth2 Proxy Project + +[OAuth2-proxy](https://github.com/oauth2-proxy/oauth2-proxy) is a project which allows services to delegate the authentication flow to a IDP, for example **ZITADEL** \ No newline at end of file diff --git a/site/docs/oauth2-proxy/01-configure-zitadel.md b/site/docs/oauth2-proxy/01-configure-zitadel.md new file mode 100644 index 0000000000..5a763fdb71 --- /dev/null +++ b/site/docs/oauth2-proxy/01-configure-zitadel.md @@ -0,0 +1,29 @@ +--- +title: Configure Zitadel +--- + +### Setup Application and get Keys + +Before we can start building our application we have do do a few configuration steps in ZITADEL Console. +You will need to provide some information about your app. We recommend creating a new app to start from scratch. Navigate to your [Project](https://console.zitadel.ch/projects) and add a new application at the top of the page. +Select Web Application and continue. +We recommend that you use [Authorization Code](architecture#Authorization_Code) for the OAuth 2.0 Proxy. + +> Make sure Authentication Method is set to `BASIC` and the Application Type is set to `Web`. + +#### Redirect URLs + +A redirect URL is a URL in your application where ZITADEL redirects the user after they have authenticated. Set your url to the domain the proxy will be deployed to or use the default one `http://127.0.0.1:4180/oauth2/callback`. + +> If you are following along with the sample project you downloaded from our templates, you should set the Allowed Callback URL to http://localhost:4200/auth/callback. You will also have to set dev mode to `true` as this will enable unsecure http for the moment. + +If you want to redirect the users back to a route on your application after they have logged out, add an optional redirect in the post redirectURI field. + +Continue and Create the application. + +#### Client ID and Secret + +After successful app creation a popup will appear showing you your clientID as well as a secret. +Copy your client ID and Secrets as it will be needed in the next step. + +> Note: You will be able to regenerate the secret at a later time if you loose it. diff --git a/site/docs/oauth2-proxy/02-configure-proxy.md b/site/docs/oauth2-proxy/02-configure-proxy.md new file mode 100644 index 0000000000..7d515b76a1 --- /dev/null +++ b/site/docs/oauth2-proxy/02-configure-proxy.md @@ -0,0 +1,28 @@ +--- +title: OAuth 2.0 Proxy Setup +--- + +### Authentication Example + +```toml +provider = "oidc" +user_id_claim = "sub" #uses the subject as ID instead of the email +provider_display_name = "ZITADEL" +redirect_url = "http://127.0.0.1:4180/oauth2/callback" +oidc_issuer_url = "https://issuer.zitadel.ch" +upstreams = [ + "https://example.corp.com" +] +email_domains = [ + "*" +] +client_id = "{ZITADEL_GENERATED_CLIENT_ID}" +client_secret = "{ZITADEL_GENERATED_CLIENT_SECRET}" +pass_access_token = true +cookie_secret = "{SUPPLY_SOME_SECRET_HERE}" +skip_provider_button = true +cookie_secure = false #localdev only false +http_address = "127.0.0.1:4180" #localdev only +``` + +> This was tested with version `oauth2-proxy v6.1.1 (built with go1.14.2)` \ No newline at end of file diff --git a/site/docs/oauth2-proxy/03-end.md b/site/docs/oauth2-proxy/03-end.md new file mode 100644 index 0000000000..ede964b4d7 --- /dev/null +++ b/site/docs/oauth2-proxy/03-end.md @@ -0,0 +1,7 @@ +--- +title: Completion +--- + +### What next? + +You have successfully integrated ZITADEL in your proxy! \ No newline at end of file diff --git a/site/docs/integrate/00-overview.en.md b/site/docs/quickstarts/00-overview.md similarity index 67% rename from site/docs/integrate/00-overview.en.md rename to site/docs/quickstarts/00-overview.md index 6dcc0a212f..b549f3d610 100644 --- a/site/docs/integrate/00-overview.en.md +++ b/site/docs/quickstarts/00-overview.md @@ -13,4 +13,4 @@ This Integration guide gives you recommendations on how to integrate different C - Native App - Reverse Proxy -For more details about how **ZITADEL** treats [scopes](documentation#Scopes) and [claims](documentation#Claims) see the [documentations](documentation). +For more details about how **ZITADEL** treats [scopes](architecture#Scopes) and [claims](architecture#Claims) see the [documentations](architecture). diff --git a/site/docs/integrate/01-singlepageapp.en.md b/site/docs/quickstarts/01-singlepageapp.md similarity index 91% rename from site/docs/integrate/01-singlepageapp.en.md rename to site/docs/quickstarts/01-singlepageapp.md index 4617f720a6..063f8a8d69 100644 --- a/site/docs/integrate/01-singlepageapp.en.md +++ b/site/docs/quickstarts/01-singlepageapp.md @@ -5,7 +5,7 @@ description: ... ### SPA Protocol and Flow recommendation -If your [client](administrate#Clients) is a single page application (SPA) we recommend that you use [Authorization Code](documentation#Authorization_Code) in combination with [Proof Key for Code Exchange](documentation#Proof_Key_for_Code_Exchange). +If your [client](administrate#Clients) is a single page application (SPA) we recommend that you use [Authorization Code](architecture#Authorization_Code) in combination with [Proof Key for Code Exchange](architecture#Proof_Key_for_Code_Exchange). This flow has great support with most modern languages and frameworks and is the recommended default. diff --git a/site/docs/integrate/02-serverapp.en.md b/site/docs/quickstarts/02-serverapp.md similarity index 100% rename from site/docs/integrate/02-serverapp.en.md rename to site/docs/quickstarts/02-serverapp.md diff --git a/site/docs/integrate/03-mobileapp.en.md b/site/docs/quickstarts/03-mobileapp.md similarity index 100% rename from site/docs/integrate/03-mobileapp.en.md rename to site/docs/quickstarts/03-mobileapp.md diff --git a/site/docs/integrate/04-nativeapp.en.md b/site/docs/quickstarts/04-nativeapp.md similarity index 100% rename from site/docs/integrate/04-nativeapp.en.md rename to site/docs/quickstarts/04-nativeapp.md diff --git a/site/docs/integrate/05-proxy.en.md b/site/docs/quickstarts/05-proxy.md similarity index 100% rename from site/docs/integrate/05-proxy.en.md rename to site/docs/quickstarts/05-proxy.md diff --git a/site/docs/integrate/06-api.en.md b/site/docs/quickstarts/06-api.md similarity index 100% rename from site/docs/integrate/06-api.en.md rename to site/docs/quickstarts/06-api.md diff --git a/site/docs/integrate/07-products.en.md b/site/docs/quickstarts/07-products.md similarity index 100% rename from site/docs/integrate/07-products.en.md rename to site/docs/quickstarts/07-products.md diff --git a/site/docs/start/00-quick-start.de.md b/site/docs/start/00-quick-start.de.md deleted file mode 100644 index 8f73dcc2f8..0000000000 --- a/site/docs/start/00-quick-start.de.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Schnellstart -description: ... ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/start/00-quick-start.en.md b/site/docs/start/00-quick-start.en.md deleted file mode 100644 index 0dc659a15d..0000000000 --- a/site/docs/start/00-quick-start.en.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Quick-Start -description: A quick-start reference for the impatient reader. ---- - -> All documentations are under active work and subject to change soon! - -### Trying out ZITADEL - -You can either use our cloud-instance [ZITADEL.ch](https://zitadel.ch) or deploy a dedicated **ZITADEL** instance. To get started, we recommend you try out our free tier on [ZITADEL.ch](https://zitadel.ch). - -### Use ZITADEL.ch - -To use ZITADEL in your project you need to: -1. Set up a new [client](administrate#What_are_clients) and [users](administrate#What_are_users) in our [Console](administrate#What_is_Console); -2. Configure your project to use ZITADEL. - -To register your free [organisation](administrate#Organisations), visit this link [register organisation](https://accounts.zitadel.ch/register/org). -After accepting the TOS and filling out all the required fields you will receive an email with further instructions. - - - -#### Verify your domain name (optional) - -When you verify your domain you get the benefit that your [organisations](administrate#Organisations) [users](administrate#Users) can use this domain as **preferred logonname**. You find a more detailed explanation [How ZITADEL handles usernames](administrate#How_ZITADEL_handles_usernames). - -The verification process is documented [here](administrate#Verify_a_domain_name) - -#### Add Users to your organisation - -To add new user just follow [this guide](administrate#Create_Users) - -#### Setup an application - -First [create a project](administrate#Create_a_project) - -Then create within this [project](administrate#Projects) a [new client](administrate#Create_a_client) - -The wizard should provide some guidance what client is the proper for you. If you are still unsure consult our [Integration Guide](integrate#Overview) - -### Use ORBOS to install ZITADEL - -> This will be added later on - -### Install ZITADEL with static manifest - -> This will be added later on diff --git a/site/docs/start/00-quick-start.md b/site/docs/start/00-quick-start.md new file mode 100644 index 0000000000..9c746c50b0 --- /dev/null +++ b/site/docs/start/00-quick-start.md @@ -0,0 +1,19 @@ +--- +title: Welcome to ZITADEL +description: A quick-start reference for the impatient reader. +--- + +Most applications need to know the identity of a user allowing to securely store user data in the cloud and provide the same personalised experience across all of the user's devices. + +ZITADEL's authentication provides backend services, easy-to-use SDKs, and ready-made UI libraries to authenticate users in your application. It supports authentication using passwords and applies additional security with the help of a second factor, for example OTP, to ensure a safe and secure access. +It additionally leverages industry standards like OAuth 2.0 and OpenID Connect such that it can be easily integrated in your custom backend. + +This documentation demonstrates the different installation methods of ZITADEL and provides a quick start guide on how to register your organization as well as creating your first project. + +> All documentations are under active work and subject to change soon! + +## Trying out ZITADEL + +### Installation Types + +You can either use our cloud-instance [zitadel.ch](https://zitadel.ch) or deploy a dedicated **ZITADEL** instance. To get started, we recommend you to try out our free tier first. diff --git a/site/docs/start/01-zitadel-ch.md b/site/docs/start/01-zitadel-ch.md new file mode 100644 index 0000000000..77e310a694 --- /dev/null +++ b/site/docs/start/01-zitadel-ch.md @@ -0,0 +1,39 @@ +--- +title: ZITADEL.ch +description: A quick-start reference to use our cloud instance zitadel.ch +--- + +### Use cloud instance zitadel.ch + +To create a ZITADEL project, you have to register as an organization first. Click [here](https://accounts.zitadel.ch/register/org) to register. +You will receive an email prompting you to verify your mail. +Then go to your [Console Projects](https://console.zitadel.ch/projects) view and create a new project. + + + +Now you can proceed adding [users](administrate#What_are_users) to your organization as well as integrating your applications. We refer to our administration [documentation](administrate#What_are_clients) as well as our [quickstarts](quickstarts) to do so. + +#### Verify your domain name (optional) + +If you verify a domain you get the benefit that your organisations users can use this domain as the **preferred logonname**. You find a more detailed explanation on [how ZITADEL handles usernames](administrate#How_ZITADEL_handles_usernames) here. +The verification process is documented [here](administrate#Verify_a_domain_name) + +#### Elect Managers + +ZITADEL allows you to give other users control over ZITADEL Console itself. This can be restricted to some kind of write and/or read. This can be especially useful for directing administration over several users. You can have managers able to edit project settings and others able to create/add users only. +Read the [administration](administrate#ZITADEL_Roles) guide for more information. + +> Note: ZITADEL Managers are always located on the right sidepanel of console. + +#### Integrating an application + +After creating your project you can start integrating your applications. +After choosing your [project](https://console.zitadel.ch/projects) add a client application on the top of the page. +The wizard should provide some guidance what client is the proper for you. If you are still unsure consult our [Quickstart Guides](quickstarts). diff --git a/site/docs/start/02-orbos.md b/site/docs/start/02-orbos.md new file mode 100644 index 0000000000..e7f23c5292 --- /dev/null +++ b/site/docs/start/02-orbos.md @@ -0,0 +1,7 @@ +--- +title: ORBOS +--- + +### Use ORBOS to install ZITADEL + +> This will be added later on \ No newline at end of file diff --git a/site/docs/start/03-static-manifest.md b/site/docs/start/03-static-manifest.md new file mode 100644 index 0000000000..feefa24eb4 --- /dev/null +++ b/site/docs/start/03-static-manifest.md @@ -0,0 +1,7 @@ +--- +title: Static Manifest +--- + +### Install ZITADEL with static manifest + +> This will be added later on diff --git a/site/docs/use/00-user.de.md b/site/docs/use/00-user.de.md deleted file mode 100644 index 2fee90e9dd..0000000000 --- a/site/docs/use/00-user.de.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Benutzerhandbuch ---- - -> This Language is not yet translated. Please consult the English version. diff --git a/site/docs/use/00-user.en.md b/site/docs/use/00-user.md similarity index 94% rename from site/docs/use/00-user.en.md rename to site/docs/use/00-user.md index 3e96eae4f4..e429fe62d3 100644 --- a/site/docs/use/00-user.en.md +++ b/site/docs/use/00-user.md @@ -2,6 +2,8 @@ title: User Manual --- + + > All documentations are under active work and subject to change soon! ### Self Register User diff --git a/site/docs/vue/00-overview.md b/site/docs/vue/00-overview.md new file mode 100644 index 0000000000..ee5ab402cc --- /dev/null +++ b/site/docs/vue/00-overview.md @@ -0,0 +1,15 @@ +--- +title: Vue Login and User Endpoint +description: ... +--- + +
+ zitadel + + vue +
+ + +> This quickstart is not yet released. Come back later! + +This Integration guide shows you the recommended way on how to integrate **ZITADEL** into your Vue Frontend Application. diff --git a/site/package-lock.json b/site/package-lock.json index b30c52905d..175d547d4e 100644 --- a/site/package-lock.json +++ b/site/package-lock.json @@ -1187,14 +1187,6 @@ "to-fast-properties": "^2.0.0" } }, - "@formatjs/ecma402-abstract": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.5.0.tgz", - "integrity": "sha512-wXv36yo+mfWllweN0Fq7sUs7PUiNopn7I0JpLTe3hGu6ZMR4CV7LqK1llhB18pndwpKoafQKb1et2DCJAOW20Q==", - "requires": { - "tslib": "^2.0.1" - } - }, "@polka/send": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@polka/send/-/send-0.4.0.tgz", @@ -1206,9 +1198,9 @@ "integrity": "sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==" }, "@rollup/plugin-babel": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.2.2.tgz", - "integrity": "sha512-MjmH7GvFT4TW8xFdIeFS3wqIX646y5tACdxkTO+khbHvS3ZcVJL6vkAHLw2wqPmkhwCfWHoNsp15VYNwW6JEJA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.2.3.tgz", + "integrity": "sha512-DOMc7nx6y5xFi86AotrFssQqCen6CxYn+zts5KSI879d4n1hggSb4TH3mjVgG17Vc3lZziWWfcXzrEmVdzPMdw==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.10.4", @@ -1216,9 +1208,9 @@ } }, "@rollup/plugin-commonjs": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.0.0.tgz", - "integrity": "sha512-/omBIJG1nHQc+bgkYDuLpb/V08QyutP9amOrJRUSlYJZP+b/68gM//D8sxJe3Yry2QnYIr3QjR3x4AlxJEN3GA==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", + "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -1240,9 +1232,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.0.1.tgz", - "integrity": "sha512-ltlsj/4Bhwwhb+Nb5xCz/6vieuEj2/BAkkqVIKmZwC7pIdl8srmgmglE4S0jFlZa32K4qvdQ6NHdmpRKD/LwoQ==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.1.1.tgz", + "integrity": "sha512-zlBXR4eRS+2m79TsUZWhsd0slrHUYdRx4JF+aVQm+MI0wsKdlpC2vlDVjmlGvtZY1vsefOT9w3JxvmWSBei+Lg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -1284,17 +1276,6 @@ "magic-string": "^0.25.7" } }, - "@rollup/plugin-url": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-url/-/plugin-url-6.0.0.tgz", - "integrity": "sha512-UHGyoo3EbLufCZtXon/baNf75PAYT+Gs/NUgFMx2ZaDQ314PKNP0pJTrpbhDqFkZADzpkqJWyQOfJ2Nd6Qk4TA==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "make-dir": "^3.1.0", - "mime": "^2.4.6" - } - }, "@rollup/pluginutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", @@ -1495,6 +1476,17 @@ } } }, + "clipboard": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", + "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1516,6 +1508,12 @@ "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", "dev": true }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", @@ -1601,7 +1599,8 @@ "deepmerge": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true }, "define-properties": { "version": "1.1.3", @@ -1612,10 +1611,11 @@ "object-keys": "^1.0.12" } }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true }, "electron-to-chromium": { "version": "1.3.633", @@ -1674,9 +1674,10 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "estree-walker": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.1.tgz", - "integrity": "sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "esutils": { "version": "2.0.3", @@ -1684,11 +1685,6 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "fast-memoize": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", - "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1696,9 +1692,9 @@ "dev": true }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", + "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", "dev": true, "optional": true }, @@ -1745,21 +1741,20 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, - "globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==" - }, - "globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==" - }, "golden-fleece": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/golden-fleece/-/golden-fleece-1.0.9.tgz", "integrity": "sha512-YSwLaGMOgSBx9roJlNLL12c+FRiw7VECphinc6mGucphc/ZxTHgdEz6gmJqH6NOzYEd/yr64hwjom5pZ+tJVpg==" }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -1817,14 +1812,6 @@ "param-case": "^2.1.1", "relateurl": "^0.2.7", "uglify-js": "^3.5.1" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } } }, "http-link-header": { @@ -1849,25 +1836,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "intl-messageformat": { - "version": "9.3.20", - "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-9.3.20.tgz", - "integrity": "sha512-jmpjYHE076J/0CIofrPhtUC4LfmsAhuv4JMQxytl2KJd2bim+3+gQJh+Z1vyHUzcj4fIHdt388ZGchb8f0NwOA==", - "requires": { - "fast-memoize": "^2.5.2", - "intl-messageformat-parser": "6.0.18", - "tslib": "^2.0.1" - } - }, - "intl-messageformat-parser": { - "version": "6.0.18", - "resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-6.0.18.tgz", - "integrity": "sha512-vLjACEunfi5uSUCWFLOR4PXQ9DGLpED3tM7o9zsYsOvjl0VIheoxyG0WZXnsnhn+S+Zu158M6CkuHXeNZfKRRg==", - "requires": { - "@formatjs/ecma402-abstract": "1.5.0", - "tslib": "^2.0.1" - } - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -2033,27 +2001,10 @@ "sourcemap-codec": "^1.4.4" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, "marked": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.7.tgz", - "integrity": "sha512-No11hFYcXr/zkBvL6qFmAp1z6BKY3zqLMHny/JN/ey+al7qwCM2+CMBL9BOgqMxZU36fz4cCWfn2poWIf7QRXA==" + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.8.tgz", + "integrity": "sha512-lzmFjGnzWHkmbk85q/ILZjFoHHJIQGF+SxGEfIdGk/XhiTPhqGs37gbru6Kkd48diJnEyYwnG67nru0Z2gQtuQ==" }, "matchit": { "version": "1.1.0", @@ -2076,9 +2027,9 @@ "dev": true }, "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.0.tgz", + "integrity": "sha512-ft3WayFSFUVBuJj7BMLKAQcSlItKtfjsKDDsii3rqFDAZ7t11zRe8ASw/GlmivGwVUYtwkQrxiGGpL6gFvB0ag==" }, "mime-db": { "version": "1.44.0", @@ -2108,11 +2059,6 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "mri": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", - "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2284,6 +2230,14 @@ "trouter": "^2.0.1" } }, + "prismjs": { + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.23.0.tgz", + "integrity": "sha512-c29LVsqOaLbBHuIbsTxaKENh1N2EQBOHaWv7gkHN4dgRbxSREqDnDbtFJYdpPauS4YCplMSNCABQ6Eeor69bAA==", + "requires": { + "clipboard": "^2.0.0" + } + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -2394,23 +2348,22 @@ } }, "rollup": { - "version": "2.35.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.35.1.tgz", - "integrity": "sha512-q5KxEyWpprAIcainhVy6HfRttD9kutQpHbeqDTWnqAFNJotiojetK6uqmcydNMymBEtC4I8bCYR+J3mTMqeaUA==", + "version": "2.38.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.38.4.tgz", + "integrity": "sha512-B0LcJhjiwKkTl79aGVF/u5KdzsH8IylVfV56Ut6c9ouWLJcUK17T83aZBetNYSnZtXf2OHD4+2PbmRW+Fp5ulg==", "dev": true, "requires": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.1" } }, "rollup-plugin-svelte": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-6.1.1.tgz", - "integrity": "sha512-ijnm0pH1ScrY4uxwaNXBpNVejVzpL2769hIEbAlnqNUWZrffLspu5/k9/l/Wsj3NrEHLQ6wCKGagVJonyfN7ow==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz", + "integrity": "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==", "dev": true, "requires": { "require-relative": "^0.8.7", - "rollup-pluginutils": "^2.8.2", - "sourcemap-codec": "^1.4.8" + "rollup-pluginutils": "^2.8.2" } }, "rollup-plugin-terser": { @@ -2442,14 +2395,6 @@ } } }, - "sade": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", - "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", - "requires": { - "mri": "^1.1.0" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -2477,6 +2422,12 @@ } } }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -2514,15 +2465,15 @@ "dev": true }, "shimport": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/shimport/-/shimport-2.0.4.tgz", - "integrity": "sha512-5YOyQqYkOFSkPFnpS87De6BYzDiZBc8FS4/aTuGZiST+WmXSwWRoaNRHqyVOeEpSx9wlgYWg9WYfCuzD/11/qA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/shimport/-/shimport-2.0.5.tgz", + "integrity": "sha512-H2FeQyImK4CFhGG1wVhHEB1hASWz+WQK6t2gMP5lk+b0PW30XSrsryDONDBwF1n6hBKsmbr0REfTinaNdEkcPQ==", "dev": true }, "sirv": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.10.tgz", - "integrity": "sha512-H5EZCoZaggEUQy8ocKsF7WAToGuZhjJlLvM3XOef46CbdIgbNeQ1p32N1PCuCjkVYwrAVOSMacN6CXXgIzuspg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.11.tgz", + "integrity": "sha512-SR36i3/LSWja7AJNRBz4fF/Xjpn7lQFI30tZ434dIy+bitLYSP+ZEenHg36i23V2SGEz+kqjksg0uOGZ5LPiqg==", "requires": { "@polka/url": "^1.0.0-next.9", "mime": "^2.3.1", @@ -2694,24 +2645,11 @@ } }, "svelte": { - "version": "3.31.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.31.0.tgz", - "integrity": "sha512-r+n8UJkDqoQm1b+3tA3Lh6mHXKpcfOSOuEuIo5gE2W9wQYi64RYX/qE6CZBDDsP/H4M+N426JwY7XGH4xASvGQ==", + "version": "3.32.1", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.32.1.tgz", + "integrity": "sha512-j1KmD2ZOU0RGq1/STDXjwfh0/eJ/Deh2NXyuz1bpR9eOcz9yImn4CGxXdbSAN7cMTm9a7IyPUIbuBCzu/pXK0g==", "dev": true }, - "svelte-i18n": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/svelte-i18n/-/svelte-i18n-3.3.0.tgz", - "integrity": "sha512-2pIfd4G8QfB87udPugt6g2Wl/qZ0kIB60+nQKHdon7d7aFzY5qsYT2NqQgK7dnVO2Gu0R8i2kSsNzsaVSk5UsA==", - "requires": { - "deepmerge": "^4.2.2", - "dlv": "^1.1.3", - "estree-walker": "^2.0.1", - "intl-messageformat": "^9.3.15", - "sade": "^1.7.4", - "tiny-glob": "^0.2.6" - } - }, "terser": { "version": "5.3.8", "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.8.tgz", @@ -2737,14 +2675,11 @@ } } }, - "tiny-glob": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.8.tgz", - "integrity": "sha512-vkQP7qOslq63XRX9kMswlby99kyO5OvKptw7AMwBVMjXEI7Tb61eoI5DydyEMOseyGS5anDN1VPoVxEvH01q8w==", - "requires": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true }, "to-fast-properties": { "version": "2.0.0", @@ -2765,15 +2700,10 @@ "matchit": "^1.0.0" } }, - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" - }, "uglify-js": { - "version": "3.11.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.11.5.tgz", - "integrity": "sha512-btvv/baMqe7HxP7zJSF7Uc16h1mSfuuSplT0/qdjxseesDU+yYzH33eHBH+eMdeRXwujXspaCTooWHQVVBh09w==", + "version": "3.12.6", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.12.6.tgz", + "integrity": "sha512-aqWHe3DfQmZUDGWBbabZ2eQnJlQd1fKlMUu7gV+MiTuDzdgDw31bI3wA2jLLsV/hNcDP26IfyEgSVoft5+0SVw==", "dev": true }, "unicode-canonical-property-names-ecmascript": { diff --git a/site/package.json b/site/package.json index 723238fa1c..fb837018aa 100644 --- a/site/package.json +++ b/site/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "sapper dev", "build": "sapper build --legacy", - "export": "sapper export --legacy", + "export": "sapper export --legacy --concurrent 1", "start": "node __sapper__/build", "cy:run": "cypress run", "cy:open": "cypress open", @@ -17,11 +17,11 @@ "@sindresorhus/slugify": "^1.1.0", "compression": "^1.7.4", "golden-fleece": "^1.0.9", - "highlight.js": "^10.3.1", - "marked": "^1.2.2", + "highlight.js": "^10.5.0", + "marked": "^1.2.8", "polka": "^0.5.2", - "svelte-i18n": "^3.1.0", - "sirv": "^1.0.7" + "prismjs": "^1.23.0", + "sirv": "^1.0.11" }, "devDependencies": { "@babel/core": "^7.12.3", @@ -29,17 +29,16 @@ "@babel/plugin-transform-runtime": "^7.9.0", "@babel/preset-env": "^7.12.1", "@babel/runtime": "^7.12.1", - "@rollup/plugin-babel": "^5.0.0", - "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-babel": "^5.2.3", + "@rollup/plugin-commonjs": "^17.1.0", "@rollup/plugin-json": "^4.0.3", - "@rollup/plugin-node-resolve": "^11.0.1", + "@rollup/plugin-node-resolve": "^11.1.1", "@rollup/plugin-replace": "^2.2.0", - "@rollup/plugin-url": "^6.0.0", "npm-run-all": "^4.1.5", - "rollup": "^2.32.1", - "rollup-plugin-svelte": "^6.1.0", + "rollup": "^2.38.4", + "rollup-plugin-svelte": "^7.0.0", "rollup-plugin-terser": "^7.0.2", "sapper": "^0.28.10", - "svelte": "^3.31.0" + "svelte": "^3.32.1" } } diff --git a/site/quickstarts/000-vue.md b/site/quickstarts/000-vue.md new file mode 100644 index 0000000000..783e955038 --- /dev/null +++ b/site/quickstarts/000-vue.md @@ -0,0 +1,13 @@ +--- +title: Vue +subtitle: Web Apps +img: tech/vue.svg +date: 29 January 2021 +readingtime: 5min +route: vue +visible: false +--- + +This Integration guide shows you our recommended way on how to integrate **ZITADEL** into your Vue Application. +It demonstrates how to add a user login and fetch some data from the user info endpoint. +This Guide is using our [Vue]() template app as reference \ No newline at end of file diff --git a/site/quickstarts/100-angular.md b/site/quickstarts/100-angular.md new file mode 100644 index 0000000000..b304934ec3 --- /dev/null +++ b/site/quickstarts/100-angular.md @@ -0,0 +1,13 @@ +--- +title: Angular +subtitle: Web Apps +img: tech/angular.svg +date: 29 January 2021 +readingtime: 6min +route: angular +visible: true +--- + + +This Integration guide shows you the recommended way on how to integrate **ZITADEL** into your Angular Application. +It demonstrates how to add a user login and fetch some data from the user info endpoint. \ No newline at end of file diff --git a/site/quickstarts/200-flutter.md b/site/quickstarts/200-flutter.md new file mode 100644 index 0000000000..f8840159c8 --- /dev/null +++ b/site/quickstarts/200-flutter.md @@ -0,0 +1,12 @@ +--- +title: Dart / Flutter +subtitle: Native Apps +img: tech/flutter.svg +date: 29 January 2021 +readingtime: 15min +route: flutter +visible: false +--- + +This Integration guide shows you the recommended way on how to integrate **ZITADEL** into your Flutter Application. +This guide is using the Flutter framework and contains additional info on how to configure Android as well as IOS Apps. \ No newline at end of file diff --git a/site/quickstarts/300-go.md b/site/quickstarts/300-go.md new file mode 100644 index 0000000000..8dfde8556d --- /dev/null +++ b/site/quickstarts/300-go.md @@ -0,0 +1,12 @@ +--- +title: Go +subtitle: Backend +img: tech/golang.svg +date: 29 January 2021 +readingtime: 5min +route: go +visible: true +--- + + +This Integration guide shows you the recommended way on how to integrate **ZITADEL** into your Go Backend. diff --git a/site/quickstarts/400-aspnet.md b/site/quickstarts/400-aspnet.md new file mode 100644 index 0000000000..96e50ac5ec --- /dev/null +++ b/site/quickstarts/400-aspnet.md @@ -0,0 +1,12 @@ +--- +title: ASP.NET +subtitle: Backend +img: tech/net.svg +date: 29 January 2021 +readingtime: 5min +route: aspnet +visible: true +--- + +This Integration guide shows you how to access **ZITADEL** for authentication and authorization in your ASP.NET Backend. +This Guide is based on our [ZITADEL NET](https://github.com/caos/zitadel-net) Library. diff --git a/site/quickstarts/500-OAuth2-Proxy.md b/site/quickstarts/500-OAuth2-Proxy.md new file mode 100644 index 0000000000..0d48f73df3 --- /dev/null +++ b/site/quickstarts/500-OAuth2-Proxy.md @@ -0,0 +1,11 @@ +--- +title: OAuth2 Proxy +subtitle: Proxy +img: tech/oauth2-proxy.svg +date: 08 February 2021 +readingtime: 3min +route: oauth2-proxy +visible: true +--- + +With this quickstart you will learn how to use a OAuth 2.0 Proxy in conjuction with **ZITADEL**. \ No newline at end of file diff --git a/site/rollup.config.js b/site/rollup.config.js index 418d18cdcd..1c9969307e 100644 --- a/site/rollup.config.js +++ b/site/rollup.config.js @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/no-named-as-default import babel from '@rollup/plugin-babel'; import commonjs from '@rollup/plugin-commonjs'; import json from '@rollup/plugin-json'; @@ -13,20 +14,10 @@ const mode = process.env.NODE_ENV; const dev = mode === 'development'; const legacy = !!process.env.SAPPER_LEGACY_BUILD; -const onwarn = (warning, onwarn) => { - if ( - (warning.code === 'CIRCULAR_DEPENDENCY' && - /[/\\]@sapper[/\\]/.test(warning.message)) - ) { - return; - } - - if (warning.code === 'THIS_IS_UNDEFINED') { - return; - } - +const onwarn = (warning, onwarn) => + (warning.code === 'MISSING_EXPORT' && /'preload'/.test(warning.message)) || + (warning.code === 'CIRCULAR_DEPENDENCY' && /[/\\]@sapper[/\\]/.test(warning.message)) || onwarn(warning); -}; export default { client: { @@ -38,9 +29,10 @@ export default { 'process.env.NODE_ENV': JSON.stringify(mode) }), svelte({ - dev, - hydratable: true, - emitCss: true + compilerOptions: { + dev, + hydratable: true + } }), resolve({ browser: true, @@ -68,11 +60,11 @@ export default { !dev && terser({ module: true }), - json() ], + preserveEntrySignatures: false, - onwarn, + onwarn }, server: { @@ -84,8 +76,12 @@ export default { 'process.env.NODE_ENV': JSON.stringify(mode) }), svelte({ - generate: 'ssr', - dev + compilerOptions: { + dev, + generate: 'ssr', + hydratable: true + }, + emitCss: false }), resolve({ dedupe: ['svelte'] @@ -96,8 +92,9 @@ export default { external: Object.keys(pkg.dependencies).concat( require('module').builtinModules || Object.keys(process.binding('natives')) ), + preserveEntrySignatures: 'strict', - onwarn, + onwarn }, serviceworker: { @@ -110,9 +107,11 @@ export default { 'process.env.NODE_ENV': JSON.stringify(mode) }), commonjs(), + // json(), !dev && terser() ], + preserveEntrySignatures: false, - onwarn, - }, -}; + onwarn + } +}; \ No newline at end of file diff --git a/site/src/client.js b/site/src/client.js index fb03b5816a..3964c2e1cf 100644 --- a/site/src/client.js +++ b/site/src/client.js @@ -2,13 +2,6 @@ import '../static/base.css'; import * as sapper from '@sapper/app'; -import { startClient } from './i18n.js'; -import { initPhotoSwipeFromDOM } from './utils/photoswipe.js'; - -startClient(); - -initPhotoSwipeFromDOM('.zitadel-gallery'); - sapper.start({ target: document.querySelector('#sapper') -}); +}); \ No newline at end of file diff --git a/site/src/components/CodeTable.svelte b/site/src/components/CodeTable.svelte deleted file mode 100644 index 3ad524cdd8..0000000000 --- a/site/src/components/CodeTable.svelte +++ /dev/null @@ -1,121 +0,0 @@ - - - - -
- - - - -
- {#each tabs as { lang, content }, i} -
- {content} -
- {/each} -
-
diff --git a/site/src/components/Docs.svelte b/site/src/components/Docs.svelte index e1b6bf5fb6..d2b000fed8 100644 --- a/site/src/components/Docs.svelte +++ b/site/src/components/Docs.svelte @@ -1,8 +1,7 @@ - - - -
- zitadel logo - - -
- - -
- - More about ZITADEL - -
- -{#if menuOpen} - -{/if} \ No newline at end of file diff --git a/site/src/components/GuideContents.svelte b/site/src/components/GuideContents.svelte index f0eb4157a1..9ad418312f 100644 --- a/site/src/components/GuideContents.svelte +++ b/site/src/components/GuideContents.svelte @@ -1,8 +1,7 @@ - - - - - -
- {#each LANGUAGES as lang} - - {/each} -
diff --git a/site/src/components/Nav.svelte b/site/src/components/Nav.svelte index 7a3486076a..afbffed6b9 100644 --- a/site/src/components/Nav.svelte +++ b/site/src/components/Nav.svelte @@ -1,17 +1,28 @@ {#if external} - +
  • {:else} - + {#if prefetch} +
  • + {:else} +
  • + {/if} {/if} \ No newline at end of file diff --git a/site/src/components/SearchSelector.svelte b/site/src/components/SearchSelector.svelte index 84dc42b055..daf89ecfa4 100644 --- a/site/src/components/SearchSelector.svelte +++ b/site/src/components/SearchSelector.svelte @@ -1,6 +1,5 @@ + +
    -
    + + \ No newline at end of file diff --git a/site/src/routes/index.svelte b/site/src/routes/index.svelte index 3d38b01757..8aa75e8570 100644 --- a/site/src/routes/index.svelte +++ b/site/src/routes/index.svelte @@ -1,33 +1,11 @@ - - @@ -193,165 +149,124 @@ ZITADEL • Documentation - {$_('title')} - + ZITADEL • Documentation + - - + + - - + + - -
    -
    - -

    {$_('languagealsoavailable')}: - {#each LANGUAGES as lang} - {#if lang != $locale} - {lang == 'de'? 'Deutsch (WIP)' : 'English'} - {/if} - {/each} -

    -
    -

    {$_('title')}

    -

    {$_('description')}

    -

    {$_('description2')}

    -

    {$_('description3')}

    +

    ZITADEL Identity and Access Management

    +

    Most applications need to know the identity of a user allowing to securely store user data in the cloud and provide the same personalised experience across all of the user's devices.

    +

    ZITADEL's authentication provides backend services, easy-to-use SDKs, and ready-made UI libraries to authenticate users in your application. It supports authentication using passwords and applies additional security with the help of a second factor, for example OTP, to ensure a safe and secure access.

    +

    ZITADEL's authentication leverages industry standards like OAuth 2.0 and OpenID Connect so that it can be easily integrated in your custom backend.

    caos logo
    -

    {$_('startlink')}

    -

    {$_('startlink_desc')}

    +

    Follow this guide to get started with ZITADEL in general.

    - - - {#if $locale == 'en'} - - {:else if $locale == 'de'} - - {/if}
    -

    {$_('integratelink')}

    -

    {$_('integratelink_desc')}

    - {$_('learnmore')} +

    Quickstarts

    +

    Learn how to integrate your applications and build secure workflows and APIs with ZITADEL

    - {#if $locale == 'en'} -

    {$_('inthissection')}

    - - {/if} +
    + react + angular + flutter + golang + aspnet +
    + Learn more + +

    In this section

    +
    - Develop
    -

    {$_('administratelink')}

    -

    {$_('administratelink_desc')}

    - {$_('learnmore')} +

    Administration

    +

    Learn how to manage your data and role associations in ZITADEL

    + Learn more -

    {$_('inthissection')}

    +

    In this section

    - {#if $locale == 'en'} - - {:else if $locale == 'de'} - - {/if} -
    - Develop -
    - -
    -
    -

    {$_('developlink')}

    -

    {$_('developlink_desc')}

    - {$_('learnmore')} - -

    {$_('inthissection')}

    - - {#if $locale == 'en'} - - {:else if $locale == 'de'} - - {/if} +
    -

    {$_('docslink')}

    -

    {$_('docslink_desc')}

    - {$_('learnmore')} +

    APIs

    + +

    Learn more about our APIs and how to integrate them in your apps.

    + Learn more -

    {$_('inthissection')}

    - {#if $locale == 'en'} - - {:else if $locale == 'de'} - - {/if} +

    In this section

    + +
    -

    {$_('uselink')}

    -

    {$_('uselink_desc')}

    - {$_('learnmore')} -
    +

    Architecture and Technologies

    + +

    Learn more about engineering and design principles, ZITADELs architecture and used technologies.

    + Learn more - Develop +

    In this section

    + +
    +
    + +
    +
    +

    User Manuals

    + + +

    Follow this guide to get started with ZITADEL as a user.

    + Learn more +
    diff --git a/site/src/routes/quickstarts/_quickstarts.js b/site/src/routes/quickstarts/_quickstarts.js new file mode 100644 index 0000000000..350f64f698 --- /dev/null +++ b/site/src/routes/quickstarts/_quickstarts.js @@ -0,0 +1,59 @@ +import fs from 'fs'; +import marked from 'marked'; +import path from 'path'; + +import { SLUG_PRESERVE_UNICODE } from '../../../config'; +import { highlight } from '../../utils/highlight'; +import { extract_frontmatter, link_renderer } from '../../utils/markdown.js'; +import { makeSlugProcessor } from '../../utils/slug'; + +const makeSlug = makeSlugProcessor(SLUG_PRESERVE_UNICODE); + +export default function get_quickstarts() { + return fs + .readdirSync('quickstarts') + .map(file => { + if (path.extname(file) !== '.md') return; + + const match = /^([0-9]+)-(.+)\.md$/.exec(file); + if (!match) throw new Error(`Invalid filename '${file}'`); + + const [, order, slug] = match; + + const markdown = fs.readFileSync(`quickstarts/${file}`, 'utf-8'); + + const { content, metadata } = extract_frontmatter(markdown); + + const renderer = new marked.Renderer(); + + renderer.link = link_renderer; + + renderer.code = highlight; + + renderer.heading = (text, level, rawtext) => { + const fragment = makeSlug(rawtext); + + return ` + + + + ${text} + `; + }; + + const answer = marked( + content.replace(/^\t+/gm, match => match.split('\t').join(' ')), + { renderer } + ); + + const fragment = makeSlug(slug); + + return { + fragment, + order, + answer, + metadata + }; + }) + .sort((a, b) => a.order - b.order); +} \ No newline at end of file diff --git a/site/src/routes/quickstarts/index.json.js b/site/src/routes/quickstarts/index.json.js new file mode 100644 index 0000000000..5faf96cf79 --- /dev/null +++ b/site/src/routes/quickstarts/index.json.js @@ -0,0 +1,25 @@ +import send from '@polka/send'; + +import get_quickstarts from './_quickstarts.js'; + +let json; + +export function get(req, res) { + if (!json || process.env.NODE_ENV !== 'production') { + const qss = get_quickstarts() + .map(qs => { + return { + fragment: qs.fragment, + answer: qs.answer, + metadata: qs.metadata + }; + }); + + json = JSON.stringify(qss); + } + + send(res, 200, json, { + 'Content-Type': 'application/json', + 'Cache-Control': `max-age=${5 * 60 * 1e3}` // 5 minutes + }); +} \ No newline at end of file diff --git a/site/src/routes/quickstarts/index.svelte b/site/src/routes/quickstarts/index.svelte new file mode 100644 index 0000000000..f0c30fe92a --- /dev/null +++ b/site/src/routes/quickstarts/index.svelte @@ -0,0 +1,154 @@ + + + + + + Quickstarts ZITADEL + + + + + + +
    +

    Quickstarts ZITADEL

    + {#each qss as qs} + {#if qs.metadata.visible == 'true'} +
    +
    +

    {qs.metadata.subtitle}

    +

    + + + {qs.metadata.title} +

    +

    {@html qs.answer}

    + Read Quickstart +

    {qs.metadata.date} • {qs.metadata.readingtime}

    +
    + article img +
    + {/if} + {/each} +

    See also our Github page ZITADEL for questions regarding the sourcecode.

    + + \ No newline at end of file diff --git a/site/src/server.js b/site/src/server.js index e874066b47..d0e4e1d61f 100644 --- a/site/src/server.js +++ b/site/src/server.js @@ -3,8 +3,6 @@ import compression from 'compression'; import polka from 'polka'; import sirv from 'sirv'; -import { i18nMiddleware } from './i18n.js'; - const { PORT, NODE_ENV } = process.env; const dev = NODE_ENV === 'development'; @@ -12,7 +10,6 @@ polka() .use( compression({ threshold: 0 }), sirv('static', { dev }), - i18nMiddleware(), sapper.middleware() ) .listen(PORT, err => { diff --git a/site/src/service-worker.js b/site/src/service-worker.js index 54c62e2718..fad33e5256 100644 --- a/site/src/service-worker.js +++ b/site/src/service-worker.js @@ -1,5 +1,6 @@ -import { files, routes, shell, timestamp } from '@sapper/service-worker'; +import { files, shell, timestamp } from '@sapper/service-worker'; +// eslint-disable-next-line import/no-unresolved const ASSETS = `cache${timestamp}`; // `shell` is an array of all the files generated by the bundler, @@ -51,12 +52,12 @@ self.addEventListener('fetch', event => { // for pages, you might want to serve a shell `service-worker-index.html` file, // which Sapper has generated for you. It's not right for every // app, but if it's right for yours then uncomment this section - - // if (url.origin === self.origin && routes.find(route => route.pattern.test(url.pathname))) { - // event.respondWith(caches.match('/service-worker-index.html')); - // return; - // } - + /* + if (url.origin === self.origin && routes.find(route => route.pattern.test(url.pathname))) { + event.respondWith(caches.match('/service-worker-index.html')); + return; + } + */ if (event.request.cache === 'only-if-cached') return; @@ -79,4 +80,4 @@ self.addEventListener('fetch', event => { } }) ); -}); +}); \ No newline at end of file diff --git a/site/src/template.html b/site/src/template.html index 86f49fa5da..8da09bfbf7 100644 --- a/site/src/template.html +++ b/site/src/template.html @@ -98,7 +98,7 @@ + initialise the router --> %sapper.scripts% diff --git a/site/src/utils/generate_code_tabs.js b/site/src/utils/generate_code_tabs.js deleted file mode 100644 index d404310ab4..0000000000 --- a/site/src/utils/generate_code_tabs.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function generate_code_tabs(dirpath, dir) { - -} \ No newline at end of file diff --git a/site/src/utils/generate_docs.js b/site/src/utils/generate_docs.js index 572507daeb..739801951c 100644 --- a/site/src/utils/generate_docs.js +++ b/site/src/utils/generate_docs.js @@ -20,18 +20,16 @@ const block_types = [ 'tablecell' ]; -export default function generate_docs(dirpath, dir, lang) { +export default function generate_docs(dirpath, dir) { const make_slug = make_session_slug_processor({ separator: SLUG_SEPARATOR, preserve_unicode: SLUG_PRESERVE_UNICODE }); - console.log('using language: ' + lang); - return fs .readdirSync(`${dirpath}${dir}`) .filter((file) => { - return file[0] !== '.' && path.extname(file) === '.md' && file.endsWith(`.${lang}.md`); + return file[0] !== '.' && path.extname(file) === '.md' && file.endsWith(`.md`); }) .map((file) => { const markdown = fs.readFileSync(`${dirpath}${dir}/${file}`, 'utf-8'); @@ -45,7 +43,7 @@ export default function generate_docs(dirpath, dir, lang) { renderer.link = link_renderer; - renderer.hr = (str) => { + renderer.hr = () => { block_open = true; return '
    '; @@ -65,7 +63,9 @@ export default function generate_docs(dirpath, dir, lang) { }; renderer.code = (source, lang) => { - source = source.replace(/^ +/gm, (match) => match.split(' ').join('\t')); + source = source.replace(/^ +/gm, match => + match.split(' ').join('\t') + ); const lines = source.split('\n'); @@ -90,6 +90,11 @@ export default function generate_docs(dirpath, dir, lang) { const plang = langs[lang]; const { value: highlighted } = hljs.highlight(lang, source); + // const highlighted = PrismJS.highlight( + // source, + // PrismJS.languages[plang], + // lang + // ); const html = `
    ${prefix}
    ${highlighted}
    `; @@ -101,16 +106,17 @@ export default function generate_docs(dirpath, dir, lang) { return html; }; - // const slugger = new marked.Slugger(); renderer.heading = (text, level, rawtext) => { const slug = level <= 4 && make_slug(rawtext); if (level === 3 || level === 4) { - const title = text.replace(/<\/?code>/g, '').replace(/\.(\w+)(\((.+)?\))?/, (m, $1, $2, $3) => { - if ($3) return `.${$1}(...)`; - if ($2) return `.${$1}()`; - return `.${$1}`; - }); + const title = text + .replace(/<\/?code>/g, '') + .replace(/\.(\w+)(\((.+)?\))?/, (m, $1, $2, $3) => { + if ($3) return `.${$1}(...)`; + if ($2) return `.${$1}()`; + return `.${$1}`; + }); subsections.push({ slug, title, level }); } @@ -118,12 +124,12 @@ export default function generate_docs(dirpath, dir, lang) { return ` 4 ? 'data-scrollignore' : ''}> - + ${text} `; }; - block_types.forEach((type) => { + block_types.forEach(type => { const fn = renderer[type]; renderer[type] = function () { return fn.apply(this, arguments); @@ -141,4 +147,4 @@ export default function generate_docs(dirpath, dir, lang) { file }; }); -} +} \ No newline at end of file diff --git a/site/src/utils/generate_seo.js b/site/src/utils/generate_seo.js index 5663f4110d..d7490fc3d0 100644 --- a/site/src/utils/generate_seo.js +++ b/site/src/utils/generate_seo.js @@ -1,8 +1,8 @@ import fs from 'fs'; -export default function generate_docs(dirpath, dir, lang) { +export default function generate_seo(dirpath, dir) { try { - return fs.readFileSync(`${dirpath}${dir}/seo_${lang}.html`, 'utf-8'); + return fs.readFileSync(`${dirpath}${dir}/seo.html`, 'utf-8'); } catch (error) { return ''; } diff --git a/site/src/utils/highlight.js b/site/src/utils/highlight.js new file mode 100644 index 0000000000..21e803d5c7 --- /dev/null +++ b/site/src/utils/highlight.js @@ -0,0 +1,16 @@ +import 'prismjs/components/prism-bash'; + +import PrismJS from 'prismjs'; + +import { langs } from './markdown.js'; + +export function highlight(source, lang) { + const plang = langs[lang] || ''; + const highlighted = plang ? PrismJS.highlight( + source, + PrismJS.languages[plang], + lang + ) : source.replace(/[&<>]/g, c => ({ '&': '&', '<': '<', '>': '>' })[c]); + + return `
    ${highlighted}
    `; +} \ No newline at end of file diff --git a/site/src/utils/language_extractor.js b/site/src/utils/language_extractor.js deleted file mode 100644 index c561ff02fd..0000000000 --- a/site/src/utils/language_extractor.js +++ /dev/null @@ -1,21 +0,0 @@ -import fs from 'fs'; -import path from 'path'; - -export default function extract_languages(dirpath, dir) { - - const detectedLocales = fs.readdirSync(`${dirpath}${dir}`) - .filter(file => path.extname(file) == '.md') - .map((file) => { - file = file.replace(path.extname(file), ''); - const arr = file.split('.'); - const locale = arr.length ? arr[arr.length - 1] : null; - if (locale) { - return locale; - } - }).filter(locale => locale !== null); - - const redDetectedLocales = [...new Set(detectedLocales)]; - - console.log('detected locales: ' + redDetectedLocales); - return redDetectedLocales; -} diff --git a/site/src/utils/photoswipe.js b/site/src/utils/photoswipe.js index 191d7eaaaf..02a7f52662 100644 --- a/site/src/utils/photoswipe.js +++ b/site/src/utils/photoswipe.js @@ -22,7 +22,8 @@ export function initPhotoSwipeFromDOM(gallerySelector) { linkEl = figureEl.children[0]; // element - size = linkEl.getAttribute('data-size').split('x'); + const dataSize = linkEl.getAttribute('data-size'); + size = dataSize ? dataSize.split('x') : '1920x1080'.split('x'); // create slide object item = { diff --git a/site/src/utils/slug.js b/site/src/utils/slug.js index e68511b4a3..65bf103601 100644 --- a/site/src/utils/slug.js +++ b/site/src/utils/slug.js @@ -1,68 +1,66 @@ import slugify from '@sindresorhus/slugify'; -export const SLUG_PRESERVE_UNICODE = false; -export const SLUG_SEPARATOR = '_'; +import { SLUG_SEPARATOR } from '../../config'; /* url-safe processor */ -export const urlsafeSlugProcessor = (string, opts) => { - const { separator = SLUG_SEPARATOR } = opts || {}; - - return slugify(string, { - customReplacements: [ - // runs before any other transformations +export const urlsafeSlugProcessor = string => + slugify(string, { + customReplacements: [ // runs before any other transformations ['$', 'DOLLAR'], // `$destroy` & co ['-', 'DASH'] // conflicts with `separator` ], - separator, + separator: SLUG_SEPARATOR, decamelize: false, lowercase: false }) .replace(/DOLLAR/g, '$') .replace(/DASH/g, '-'); -}; /* unicode-preserver processor */ const alphaNumRegex = /[a-zA-Z0-9]/; const unicodeRegex = /\p{Letter}/u; -const isNonAlphaNumUnicode = (string) => !alphaNumRegex.test(string) && unicodeRegex.test(string); +const isNonAlphaNumUnicode = + string => !alphaNumRegex.test(string) && unicodeRegex.test(string); -export const unicodeSafeProcessor = (string, opts) => { - const { separator = SLUG_SEPARATOR } = opts || {}; +export const unicodeSafeProcessor = string => + string.split('') + .reduce((accum, char, index, array) => { + const type = isNonAlphaNumUnicode(char) ? 'pass' : 'process'; - return string - .split('') - .reduce( - (accum, char, index, array) => { - const type = isNonAlphaNumUnicode(char) ? 'pass' : 'process'; + if (index === 0) { + accum.current = { type, string: char }; + } else if (type === accum.current.type) { + accum.current.string += char; + } else { + accum.chunks.push(accum.current); + accum.current = { type, string: char }; + } - if (index === 0) { - accum.current = { type, string: char }; - } else if (type === accum.current.type) { - accum.current.string += char; - } else { - accum.chunks.push(accum.current); - accum.current = { type, string: char }; - } + if (index === array.length - 1) { + accum.chunks.push(accum.current); + } - if (index === array.length - 1) { - accum.chunks.push(accum.current); - } - - return accum; - }, - { chunks: [], current: { type: '', string: '' } } - ) - .chunks.reduce((accum, chunk) => { - const processed = chunk.type === 'process' ? urlsafeSlugProcessor(chunk.string) : chunk.string; + return accum; + }, { chunks: [], current: { type: '', string: '' } }) + .chunks + .reduce((accum, chunk) => { + const processed = chunk.type === 'process' + ? urlsafeSlugProcessor(chunk.string) + : chunk.string; processed.length > 0 && accum.push(processed); return accum; }, []) - .join(separator); -}; + .join(SLUG_SEPARATOR); + +/* processor */ + +export const makeSlugProcessor = (preserveUnicode = false) => preserveUnicode + ? unicodeSafeProcessor + : urlsafeSlugProcessor; /* session processor */ @@ -78,7 +76,6 @@ export const make_session_slug_processor = ({ if (seen.has(slug)) throw new Error(`Duplicate slug ${slug}`); seen.add(slug); - return slug; }; }; diff --git a/site/static/base.css b/site/static/base.css index 2bd6886965..4e64846c56 100644 --- a/site/static/base.css +++ b/site/static/base.css @@ -180,7 +180,8 @@ ul { .b, b, strong { - font-weight: 600; + font-weight: 600; + color: white; } tt, @@ -193,8 +194,9 @@ samp { code { position: relative; border-radius: .3em; - white-space: nowrap; - color: var(--text); + white-space: nowrap; + font-size: var(--h6); + /* color: var(--text); */ -webkit-font-smoothing: initial; font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; } @@ -223,7 +225,7 @@ li:not(.white) > h2 { blockquote { position: relative; margin: 1.6rem 0 2.4rem; - padding: 2rem 2.4rem 1.8rem 2.4rem; + padding: 1rem 2.4rem 1rem 2.4rem; border-radius: var(--border-r); font-family: var(--font); max-width: var(--linemax); @@ -326,11 +328,6 @@ a:hover { color: var(--flash); } -a:hover { - padding: 0; - border-bottom: 2px solid currentColor; -} - a.no-underline { border-bottom: none; padding: 0; @@ -405,7 +402,7 @@ td, th { text-align: left; border-bottom: 1px solid #eee; - padding: 0.4rem 0.8rem 0.4rem 0; + padding: 4px 8px 4px 0; } td[align='right'] { @@ -594,10 +591,12 @@ input[type="checkbox"]:checked::after { .zitadel-gallery img { width: 100%; object-fit: contain; + border-radius: 4px; } .zitadel-gallery figure { flex-basis: 30%; object-fit: contain; margin: 5px 5px 5px 0; width: 150px; + border-radius: 4px; } diff --git a/site/static/img/accounts_org_register.png b/site/static/img/accounts_org_register.png deleted file mode 100644 index 0bf4e4a5aa..0000000000 Binary files a/site/static/img/accounts_org_register.png and /dev/null differ diff --git a/site/static/img/accounts_org_register_light.png b/site/static/img/accounts_org_register_light.png new file mode 100644 index 0000000000..da6ba44f0c Binary files /dev/null and b/site/static/img/accounts_org_register_light.png differ diff --git a/site/static/tech/android.svg b/site/static/tech/android.svg new file mode 100644 index 0000000000..3eb806f93b --- /dev/null +++ b/site/static/tech/android.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/static/tech/angular.svg b/site/static/tech/angular.svg new file mode 100644 index 0000000000..96301efe1b --- /dev/null +++ b/site/static/tech/angular.svg @@ -0,0 +1,16 @@ + + + + + + + + + + diff --git a/site/static/tech/aspnet.png b/site/static/tech/aspnet.png new file mode 100644 index 0000000000..274660b1e1 Binary files /dev/null and b/site/static/tech/aspnet.png differ diff --git a/site/static/tech/dart.svg b/site/static/tech/dart.svg new file mode 100644 index 0000000000..bdb580ec2b --- /dev/null +++ b/site/static/tech/dart.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/site/static/tech/flutter.svg b/site/static/tech/flutter.svg new file mode 100644 index 0000000000..b65f8527ee --- /dev/null +++ b/site/static/tech/flutter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/static/tech/golang.svg b/site/static/tech/golang.svg new file mode 100644 index 0000000000..8164d5589e --- /dev/null +++ b/site/static/tech/golang.svg @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/site/static/tech/net.svg b/site/static/tech/net.svg new file mode 100644 index 0000000000..2bea1985a9 --- /dev/null +++ b/site/static/tech/net.svg @@ -0,0 +1 @@ +layer1 \ No newline at end of file diff --git a/site/static/tech/oauth2-proxy.svg b/site/static/tech/oauth2-proxy.svg new file mode 100644 index 0000000000..4df740f6d3 --- /dev/null +++ b/site/static/tech/oauth2-proxy.svg @@ -0,0 +1 @@ +OAuth2_Proxy_logo_v3 \ No newline at end of file diff --git a/site/static/tech/react.png b/site/static/tech/react.png new file mode 100644 index 0000000000..430e213a0f Binary files /dev/null and b/site/static/tech/react.png differ diff --git a/site/static/tech/vue.svg b/site/static/tech/vue.svg new file mode 100644 index 0000000000..a1d285eb2a --- /dev/null +++ b/site/static/tech/vue.svg @@ -0,0 +1,2 @@ + +