@syndew/oluso-account-ui 0.0.0-stage → 1.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,76 @@
1
+ Oluso Community License v1.0
2
+ Copyright (c) 2025-2026 Syndew Technology Ltd. All rights reserved.
3
+
4
+ TERMS AND CONDITIONS
5
+
6
+ 1. GRANT OF LICENSE
7
+
8
+ Subject to the terms of this license, Syndew Technology Ltd ("Licensor")
9
+ grants you a non-exclusive, worldwide, royalty-free license to use, copy,
10
+ modify, and distribute this software, provided that:
11
+
12
+ a) You include this license and copyright notice in all copies
13
+ b) You comply with the Commercial Use restrictions below
14
+
15
+ 2. COMMUNITY USE (FREE)
16
+
17
+ The core identity server is FREE for:
18
+
19
+ - Personal projects and learning
20
+ - Open source projects
21
+ - Non-profit organizations
22
+ - Educational and academic use
23
+ - Evaluation and testing
24
+ - Small businesses and startups (see eligibility at https://oluso.io/license)
25
+
26
+ 3. ENTERPRISE ADD-ONS (LICENSED)
27
+
28
+ The following features require a separate license:
29
+
30
+ - SAML 2.0 (Identity Provider and Service Provider)
31
+ - SCIM 2.0 (User and group provisioning)
32
+ - LDAP Server (Legacy application support)
33
+
34
+ Enterprise add-on pricing: https://oluso.io/pricing
35
+
36
+ 4. COMMERCIAL LICENSE REQUIRED
37
+
38
+ A commercial license is REQUIRED if:
39
+
40
+ - Your organization exceeds the community use thresholds (varies by region)
41
+ - You offer this software as a hosted/managed service to third parties
42
+ - You want to remove attribution requirements
43
+
44
+ To check eligibility or obtain a commercial license:
45
+ Visit: https://oluso.io/license
46
+ Contact: license@oluso.io
47
+
48
+ 5. CONTRIBUTIONS
49
+
50
+ We welcome community contributions! By submitting a pull request or issue,
51
+ you agree that your contribution will be licensed under the same terms as
52
+ this license, and you grant Syndew Technology Ltd the right to use your
53
+ contribution in both open source and commercial versions.
54
+
55
+ 6. ATTRIBUTION
56
+
57
+ If you use this software, you must:
58
+
59
+ - Retain all copyright notices
60
+ - Include a visible attribution to "Powered by Oluso" in your application
61
+ (this requirement is waived for commercial license holders)
62
+
63
+ 7. NO WARRANTY
64
+
65
+ THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
66
+ IMPLIED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES, OR
67
+ OTHER LIABILITY ARISING FROM THE USE OF THIS SOFTWARE.
68
+
69
+ 8. TERMINATION
70
+
71
+ This license terminates automatically if you violate any of its terms.
72
+
73
+ ---
74
+
75
+ Full license terms and FAQs: https://oluso.io/license
76
+ Questions: license@oluso.io
package/README.md CHANGED
@@ -1,3 +1,29 @@
1
- # Temporary Holding Version
1
+ # @syndew/oluso-account-ui
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ The Oluso account portal as an Angular library: the self-service pages where users manage their own profile, password, security settings and sessions.
4
+
5
+ Mount it in your own Angular app, replace its landing page through the `ACCOUNT_LANDING_COMPONENT` token, or add pages with account plugins (`@syndew/oluso-plugin-fido2` adds passkeys).
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install @syndew/oluso-account-ui
11
+ ```
12
+
13
+ Peer dependencies (npm installs them with the package): `@angular/common`, `@angular/core`, `@angular/forms`, `@angular/router`, `angular-auth-oidc-client`, `rxjs`, `@syndew/oluso-auth`, `@syndew/oluso-ui-core`.
14
+
15
+ ## Use
16
+
17
+ ```ts
18
+ import { provideRouter } from '@angular/router';
19
+ import { ACCOUNT_ROUTES, provideAccountAuth } from '@syndew/oluso-account-ui';
20
+
21
+ providers: [provideRouter(ACCOUNT_ROUTES), provideAccountAuth()]
22
+ ```
23
+
24
+ At runtime the portal reads `window.__OLUSO_CONFIG__` (from a `config.js` next to `index.html`) for the server URL. The `account-standalone` app in the repository is a complete example.
25
+
26
+ ## Links
27
+
28
+ - [Oluso on GitHub](https://github.com/SyndewTech/Oluso)
29
+ - [Hosting the portals](https://github.com/SyndewTech/Oluso/blob/main/docs/docker.md)
@@ -0,0 +1,73 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, Component } from '@angular/core';
3
+ import { RouterLink } from '@angular/router';
4
+ import { OidcSecurityService } from 'angular-auth-oidc-client';
5
+
6
+ class UnauthorizedPageComponent {
7
+ oidcService = inject(OidcSecurityService);
8
+ logout() {
9
+ this.oidcService.logoff().subscribe();
10
+ }
11
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: UnauthorizedPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.25", type: UnauthorizedPageComponent, isStandalone: true, selector: "app-unauthorized-page", ngImport: i0, template: `
13
+ <div class="min-h-screen flex items-center justify-center bg-gray-50">
14
+ <div class="max-w-md w-full text-center p-8">
15
+ <div class="mx-auto h-16 w-16 rounded-full bg-red-100 flex items-center justify-center mb-6">
16
+ <svg class="h-8 w-8 text-red-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
17
+ <path stroke-linecap="round" stroke-linejoin="round" d="M18.364 18.364A9 9 0 0 0 5.636 5.636m12.728 12.728A9 9 0 0 1 5.636 5.636m12.728 12.728L5.636 5.636" />
18
+ </svg>
19
+ </div>
20
+ <h1 class="text-2xl font-bold text-gray-900 mb-2">Access Denied</h1>
21
+ <p class="text-gray-600 mb-6">You don't have permission to access this page. Contact your administrator if you believe this is an error, or sign out and try with a different account.</p>
22
+ <div class="flex items-center justify-center gap-3">
23
+ <a routerLink="/profile" class="inline-flex items-center px-4 py-2 text-sm font-medium text-white bg-primary-600 rounded-md hover:bg-primary-700">
24
+ Go to Profile
25
+ </a>
26
+ <button
27
+ type="button"
28
+ (click)="logout()"
29
+ class="inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50"
30
+ >
31
+ Sign out
32
+ </button>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ `, isInline: true, dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] });
37
+ }
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: UnauthorizedPageComponent, decorators: [{
39
+ type: Component,
40
+ args: [{
41
+ selector: 'app-unauthorized-page',
42
+ standalone: true,
43
+ imports: [RouterLink],
44
+ template: `
45
+ <div class="min-h-screen flex items-center justify-center bg-gray-50">
46
+ <div class="max-w-md w-full text-center p-8">
47
+ <div class="mx-auto h-16 w-16 rounded-full bg-red-100 flex items-center justify-center mb-6">
48
+ <svg class="h-8 w-8 text-red-600" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
49
+ <path stroke-linecap="round" stroke-linejoin="round" d="M18.364 18.364A9 9 0 0 0 5.636 5.636m12.728 12.728A9 9 0 0 1 5.636 5.636m12.728 12.728L5.636 5.636" />
50
+ </svg>
51
+ </div>
52
+ <h1 class="text-2xl font-bold text-gray-900 mb-2">Access Denied</h1>
53
+ <p class="text-gray-600 mb-6">You don't have permission to access this page. Contact your administrator if you believe this is an error, or sign out and try with a different account.</p>
54
+ <div class="flex items-center justify-center gap-3">
55
+ <a routerLink="/profile" class="inline-flex items-center px-4 py-2 text-sm font-medium text-white bg-primary-600 rounded-md hover:bg-primary-700">
56
+ Go to Profile
57
+ </a>
58
+ <button
59
+ type="button"
60
+ (click)="logout()"
61
+ class="inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50"
62
+ >
63
+ Sign out
64
+ </button>
65
+ </div>
66
+ </div>
67
+ </div>
68
+ `,
69
+ }]
70
+ }] });
71
+
72
+ export { UnauthorizedPageComponent };
73
+ //# sourceMappingURL=syndew-oluso-account-ui-unauthorized-page.component-M-w0eNbc.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"syndew-oluso-account-ui-unauthorized-page.component-M-w0eNbc.mjs","sources":["../../../../libs/account-ui/src/lib/pages/unauthorized/unauthorized-page.component.ts"],"sourcesContent":["import { Component, inject } from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { OidcSecurityService } from 'angular-auth-oidc-client';\n\n@Component({\n selector: 'app-unauthorized-page',\n standalone: true,\n imports: [RouterLink],\n template: `\n <div class=\"min-h-screen flex items-center justify-center bg-gray-50\">\n <div class=\"max-w-md w-full text-center p-8\">\n <div class=\"mx-auto h-16 w-16 rounded-full bg-red-100 flex items-center justify-center mb-6\">\n <svg class=\"h-8 w-8 text-red-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M18.364 18.364A9 9 0 0 0 5.636 5.636m12.728 12.728A9 9 0 0 1 5.636 5.636m12.728 12.728L5.636 5.636\" />\n </svg>\n </div>\n <h1 class=\"text-2xl font-bold text-gray-900 mb-2\">Access Denied</h1>\n <p class=\"text-gray-600 mb-6\">You don't have permission to access this page. Contact your administrator if you believe this is an error, or sign out and try with a different account.</p>\n <div class=\"flex items-center justify-center gap-3\">\n <a routerLink=\"/profile\" class=\"inline-flex items-center px-4 py-2 text-sm font-medium text-white bg-primary-600 rounded-md hover:bg-primary-700\">\n Go to Profile\n </a>\n <button\n type=\"button\"\n (click)=\"logout()\"\n class=\"inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50\"\n >\n Sign out\n </button>\n </div>\n </div>\n </div>\n `,\n})\nexport class UnauthorizedPageComponent {\n private readonly oidcService = inject(OidcSecurityService);\n\n logout(): void {\n this.oidcService.logoff().subscribe();\n }\n}\n"],"names":[],"mappings":";;;;;MAkCa,yBAAyB,CAAA;AACnB,IAAA,WAAW,GAAG,MAAM,CAAC,mBAAmB,CAAC;IAE1D,MAAM,GAAA;QACJ,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE;IACvC;wGALW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA1B1B;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAzBS,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FA2BT,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA9BrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,UAAU,CAAC;AACrB,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;AAwBT,EAAA,CAAA;AACF,iBAAA;;;;;"}