cloud-ide-auth 1.0.0
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/README.md +217 -0
- package/esm2022/cloud-ide-auth.mjs +5 -0
- package/esm2022/lib/auth/forgot-password/forgot-password.component.mjs +62 -0
- package/esm2022/lib/auth/reset-password/reset-password.component.mjs +57 -0
- package/esm2022/lib/auth/sign-in/sign-in.component.mjs +78 -0
- package/esm2022/lib/cloud-ide-auth.component.mjs +16 -0
- package/esm2022/lib/cloud-ide-auth.routes.mjs +24 -0
- package/esm2022/lib/cloud-ide-auth.service.mjs +165 -0
- package/esm2022/public-api.mjs +8 -0
- package/fesm2022/cloud-ide-auth-reset-password.component-s7NMNjch.mjs +60 -0
- package/fesm2022/cloud-ide-auth-reset-password.component-s7NMNjch.mjs.map +1 -0
- package/fesm2022/cloud-ide-auth-sign-in.component-Cu4z1fIE.mjs +81 -0
- package/fesm2022/cloud-ide-auth-sign-in.component-Cu4z1fIE.mjs.map +1 -0
- package/fesm2022/cloud-ide-auth.mjs +281 -0
- package/fesm2022/cloud-ide-auth.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/auth/forgot-password/forgot-password.component.d.ts +16 -0
- package/lib/auth/reset-password/reset-password.component.d.ts +18 -0
- package/lib/auth/sign-in/sign-in.component.d.ts +26 -0
- package/lib/cloud-ide-auth.component.d.ts +5 -0
- package/lib/cloud-ide-auth.routes.d.ts +2 -0
- package/lib/cloud-ide-auth.service.d.ts +29 -0
- package/package.json +25 -0
- package/public-api.d.ts +4 -0
package/README.md
ADDED
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
# Cloud IDE Authentication Library
|
|
2
|
+
|
|
3
|
+
The Cloud IDE Authentication library provides components and services for user authentication in CIDE-LMS applications. It handles user login, registration, password reset, and session management.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Authentication Components**
|
|
8
|
+
- Sign-in Form
|
|
9
|
+
- Registration Form
|
|
10
|
+
- Forgot Password Flow
|
|
11
|
+
- Reset Password Flow
|
|
12
|
+
- **Authentication Service**
|
|
13
|
+
- Token-based Authentication
|
|
14
|
+
- Session Management
|
|
15
|
+
- Automatic Token Refresh
|
|
16
|
+
- Auth Guards for Route Protection
|
|
17
|
+
- **Integration with Backend**
|
|
18
|
+
- HTTP Interceptors for Auth Headers
|
|
19
|
+
- Error Handling for Auth Failures
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install @cide-lms/cloud-ide-auth
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Usage
|
|
28
|
+
|
|
29
|
+
### Setup
|
|
30
|
+
|
|
31
|
+
Import the authentication module in your app module:
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import { CloudIdeAuthModule } from '@cide-lms/cloud-ide-auth';
|
|
35
|
+
|
|
36
|
+
@NgModule({
|
|
37
|
+
imports: [
|
|
38
|
+
CloudIdeAuthModule.forRoot({
|
|
39
|
+
apiUrl: 'https://api.example.com/auth',
|
|
40
|
+
tokenStorageKey: 'auth_token',
|
|
41
|
+
refreshTokenStorageKey: 'refresh_token'
|
|
42
|
+
})
|
|
43
|
+
],
|
|
44
|
+
// ...
|
|
45
|
+
})
|
|
46
|
+
export class AppModule { }
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Authentication Service
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import { Component } from '@angular/core';
|
|
53
|
+
import { CloudIdeAuthService } from '@cide-lms/cloud-ide-auth';
|
|
54
|
+
|
|
55
|
+
@Component({
|
|
56
|
+
selector: 'app-login',
|
|
57
|
+
template: `
|
|
58
|
+
<form (ngSubmit)="login()">
|
|
59
|
+
<input type="email" [(ngModel)]="email" name="email" required>
|
|
60
|
+
<input type="password" [(ngModel)]="password" name="password" required>
|
|
61
|
+
<button type="submit" [disabled]="isLoading">Login</button>
|
|
62
|
+
<div *ngIf="error">{{ error }}</div>
|
|
63
|
+
</form>
|
|
64
|
+
`
|
|
65
|
+
})
|
|
66
|
+
export class LoginComponent {
|
|
67
|
+
email = '';
|
|
68
|
+
password = '';
|
|
69
|
+
error = '';
|
|
70
|
+
isLoading = false;
|
|
71
|
+
|
|
72
|
+
constructor(private authService: CloudIdeAuthService) {}
|
|
73
|
+
|
|
74
|
+
login() {
|
|
75
|
+
this.isLoading = true;
|
|
76
|
+
this.error = '';
|
|
77
|
+
|
|
78
|
+
this.authService.login(this.email, this.password)
|
|
79
|
+
.subscribe({
|
|
80
|
+
next: () => {
|
|
81
|
+
// Redirect to dashboard
|
|
82
|
+
},
|
|
83
|
+
error: (err) => {
|
|
84
|
+
this.error = err.message || 'Login failed';
|
|
85
|
+
this.isLoading = false;
|
|
86
|
+
},
|
|
87
|
+
complete: () => {
|
|
88
|
+
this.isLoading = false;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Authentication Guard
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
import { inject } from '@angular/core';
|
|
99
|
+
import { Router, CanActivateFn } from '@angular/router';
|
|
100
|
+
import { map, take } from 'rxjs/operators';
|
|
101
|
+
import { CloudIdeAuthService } from '@cide-lms/cloud-ide-auth';
|
|
102
|
+
|
|
103
|
+
export const authGuard: CanActivateFn = (route, state) => {
|
|
104
|
+
const router = inject(Router);
|
|
105
|
+
const authService = inject(CloudIdeAuthService);
|
|
106
|
+
|
|
107
|
+
return authService.isAuthenticated$.pipe(
|
|
108
|
+
take(1),
|
|
109
|
+
map(isAuthenticated => {
|
|
110
|
+
if (isAuthenticated) {
|
|
111
|
+
return true;
|
|
112
|
+
} else {
|
|
113
|
+
router.navigate(['/auth/login'], { queryParams: { returnUrl: state.url } });
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
})
|
|
117
|
+
);
|
|
118
|
+
};
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Using Auth Components
|
|
122
|
+
|
|
123
|
+
```html
|
|
124
|
+
<!-- Sign-in component -->
|
|
125
|
+
<cloud-ide-sign-in
|
|
126
|
+
[redirectUrl]="'/dashboard'"
|
|
127
|
+
[rememberMe]="true"
|
|
128
|
+
></cloud-ide-sign-in>
|
|
129
|
+
|
|
130
|
+
<!-- Forgot password component -->
|
|
131
|
+
<cloud-ide-forgot-password></cloud-ide-forgot-password>
|
|
132
|
+
|
|
133
|
+
<!-- Reset password component -->
|
|
134
|
+
<cloud-ide-reset-password [token]="resetToken"></cloud-ide-reset-password>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## Auth Routes
|
|
138
|
+
|
|
139
|
+
The library includes predefined routes for authentication flows:
|
|
140
|
+
|
|
141
|
+
- `/auth/sign-in` - Login page
|
|
142
|
+
- `/auth/register` - Registration page
|
|
143
|
+
- `/auth/forgot-password` - Forgot password page
|
|
144
|
+
- `/auth/reset-password/:token` - Reset password page with token
|
|
145
|
+
|
|
146
|
+
Import these routes in your app routing:
|
|
147
|
+
|
|
148
|
+
```typescript
|
|
149
|
+
import { Routes } from '@angular/router';
|
|
150
|
+
import { cloudIdeAuthRoutes } from '@cide-lms/cloud-ide-auth';
|
|
151
|
+
|
|
152
|
+
export const routes: Routes = [
|
|
153
|
+
// Your app routes
|
|
154
|
+
{
|
|
155
|
+
path: 'auth',
|
|
156
|
+
children: cloudIdeAuthRoutes
|
|
157
|
+
}
|
|
158
|
+
];
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## HTTP Interceptor
|
|
162
|
+
|
|
163
|
+
The library includes an HTTP interceptor for automatically adding authentication tokens to requests:
|
|
164
|
+
|
|
165
|
+
```typescript
|
|
166
|
+
import { HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
167
|
+
import { AuthInterceptor } from '@cide-lms/cloud-ide-auth';
|
|
168
|
+
|
|
169
|
+
@NgModule({
|
|
170
|
+
providers: [
|
|
171
|
+
{
|
|
172
|
+
provide: HTTP_INTERCEPTORS,
|
|
173
|
+
useClass: AuthInterceptor,
|
|
174
|
+
multi: true
|
|
175
|
+
}
|
|
176
|
+
]
|
|
177
|
+
})
|
|
178
|
+
export class AppModule { }
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
## Customization
|
|
182
|
+
|
|
183
|
+
You can customize the appearance of authentication components by overriding the CSS variables:
|
|
184
|
+
|
|
185
|
+
```scss
|
|
186
|
+
:root {
|
|
187
|
+
--cide-auth-primary-color: #3b82f6;
|
|
188
|
+
--cide-auth-error-color: #ef4444;
|
|
189
|
+
--cide-auth-background: #f8fafc;
|
|
190
|
+
--cide-auth-card-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Error Handling
|
|
195
|
+
|
|
196
|
+
The auth service provides standardized error messages:
|
|
197
|
+
|
|
198
|
+
```typescript
|
|
199
|
+
import { AuthErrorType, CloudIdeAuthService } from '@cide-lms/cloud-ide-auth';
|
|
200
|
+
|
|
201
|
+
@Component({/* ... */})
|
|
202
|
+
export class LoginComponent {
|
|
203
|
+
constructor(private authService: CloudIdeAuthService) {
|
|
204
|
+
this.authService.loginError$.subscribe(error => {
|
|
205
|
+
switch(error.type) {
|
|
206
|
+
case AuthErrorType.INVALID_CREDENTIALS:
|
|
207
|
+
this.errorMessage = 'Invalid username or password';
|
|
208
|
+
break;
|
|
209
|
+
case AuthErrorType.ACCOUNT_LOCKED:
|
|
210
|
+
this.errorMessage = 'Your account has been locked';
|
|
211
|
+
break;
|
|
212
|
+
// Handle other error types
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
```
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQtaWRlLWF1dGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtYXV0aC9zcmMvY2xvdWQtaWRlLWF1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Component, inject } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { Router } from '@angular/router';
|
|
5
|
+
import { MForgotPassword, validateRequestModal } from 'cloud-ide-lms-model';
|
|
6
|
+
import { CloudIdeAuthService } from '../../cloud-ide-auth.service';
|
|
7
|
+
import { CideEleButtonComponent, CideInputComponent } from 'cloud-ide-element';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/forms";
|
|
10
|
+
export class CideAuthForgotPasswordComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.setup_param = { form_loading: false };
|
|
13
|
+
this.erro_message = "";
|
|
14
|
+
this.authService = inject(CloudIdeAuthService);
|
|
15
|
+
this.route = inject(Router);
|
|
16
|
+
this.forgotPassswordForm = new FormGroup({
|
|
17
|
+
custom_forgot_password_method: new FormControl('username'),
|
|
18
|
+
user_username: new FormControl(''),
|
|
19
|
+
user_emailid: new FormControl(''),
|
|
20
|
+
user_mobileno: new FormControl(),
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
onForgotPasssword() {
|
|
24
|
+
if (this.forgotPassswordForm.valid) {
|
|
25
|
+
this.setup_param.form_loading = true;
|
|
26
|
+
const validate = validateRequestModal(new MForgotPassword(this.forgotPassswordForm?.value));
|
|
27
|
+
console.log(validate);
|
|
28
|
+
if (validate === true) {
|
|
29
|
+
this.authService.forgotPassword(this.forgotPassswordForm?.value)?.subscribe({
|
|
30
|
+
next: (response) => {
|
|
31
|
+
if (response?.success === true) {
|
|
32
|
+
this.setup_param.form_loading = false;
|
|
33
|
+
this.route.navigate(['auth', 'sign-in']);
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
error: (error) => {
|
|
37
|
+
this.setup_param.form_loading = false;
|
|
38
|
+
this.erro_message = error?.error?.message;
|
|
39
|
+
console.log(error);
|
|
40
|
+
setTimeout(() => {
|
|
41
|
+
this.erro_message = "";
|
|
42
|
+
}, 3000);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
this.setup_param.form_loading = false;
|
|
48
|
+
this.erro_message = validate.first;
|
|
49
|
+
setTimeout(() => {
|
|
50
|
+
this.erro_message = "";
|
|
51
|
+
}, 3000);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAuthForgotPasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
56
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideAuthForgotPasswordComponent, isStandalone: true, selector: "cide-auth-forgot-password", ngImport: i0, template: "<!-- https://play.tailwindcss.com/lfO85drpUy -->\n<!-- Main Div Outer Div-->\n<div class=\"cide-font-poppins tw-flex tw-min-h-screen tw-w-full tw-bg-gray-50 tw-py-3\">\n <!-- Forrm Wrapper -->\n <div class=\"tw-m-auto tw-w-96 tw-rounded-2xl tw-bg-white tw-py-6 tw-shadow-xl\">\n <!-- Logo Wrapper -->\n <div class=\"tw-m-auto tw-h-32 tw-w-64 tw-text-center\">\n <img src=\"https://console.cloudidesys.com/assets/Cloud%20IDE%20Logo%20Dark.png\" class=\"tw-m-auto tw-h-full\"\n alt=\"Cloud IDE Logo\" />\n </div> <!-- Entity name here -->\n <div class=\"tw-my-2 tw-text-center tw-text-xl tw-font-semibold\">Forgot Password</div>\n <!-- Error Logger -->\n <div class=\"tw-w-full tw-select-none tw-py-1 tw-text-center tw-text-red-500 tw-h-4 tw-text-sm\">{{erro_message}}</div>\n \n <!-- section for controls -->\n <form [formGroup]=\"forgotPassswordForm\" (ngSubmit)=\"onForgotPasssword()\" novalidate>\n <div class=\"tw-m-auto tw-pb-3 tw-pt-3\">\n <!-- Username -->\n <div class=\"tw-m-auto tw-w-80\">\n <cide-ele-input id=\"user_username\" formControlName=\"user_username\"></cide-ele-input>\n </div> <!-- Forgot Password button -->\n <div class=\"tw-w-80 tw-m-auto tw-mt-3\">\n <button cideEleButton id=\"reset_password_link_button\" [loading]=\"setup_param.form_loading\" [disabled]=\"!forgotPassswordForm.valid\">Reset Password</button>\n </div>\n </div>\n </form>\n </div>\n </div>", styles: [""], dependencies: [{ kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "size"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton]", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }] }); }
|
|
57
|
+
}
|
|
58
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAuthForgotPasswordComponent, decorators: [{
|
|
59
|
+
type: Component,
|
|
60
|
+
args: [{ selector: 'cide-auth-forgot-password', standalone: true, imports: [CideInputComponent, ReactiveFormsModule, CommonModule, CideEleButtonComponent], template: "<!-- https://play.tailwindcss.com/lfO85drpUy -->\n<!-- Main Div Outer Div-->\n<div class=\"cide-font-poppins tw-flex tw-min-h-screen tw-w-full tw-bg-gray-50 tw-py-3\">\n <!-- Forrm Wrapper -->\n <div class=\"tw-m-auto tw-w-96 tw-rounded-2xl tw-bg-white tw-py-6 tw-shadow-xl\">\n <!-- Logo Wrapper -->\n <div class=\"tw-m-auto tw-h-32 tw-w-64 tw-text-center\">\n <img src=\"https://console.cloudidesys.com/assets/Cloud%20IDE%20Logo%20Dark.png\" class=\"tw-m-auto tw-h-full\"\n alt=\"Cloud IDE Logo\" />\n </div> <!-- Entity name here -->\n <div class=\"tw-my-2 tw-text-center tw-text-xl tw-font-semibold\">Forgot Password</div>\n <!-- Error Logger -->\n <div class=\"tw-w-full tw-select-none tw-py-1 tw-text-center tw-text-red-500 tw-h-4 tw-text-sm\">{{erro_message}}</div>\n \n <!-- section for controls -->\n <form [formGroup]=\"forgotPassswordForm\" (ngSubmit)=\"onForgotPasssword()\" novalidate>\n <div class=\"tw-m-auto tw-pb-3 tw-pt-3\">\n <!-- Username -->\n <div class=\"tw-m-auto tw-w-80\">\n <cide-ele-input id=\"user_username\" formControlName=\"user_username\"></cide-ele-input>\n </div> <!-- Forgot Password button -->\n <div class=\"tw-w-80 tw-m-auto tw-mt-3\">\n <button cideEleButton id=\"reset_password_link_button\" [loading]=\"setup_param.form_loading\" [disabled]=\"!forgotPassswordForm.valid\">Reset Password</button>\n </div>\n </div>\n </form>\n </div>\n </div>" }]
|
|
61
|
+
}], ctorParameters: () => [] });
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZ290LXBhc3N3b3JkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1hdXRoL3NyYy9saWIvYXV0aC9mb3Jnb3QtcGFzc3dvcmQvZm9yZ290LXBhc3N3b3JkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1hdXRoL3NyYy9saWIvYXV0aC9mb3Jnb3QtcGFzc3dvcmQvZm9yZ290LXBhc3N3b3JkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QyxPQUFPLEVBQXdCLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFTL0UsTUFBTSxPQUFPLCtCQUErQjtJQVExQztRQVBPLGdCQUFXLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFFdEMsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFFakIsZ0JBQVcsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUMxQyxVQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBSTdCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUN2Qyw2QkFBNkIsRUFBRSxJQUFJLFdBQVcsQ0FBdUIsVUFBVSxDQUFDO1lBQ2hGLGFBQWEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsWUFBWSxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxhQUFhLEVBQUUsSUFBSSxXQUFXLEVBQUU7U0FDakMsQ0FBK0MsQ0FBQztJQUNuRCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3JDLE1BQU0sUUFBUSxHQUFHLG9CQUFvQixDQUFDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUF3QixDQUFDLENBQUMsQ0FBQztZQUMvRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3JCLElBQUcsUUFBUSxLQUFLLElBQUksRUFBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBd0IsQ0FBQyxFQUFFLFNBQVMsQ0FBQztvQkFDN0YsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7d0JBQ2pCLElBQUksUUFBUSxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQzs0QkFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDOzRCQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFBO3dCQUMxQyxDQUFDO29CQUNILENBQUM7b0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO3dCQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO3dCQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO3dCQUNsQixVQUFVLENBQUMsR0FBRyxFQUFFOzRCQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFBO3dCQUN4QixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7b0JBQ1YsQ0FBQztpQkFDRixDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ25DLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUE7Z0JBQ3hCLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUNWLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs4R0FoRFUsK0JBQStCO2tHQUEvQiwrQkFBK0IscUZDaEI1QyxtaERBMkJRLDBERGZJLGtCQUFrQix5YkFBRSxtQkFBbUIsNHJCQUFFLFlBQVksK0JBQUUsc0JBQXNCOzsyRkFJNUUsK0JBQStCO2tCQVAzQyxTQUFTOytCQUNFLDJCQUEyQixjQUN6QixJQUFJLFdBQ1AsQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRm9ybUdyb3VwTW9kZWwgfSBmcm9tICcuLi9zaWduLWluL3NpZ24taW4uY29tcG9uZW50JztcbmltcG9ydCB7IGZvcmdvdFBhc3N3b3JkTWV0aG9kLCBNRm9yZ290UGFzc3dvcmQsIHZhbGlkYXRlUmVxdWVzdE1vZGFsIH0gZnJvbSAnY2xvdWQtaWRlLWxtcy1tb2RlbCc7XG5pbXBvcnQgeyBDbG91ZElkZUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2xvdWQtaWRlLWF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBDaWRlRWxlQnV0dG9uQ29tcG9uZW50LCBDaWRlSW5wdXRDb21wb25lbnQgfSBmcm9tICdjbG91ZC1pZGUtZWxlbWVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NpZGUtYXV0aC1mb3Jnb3QtcGFzc3dvcmQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ2lkZUlucHV0Q29tcG9uZW50LCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBDb21tb25Nb2R1bGUsIENpZGVFbGVCdXR0b25Db21wb25lbnRdLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9yZ290LXBhc3N3b3JkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2ZvcmdvdC1wYXNzd29yZC5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBDaWRlQXV0aEZvcmdvdFBhc3N3b3JkQ29tcG9uZW50IHtcbiAgcHVibGljIHNldHVwX3BhcmFtID0geyBmb3JtX2xvYWRpbmc6IGZhbHNlIH07XG4gIHB1YmxpYyBmb3Jnb3RQYXNzc3dvcmRGb3JtOiBGb3JtR3JvdXBNb2RlbDxNRm9yZ290UGFzc3dvcmQ+O1xuICBwdWJsaWMgZXJyb19tZXNzYWdlID0gXCJcIjtcblxuICBwcml2YXRlIGF1dGhTZXJ2aWNlID0gaW5qZWN0KENsb3VkSWRlQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgY29uc3RydWN0b3IoKSB7XG5cbiAgICB0aGlzLmZvcmdvdFBhc3Nzd29yZEZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIGN1c3RvbV9mb3Jnb3RfcGFzc3dvcmRfbWV0aG9kOiBuZXcgRm9ybUNvbnRyb2w8Zm9yZ290UGFzc3dvcmRNZXRob2Q+KCd1c2VybmFtZScpLFxuICAgICAgdXNlcl91c2VybmFtZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIHVzZXJfZW1haWxpZDogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIHVzZXJfbW9iaWxlbm86IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgIH0pIGFzIHVua25vd24gYXMgRm9ybUdyb3VwTW9kZWw8TUZvcmdvdFBhc3N3b3JkPjtcbiAgfVxuXG4gIG9uRm9yZ290UGFzc3N3b3JkKCkge1xuICAgIGlmICh0aGlzLmZvcmdvdFBhc3Nzd29yZEZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuc2V0dXBfcGFyYW0uZm9ybV9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHZhbGlkYXRlID0gdmFsaWRhdGVSZXF1ZXN0TW9kYWwobmV3IE1Gb3Jnb3RQYXNzd29yZCh0aGlzLmZvcmdvdFBhc3Nzd29yZEZvcm0/LnZhbHVlIGFzIE1Gb3Jnb3RQYXNzd29yZCkpO1xuICAgICAgY29uc29sZS5sb2codmFsaWRhdGUpXG4gICAgICBpZih2YWxpZGF0ZSA9PT0gdHJ1ZSl7XG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuZm9yZ290UGFzc3dvcmQodGhpcy5mb3Jnb3RQYXNzc3dvcmRGb3JtPy52YWx1ZSBhcyBNRm9yZ290UGFzc3dvcmQpPy5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0dXBfcGFyYW0uZm9ybV9sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMucm91dGUubmF2aWdhdGUoWydhdXRoJywgJ3NpZ24taW4nXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBfcGFyYW0uZm9ybV9sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVycm9fbWVzc2FnZSA9IGVycm9yPy5lcnJvcj8ubWVzc2FnZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZXJyb19tZXNzYWdlID0gXCJcIlxuICAgICAgICAgICAgfSwgMzAwMClcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXR1cF9wYXJhbS5mb3JtX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvX21lc3NhZ2UgPSB2YWxpZGF0ZS5maXJzdDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvX21lc3NhZ2UgPSBcIlwiXG4gICAgICAgIH0sIDMwMDApXG4gICAgICB9XG4gICAgfVxuICB9XG59IiwiPCEtLSBodHRwczovL3BsYXkudGFpbHdpbmRjc3MuY29tL2xmTzg1ZHJwVXkgLS0+XG48IS0tIE1haW4gRGl2IE91dGVyIERpdi0tPlxuPGRpdiBjbGFzcz1cImNpZGUtZm9udC1wb3BwaW5zIHR3LWZsZXggdHctbWluLWgtc2NyZWVuIHR3LXctZnVsbCB0dy1iZy1ncmF5LTUwIHR3LXB5LTNcIj5cbiAgICA8IS0tIEZvcnJtIFdyYXBwZXIgLS0+XG4gICAgPGRpdiBjbGFzcz1cInR3LW0tYXV0byB0dy13LTk2IHR3LXJvdW5kZWQtMnhsIHR3LWJnLXdoaXRlIHR3LXB5LTYgdHctc2hhZG93LXhsXCI+XG4gICAgICA8IS0tIExvZ28gV3JhcHBlciAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0dy1tLWF1dG8gdHctaC0zMiB0dy13LTY0IHR3LXRleHQtY2VudGVyXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9jb25zb2xlLmNsb3VkaWRlc3lzLmNvbS9hc3NldHMvQ2xvdWQlMjBJREUlMjBMb2dvJTIwRGFyay5wbmdcIiBjbGFzcz1cInR3LW0tYXV0byB0dy1oLWZ1bGxcIlxuICAgICAgICAgIGFsdD1cIkNsb3VkIElERSBMb2dvXCIgLz5cbiAgICAgIDwvZGl2PiA8IS0tIEVudGl0eSBuYW1lIGhlcmUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwidHctbXktMiB0dy10ZXh0LWNlbnRlciB0dy10ZXh0LXhsIHR3LWZvbnQtc2VtaWJvbGRcIj5Gb3Jnb3QgUGFzc3dvcmQ8L2Rpdj5cbiAgICAgICA8IS0tIEVycm9yIExvZ2dlciAtLT5cbiAgICAgICA8ZGl2IGNsYXNzPVwidHctdy1mdWxsIHR3LXNlbGVjdC1ub25lIHR3LXB5LTEgdHctdGV4dC1jZW50ZXIgdHctdGV4dC1yZWQtNTAwIHR3LWgtNCB0dy10ZXh0LXNtXCI+e3tlcnJvX21lc3NhZ2V9fTwvZGl2PlxuICAgICAgICBcbiAgICAgIDwhLS0gc2VjdGlvbiBmb3IgY29udHJvbHMgLS0+XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcmdvdFBhc3Nzd29yZEZvcm1cIiAobmdTdWJtaXQpPVwib25Gb3Jnb3RQYXNzc3dvcmQoKVwiIG5vdmFsaWRhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1tLWF1dG8gdHctcGItMyB0dy1wdC0zXCI+XG4gICAgICAgICAgPCEtLSBVc2VybmFtZSAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidHctbS1hdXRvIHR3LXctODBcIj5cbiAgICAgICAgICAgIDxjaWRlLWVsZS1pbnB1dCBpZD1cInVzZXJfdXNlcm5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJ1c2VyX3VzZXJuYW1lXCI+PC9jaWRlLWVsZS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj4gICAgICAgICAgPCEtLSBGb3Jnb3QgUGFzc3dvcmQgYnV0dG9uIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy13LTgwIHR3LW0tYXV0byB0dy1tdC0zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNpZGVFbGVCdXR0b24gaWQ9XCJyZXNldF9wYXNzd29yZF9saW5rX2J1dHRvblwiIFtsb2FkaW5nXT1cInNldHVwX3BhcmFtLmZvcm1fbG9hZGluZ1wiIFtkaXNhYmxlZF09XCIhZm9yZ290UGFzc3N3b3JkRm9ybS52YWxpZFwiPlJlc2V0IFBhc3N3b3JkPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICA8L2Rpdj4iXX0=
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Component, inject } from '@angular/core';
|
|
2
|
+
import { CideEleButtonComponent, CideInputComponent } from 'cloud-ide-element';
|
|
3
|
+
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
+
import { CommonModule } from '@angular/common';
|
|
5
|
+
import { Router } from '@angular/router';
|
|
6
|
+
import { CloudIdeAuthService } from '../../cloud-ide-auth.service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@angular/forms";
|
|
9
|
+
export class CideAuthResetPasswordComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.setup_param = { form_loading: false };
|
|
12
|
+
this.erro_message = "";
|
|
13
|
+
this.authService = inject(CloudIdeAuthService);
|
|
14
|
+
this.route = inject(Router);
|
|
15
|
+
this.resetPassswordForm = new FormGroup({
|
|
16
|
+
user_new_password: new FormControl(''),
|
|
17
|
+
user_confirm_password: new FormControl('')
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
onForgotPasssword() {
|
|
21
|
+
if (this.resetPassswordForm.valid) {
|
|
22
|
+
this.setup_param.form_loading = true;
|
|
23
|
+
const resetPasssword = {
|
|
24
|
+
user_password: this.resetPassswordForm?.get('user_password')?.value || '',
|
|
25
|
+
user_username: "",
|
|
26
|
+
sylog_config_data: {
|
|
27
|
+
reset_password_link: "",
|
|
28
|
+
reset_password_secret: "",
|
|
29
|
+
request_timestamp: new Date()
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
this.authService.resetPassword(resetPasssword)?.subscribe({
|
|
33
|
+
next: (response) => {
|
|
34
|
+
if (response?.success === true) {
|
|
35
|
+
this.setup_param.form_loading = false;
|
|
36
|
+
this.route.navigate(['auth', 'sign-in']);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
error: (error) => {
|
|
40
|
+
this.setup_param.form_loading = false;
|
|
41
|
+
this.erro_message = error?.error?.message;
|
|
42
|
+
console.log(error);
|
|
43
|
+
setTimeout(() => {
|
|
44
|
+
this.erro_message = "";
|
|
45
|
+
}, 3000);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAuthResetPasswordComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
51
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideAuthResetPasswordComponent, isStandalone: true, selector: "cide-auth-reset-password", ngImport: i0, template: "<!-- https://play.tailwindcss.com/lfO85drpUy -->\n<!-- Main Div Outer Div-->\n<div class=\"cide-font-poppins tw-flex tw-min-h-screen tw-w-full tw-bg-gray-50 tw-py-3\">\n <!-- Forrm Wrapper -->\n <div class=\"tw-m-auto tw-w-96 tw-rounded-2xl tw-bg-white tw-py-6 tw-shadow-xl\">\n <!-- Logo Wrapper -->\n <div class=\"tw-m-auto tw-h-32 tw-w-64 tw-text-center\">\n <img src=\"https://console.cloudidesys.com/assets/Cloud%20IDE%20Logo%20Dark.png\" class=\"tw-m-auto tw-h-full\"\n alt=\"Cloud IDE Logo\" />\n </div> <!-- Entity name here -->\n <div class=\"tw-my-2 tw-text-center tw-text-xl tw-font-semibold\">Reset Password</div>\n <!-- Error Logger -->\n <div class=\"tw-w-full tw-select-none tw-py-1 tw-text-center tw-text-red-500 tw-h-4 tw-text-sm\">{{erro_message}}</div>\n \n <!-- section for controls -->\n <form [formGroup]=\"resetPassswordForm\" (ngSubmit)=\"onForgotPasssword()\" novalidate>\n <div class=\"tw-m-auto tw-pb-3 tw-pt-3\">\n <!-- New Password -->\n <div class=\"tw-m-auto tw-w-80\">\n <cide-ele-input id=\"new_password\" formControlName=\"new_password\"></cide-ele-input>\n </div>\n <!-- Confirm Password -->\n <div class=\"tw-m-auto tw-w-80\">\n <cide-ele-input id=\"confirm_password\" formControlName=\"confirm_password\"></cide-ele-input>\n </div> <!-- Forgot Password button -->\n <div class=\"tw-w-80 tw-m-auto tw-mt-3\">\n <button cideEleButton id=\"reset_password_button\" [loading]=\"setup_param.form_loading\" [disabled]=\"!resetPassswordForm.valid\">Reset Password</button>\n </div>\n </div>\n </form>\n </div>\n </div>", styles: [""], dependencies: [{ kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "size"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton]", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }] }); }
|
|
52
|
+
}
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAuthResetPasswordComponent, decorators: [{
|
|
54
|
+
type: Component,
|
|
55
|
+
args: [{ selector: 'cide-auth-reset-password', standalone: true, imports: [CideInputComponent, ReactiveFormsModule, CommonModule, CideEleButtonComponent], template: "<!-- https://play.tailwindcss.com/lfO85drpUy -->\n<!-- Main Div Outer Div-->\n<div class=\"cide-font-poppins tw-flex tw-min-h-screen tw-w-full tw-bg-gray-50 tw-py-3\">\n <!-- Forrm Wrapper -->\n <div class=\"tw-m-auto tw-w-96 tw-rounded-2xl tw-bg-white tw-py-6 tw-shadow-xl\">\n <!-- Logo Wrapper -->\n <div class=\"tw-m-auto tw-h-32 tw-w-64 tw-text-center\">\n <img src=\"https://console.cloudidesys.com/assets/Cloud%20IDE%20Logo%20Dark.png\" class=\"tw-m-auto tw-h-full\"\n alt=\"Cloud IDE Logo\" />\n </div> <!-- Entity name here -->\n <div class=\"tw-my-2 tw-text-center tw-text-xl tw-font-semibold\">Reset Password</div>\n <!-- Error Logger -->\n <div class=\"tw-w-full tw-select-none tw-py-1 tw-text-center tw-text-red-500 tw-h-4 tw-text-sm\">{{erro_message}}</div>\n \n <!-- section for controls -->\n <form [formGroup]=\"resetPassswordForm\" (ngSubmit)=\"onForgotPasssword()\" novalidate>\n <div class=\"tw-m-auto tw-pb-3 tw-pt-3\">\n <!-- New Password -->\n <div class=\"tw-m-auto tw-w-80\">\n <cide-ele-input id=\"new_password\" formControlName=\"new_password\"></cide-ele-input>\n </div>\n <!-- Confirm Password -->\n <div class=\"tw-m-auto tw-w-80\">\n <cide-ele-input id=\"confirm_password\" formControlName=\"confirm_password\"></cide-ele-input>\n </div> <!-- Forgot Password button -->\n <div class=\"tw-w-80 tw-m-auto tw-mt-3\">\n <button cideEleButton id=\"reset_password_button\" [loading]=\"setup_param.form_loading\" [disabled]=\"!resetPassswordForm.valid\">Reset Password</button>\n </div>\n </div>\n </form>\n </div>\n </div>" }]
|
|
56
|
+
}], ctorParameters: () => [] });
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzZXQtcGFzc3dvcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWF1dGgvc3JjL2xpYi9hdXRoL3Jlc2V0LXBhc3N3b3JkL3Jlc2V0LXBhc3N3b3JkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1hdXRoL3NyYy9saWIvYXV0aC9yZXNldC1wYXNzd29yZC9yZXNldC1wYXNzd29yZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQVVuRSxNQUFNLE9BQU8sOEJBQThCO0lBUXpDO1FBUE8sZ0JBQVcsR0FBRyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUV0QyxpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUVqQixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzFDLFVBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFJN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksU0FBUyxDQUFDO1lBQ3RDLGlCQUFpQixFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxxQkFBcUIsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7U0FDM0MsQ0FBMEYsQ0FBQztJQUM5RixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3JDLE1BQU0sY0FBYyxHQUFtQjtnQkFDckMsYUFBYSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ3pFLGFBQWEsRUFBRSxFQUFFO2dCQUNqQixpQkFBaUIsRUFBRTtvQkFDakIsbUJBQW1CLEVBQUUsRUFBRTtvQkFDdkIscUJBQXFCLEVBQUUsRUFBRTtvQkFDekIsaUJBQWlCLEVBQUUsSUFBSSxJQUFJLEVBQUU7aUJBQzlCO2FBQ0YsQ0FBQTtZQUNELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsQ0FBQztnQkFDeEQsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ2pCLElBQUksUUFBUSxFQUFFLE9BQU8sS0FBSyxJQUFJLEVBQUUsQ0FBQzt3QkFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO3dCQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFBO29CQUMxQyxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO29CQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDO29CQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNsQixVQUFVLENBQUMsR0FBRyxFQUFFO3dCQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFBO29CQUN4QixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ1YsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOzhHQTdDVSw4QkFBOEI7a0dBQTlCLDhCQUE4QixvRkNoQjNDLCt0REErQlEsMEREbkJJLGtCQUFrQix5YkFBRSxtQkFBbUIsNHJCQUFFLFlBQVksK0JBQUUsc0JBQXNCOzsyRkFJNUUsOEJBQThCO2tCQVAxQyxTQUFTOytCQUNFLDBCQUEwQixjQUN4QixJQUFJLFdBQ1AsQ0FBQyxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2lkZUVsZUJ1dHRvbkNvbXBvbmVudCwgQ2lkZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnY2xvdWQtaWRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRm9ybUdyb3VwTW9kZWwgfSBmcm9tICcuLi9zaWduLWluL3NpZ24taW4uY29tcG9uZW50JztcbmltcG9ydCB7IENsb3VkSWRlQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jbG91ZC1pZGUtYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IE1SZXNldFBhc3N3b3JkIH0gZnJvbSAnY2xvdWQtaWRlLWxtcy1tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NpZGUtYXV0aC1yZXNldC1wYXNzd29yZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDaWRlSW5wdXRDb21wb25lbnQsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIENvbW1vbk1vZHVsZSwgQ2lkZUVsZUJ1dHRvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXNldC1wYXNzd29yZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9yZXNldC1wYXNzd29yZC5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBDaWRlQXV0aFJlc2V0UGFzc3dvcmRDb21wb25lbnQge1xuICBwdWJsaWMgc2V0dXBfcGFyYW0gPSB7IGZvcm1fbG9hZGluZzogZmFsc2UgfTtcbiAgcHVibGljIHJlc2V0UGFzc3N3b3JkRm9ybTogRm9ybUdyb3VwTW9kZWw8e3VzZXJfbmV3X3Bhc3N3b3JkOiBzdHJpbmcsIHVzZXJfY29uZmlybV9wYXNzd29yZDogc3RyaW5nfT47XG4gIHB1YmxpYyBlcnJvX21lc3NhZ2UgPSBcIlwiO1xuXG4gIHByaXZhdGUgYXV0aFNlcnZpY2UgPSBpbmplY3QoQ2xvdWRJZGVBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgcm91dGUgPSBpbmplY3QoUm91dGVyKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcblxuICAgIHRoaXMucmVzZXRQYXNzc3dvcmRGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICB1c2VyX25ld19wYXNzd29yZDogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIHVzZXJfY29uZmlybV9wYXNzd29yZDogbmV3IEZvcm1Db250cm9sKCcnKVxuICAgIH0pIGFzIHVua25vd24gYXMgRm9ybUdyb3VwTW9kZWw8e3VzZXJfbmV3X3Bhc3N3b3JkOiBzdHJpbmcsIHVzZXJfY29uZmlybV9wYXNzd29yZDogc3RyaW5nfT47XG4gIH1cblxuICBvbkZvcmdvdFBhc3Nzd29yZCgpIHtcbiAgICBpZiAodGhpcy5yZXNldFBhc3Nzd29yZEZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuc2V0dXBfcGFyYW0uZm9ybV9sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHJlc2V0UGFzc3N3b3JkIDogTVJlc2V0UGFzc3dvcmQ9IHtcbiAgICAgICAgdXNlcl9wYXNzd29yZDogdGhpcy5yZXNldFBhc3Nzd29yZEZvcm0/LmdldCgndXNlcl9wYXNzd29yZCcpPy52YWx1ZSB8fCAnJyxcbiAgICAgICAgdXNlcl91c2VybmFtZTogXCJcIixcbiAgICAgICAgc3lsb2dfY29uZmlnX2RhdGE6IHtcbiAgICAgICAgICByZXNldF9wYXNzd29yZF9saW5rOiBcIlwiLFxuICAgICAgICAgIHJlc2V0X3Bhc3N3b3JkX3NlY3JldDogXCJcIixcbiAgICAgICAgICByZXF1ZXN0X3RpbWVzdGFtcDogbmV3IERhdGUoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLnJlc2V0UGFzc3dvcmQocmVzZXRQYXNzc3dvcmQpPy5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnN1Y2Nlc3MgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dXBfcGFyYW0uZm9ybV9sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJvdXRlLm5hdmlnYXRlKFsnYXV0aCcsICdzaWduLWluJ10pXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR1cF9wYXJhbS5mb3JtX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmVycm9fbWVzc2FnZSA9IGVycm9yPy5lcnJvcj8ubWVzc2FnZTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb19tZXNzYWdlID0gXCJcIlxuICAgICAgICAgIH0sIDMwMDApXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG4iLCI8IS0tIGh0dHBzOi8vcGxheS50YWlsd2luZGNzcy5jb20vbGZPODVkcnBVeSAtLT5cbjwhLS0gTWFpbiBEaXYgT3V0ZXIgRGl2LS0+XG48ZGl2IGNsYXNzPVwiY2lkZS1mb250LXBvcHBpbnMgdHctZmxleCB0dy1taW4taC1zY3JlZW4gdHctdy1mdWxsIHR3LWJnLWdyYXktNTAgdHctcHktM1wiPlxuICAgIDwhLS0gRm9ycm0gV3JhcHBlciAtLT5cbiAgICA8ZGl2IGNsYXNzPVwidHctbS1hdXRvIHR3LXctOTYgdHctcm91bmRlZC0yeGwgdHctYmctd2hpdGUgdHctcHktNiB0dy1zaGFkb3cteGxcIj5cbiAgICAgIDwhLS0gTG9nbyBXcmFwcGVyIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInR3LW0tYXV0byB0dy1oLTMyIHR3LXctNjQgdHctdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGltZyBzcmM9XCJodHRwczovL2NvbnNvbGUuY2xvdWRpZGVzeXMuY29tL2Fzc2V0cy9DbG91ZCUyMElERSUyMExvZ28lMjBEYXJrLnBuZ1wiIGNsYXNzPVwidHctbS1hdXRvIHR3LWgtZnVsbFwiXG4gICAgICAgICAgYWx0PVwiQ2xvdWQgSURFIExvZ29cIiAvPlxuICAgICAgPC9kaXY+IDwhLS0gRW50aXR5IG5hbWUgaGVyZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0dy1teS0yIHR3LXRleHQtY2VudGVyIHR3LXRleHQteGwgdHctZm9udC1zZW1pYm9sZFwiPlJlc2V0IFBhc3N3b3JkPC9kaXY+XG4gICAgICAgPCEtLSBFcnJvciBMb2dnZXIgLS0+XG4gICAgICAgPGRpdiBjbGFzcz1cInR3LXctZnVsbCB0dy1zZWxlY3Qtbm9uZSB0dy1weS0xIHR3LXRleHQtY2VudGVyIHR3LXRleHQtcmVkLTUwMCB0dy1oLTQgdHctdGV4dC1zbVwiPnt7ZXJyb19tZXNzYWdlfX08L2Rpdj5cbiAgICAgICAgXG4gICAgICA8IS0tIHNlY3Rpb24gZm9yIGNvbnRyb2xzIC0tPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJyZXNldFBhc3Nzd29yZEZvcm1cIiAobmdTdWJtaXQpPVwib25Gb3Jnb3RQYXNzc3dvcmQoKVwiIG5vdmFsaWRhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1tLWF1dG8gdHctcGItMyB0dy1wdC0zXCI+XG4gICAgICAgICAgPCEtLSBOZXcgUGFzc3dvcmQgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInR3LW0tYXV0byB0dy13LTgwXCI+XG4gICAgICAgICAgICA8Y2lkZS1lbGUtaW5wdXQgaWQ9XCJuZXdfcGFzc3dvcmRcIiBmb3JtQ29udHJvbE5hbWU9XCJuZXdfcGFzc3dvcmRcIj48L2NpZGUtZWxlLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICA8IS0tIENvbmZpcm0gUGFzc3dvcmQgLS0+XG4gICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0dy1tLWF1dG8gdHctdy04MFwiPlxuICAgICAgICAgICAgPGNpZGUtZWxlLWlucHV0IGlkPVwiY29uZmlybV9wYXNzd29yZFwiIGZvcm1Db250cm9sTmFtZT1cImNvbmZpcm1fcGFzc3dvcmRcIj48L2NpZGUtZWxlLWlucHV0PlxuICAgICAgICAgIDwvZGl2PiAgICAgICAgICA8IS0tIEZvcmdvdCBQYXNzd29yZCBidXR0b24gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInR3LXctODAgdHctbS1hdXRvIHR3LW10LTNcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2lkZUVsZUJ1dHRvbiBpZD1cInJlc2V0X3Bhc3N3b3JkX2J1dHRvblwiIFtsb2FkaW5nXT1cInNldHVwX3BhcmFtLmZvcm1fbG9hZGluZ1wiIFtkaXNhYmxlZF09XCIhcmVzZXRQYXNzc3dvcmRGb3JtLnZhbGlkXCI+UmVzZXQgUGFzc3dvcmQ8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Component, inject } from '@angular/core';
|
|
2
|
+
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { Router, RouterLink, ActivatedRoute } from '@angular/router';
|
|
5
|
+
import { CloudIdeAuthService } from '../../cloud-ide-auth.service';
|
|
6
|
+
import { CideEleButtonComponent, CideInputComponent } from 'cloud-ide-element';
|
|
7
|
+
import { CideLytSharedWrapperComponent, AppStateHelperService } from 'cloud-ide-layout';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/forms";
|
|
10
|
+
export class CideAuthSignInComponent extends CideLytSharedWrapperComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
this.shared_wrapper_setup_param = {
|
|
14
|
+
sypg_page_code: "auth_sign_in"
|
|
15
|
+
};
|
|
16
|
+
this.setup_param = { form_loading: false };
|
|
17
|
+
this.erro_message = "";
|
|
18
|
+
this.returnUrl = '/control-panel'; // Default return URL
|
|
19
|
+
this.router = inject(Router);
|
|
20
|
+
this.activatedRoute = inject(ActivatedRoute);
|
|
21
|
+
this.authService = inject(CloudIdeAuthService);
|
|
22
|
+
this.appStateService = inject(AppStateHelperService);
|
|
23
|
+
this.loginForm = new FormGroup({
|
|
24
|
+
custom_login_method: new FormControl('pass'),
|
|
25
|
+
user_username: new FormControl(''),
|
|
26
|
+
user_password: new FormControl(''),
|
|
27
|
+
mpin_pin: new FormControl(''),
|
|
28
|
+
stay_sign_in: new FormControl(true)
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
ngOnInit() {
|
|
32
|
+
super.ngOnInit();
|
|
33
|
+
// Get return URL from route parameters or default to '/control-panel'
|
|
34
|
+
this.returnUrl = this.activatedRoute.snapshot.queryParams['returnUrl'] || 'control-panel';
|
|
35
|
+
// If user is already authenticated, redirect to the return URL
|
|
36
|
+
if (this.authService.isAuthenticated() && !this.authService.isTokenExpired()) {
|
|
37
|
+
this.router.navigateByUrl(this.returnUrl);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
onSignIn() {
|
|
41
|
+
if (this.loginForm.valid) {
|
|
42
|
+
this.setup_param.form_loading = true;
|
|
43
|
+
this.authService.signIn(this.loginForm?.value)?.subscribe({
|
|
44
|
+
next: (response) => {
|
|
45
|
+
if (response?.success === true) {
|
|
46
|
+
// Store user data in auth service
|
|
47
|
+
this.authService.storeUserData(response?.data?.auth_user_mst || {});
|
|
48
|
+
// Synchronize AppStateService with the same user data
|
|
49
|
+
this.appStateService.setUser(response?.data?.auth_user_mst || null);
|
|
50
|
+
// Store active entity data
|
|
51
|
+
this.appStateService.setActiveEntity(response?.data?.core_system_entity || null);
|
|
52
|
+
// Store token through the service setter which saves to localStorage
|
|
53
|
+
this.authService.auth_token = (response?.token || '');
|
|
54
|
+
// Navigate to the return URL or control panel
|
|
55
|
+
this.router.navigateByUrl(this.returnUrl);
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
error: (error) => {
|
|
59
|
+
this.setup_param.form_loading = false;
|
|
60
|
+
this.erro_message = error?.error?.message;
|
|
61
|
+
console.log(error);
|
|
62
|
+
// Modern ES2022+ pattern: Use Promise-based delay
|
|
63
|
+
const delay = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
64
|
+
delay(3000).then(() => {
|
|
65
|
+
this.erro_message = "";
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAuthSignInComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
72
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CideAuthSignInComponent, isStandalone: true, selector: "cide-auth-sign-in", usesInheritance: true, ngImport: i0, template: "<!-- https://play.tailwindcss.com/lfO85drpUy -->\r\n<!-- Main Div Outer Div-->\r\n<div class=\"cide-font-poppins tw-flex tw-min-h-screen tw-w-full tw-bg-gray-50 tw-py-3\">\r\n <!-- Login Forrm Wrapper -->\r\n <div class=\"tw-m-auto tw-w-96 tw-rounded-2xl tw-bg-white tw-py-6 tw-shadow-xl\">\r\n <!-- Logo Wrapper -->\r\n <div class=\"tw-m-auto tw-h-32 tw-w-64 tw-text-center\">\r\n <img src=\"https://console.cloudidesys.com/assets/Cloud%20IDE%20Logo%20Dark.png\" class=\"tw-m-auto tw-h-full\"\r\n alt=\"Cloud IDE Logo\" />\r\n </div> <!-- Entity name here -->\r\n <div class=\"tw-my-2 tw-text-center tw-text-xl tw-font-semibold\">SignIn to CloudIDE sys</div>\r\n <!-- Error Logger -->\r\n <div class=\"tw-w-full tw-select-none tw-py-1 tw-text-center tw-text-red-500 tw-h-4 tw-text-sm\">{{erro_message}}</div>\r\n \r\n <!-- section for controls -->\r\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"onSignIn()\" novalidate>\r\n <div class=\"tw-m-auto tw-pb-3 tw-pt-3\">\r\n <!-- Username -->\r\n <div class=\"tw-m-auto tw-w-80\">\r\n <cide-ele-input id=\"user_username\" formControlName=\"user_username\"></cide-ele-input>\r\n </div>\r\n <!-- Password -->\r\n <div class=\"tw-m-auto tw-mt-4 tw-w-80\">\r\n <cide-ele-input id=\"user_password_mpin\" formControlName=\"user_password\"></cide-ele-input>\r\n </div>\r\n <!-- Forgot password -->\r\n <div class=\"tw-m-auto tw-mt-3 tw-flex tw-w-80 tw-justify-between\">\r\n <div>\r\n <cide-ele-input id=\"stay_sign_in\" formControlName=\"stay_sign_in\"></cide-ele-input>\r\n </div>\r\n <div>\r\n <a routerLink=\"/auth/forgot-password\" class=\"tw-text-blue-700\">Forgot Password?</a>\r\n </div>\r\n </div> <!-- Sign in button -->\r\n <div class=\"tw-w-80 tw-m-auto tw-mt-3\">\r\n <button type=\"submit\" class=\"tw-w-full\" cideEleButton id=\"stay_sin_button\" [loading]=\"setup_param.form_loading\" [disabled]=\"!loginForm.valid\">a</button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</div>", styles: [""], dependencies: [{ kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "size"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton]", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }] }); }
|
|
73
|
+
}
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CideAuthSignInComponent, decorators: [{
|
|
75
|
+
type: Component,
|
|
76
|
+
args: [{ selector: 'cide-auth-sign-in', standalone: true, imports: [CideInputComponent, ReactiveFormsModule, CommonModule, CideEleButtonComponent, RouterLink], template: "<!-- https://play.tailwindcss.com/lfO85drpUy -->\r\n<!-- Main Div Outer Div-->\r\n<div class=\"cide-font-poppins tw-flex tw-min-h-screen tw-w-full tw-bg-gray-50 tw-py-3\">\r\n <!-- Login Forrm Wrapper -->\r\n <div class=\"tw-m-auto tw-w-96 tw-rounded-2xl tw-bg-white tw-py-6 tw-shadow-xl\">\r\n <!-- Logo Wrapper -->\r\n <div class=\"tw-m-auto tw-h-32 tw-w-64 tw-text-center\">\r\n <img src=\"https://console.cloudidesys.com/assets/Cloud%20IDE%20Logo%20Dark.png\" class=\"tw-m-auto tw-h-full\"\r\n alt=\"Cloud IDE Logo\" />\r\n </div> <!-- Entity name here -->\r\n <div class=\"tw-my-2 tw-text-center tw-text-xl tw-font-semibold\">SignIn to CloudIDE sys</div>\r\n <!-- Error Logger -->\r\n <div class=\"tw-w-full tw-select-none tw-py-1 tw-text-center tw-text-red-500 tw-h-4 tw-text-sm\">{{erro_message}}</div>\r\n \r\n <!-- section for controls -->\r\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"onSignIn()\" novalidate>\r\n <div class=\"tw-m-auto tw-pb-3 tw-pt-3\">\r\n <!-- Username -->\r\n <div class=\"tw-m-auto tw-w-80\">\r\n <cide-ele-input id=\"user_username\" formControlName=\"user_username\"></cide-ele-input>\r\n </div>\r\n <!-- Password -->\r\n <div class=\"tw-m-auto tw-mt-4 tw-w-80\">\r\n <cide-ele-input id=\"user_password_mpin\" formControlName=\"user_password\"></cide-ele-input>\r\n </div>\r\n <!-- Forgot password -->\r\n <div class=\"tw-m-auto tw-mt-3 tw-flex tw-w-80 tw-justify-between\">\r\n <div>\r\n <cide-ele-input id=\"stay_sign_in\" formControlName=\"stay_sign_in\"></cide-ele-input>\r\n </div>\r\n <div>\r\n <a routerLink=\"/auth/forgot-password\" class=\"tw-text-blue-700\">Forgot Password?</a>\r\n </div>\r\n </div> <!-- Sign in button -->\r\n <div class=\"tw-w-80 tw-m-auto tw-mt-3\">\r\n <button type=\"submit\" class=\"tw-w-full\" cideEleButton id=\"stay_sin_button\" [loading]=\"setup_param.form_loading\" [disabled]=\"!loginForm.valid\">a</button>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</div>" }]
|
|
77
|
+
}], ctorParameters: () => [] });
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi1pbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbG91ZC1pZGUtYXV0aC9zcmMvbGliL2F1dGgvc2lnbi1pbi9zaWduLWluLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nsb3VkLWlkZS1hdXRoL3NyYy9saWIvYXV0aC9zaWduLWluL3NpZ24taW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0UsT0FBTyxFQUFFLDZCQUE2QixFQUFrQyxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFheEgsTUFBTSxPQUFPLHVCQUF3QixTQUFRLDZCQUE2QjtJQVl4RTtRQUVFLEtBQUssRUFBRSxDQUFDO1FBYk0sK0JBQTBCLEdBQTRDO1lBQ3BGLGNBQWMsRUFBRSxjQUFjO1NBQy9CLENBQUE7UUFDTSxnQkFBVyxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBRXRDLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGNBQVMsR0FBVyxnQkFBZ0IsQ0FBQyxDQUFDLHFCQUFxQjtRQUMzRCxXQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDMUMsb0JBQWUsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUt0RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDO1lBQzdCLG1CQUFtQixFQUFFLElBQUksV0FBVyxDQUFjLE1BQU0sQ0FBQztZQUN6RCxhQUFhLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ2xDLGFBQWEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsUUFBUSxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUM3QixZQUFZLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDO1NBQ3BDLENBQXNDLENBQUM7SUFDMUMsQ0FBQztJQUVRLFFBQVE7UUFDZixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsc0VBQXNFO1FBQ3RFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLGVBQWUsQ0FBQztRQUUxRiwrREFBK0Q7UUFDL0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1lBQzdFLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBZSxDQUFDLEVBQUUsU0FBUyxDQUFDO2dCQUNsRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtvQkFDakIsSUFBSSxRQUFRLEVBQUUsT0FBTyxLQUFLLElBQUksRUFBRSxDQUFDO3dCQUMvQixrQ0FBa0M7d0JBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUVwRSx3REFBd0Q7d0JBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsYUFBYSxJQUFJLElBQUksQ0FBQyxDQUFDO3dCQUVwRSwyQkFBMkI7d0JBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUM7d0JBRWpGLHFFQUFxRTt3QkFDckUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUV0RCw4Q0FBOEM7d0JBQzlDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDNUMsQ0FBQztnQkFDSCxDQUFDO2dCQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQztvQkFDMUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDbkIsa0RBQWtEO29CQUNsRCxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzlFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO3dCQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztvQkFDekIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDOzhHQXZFVSx1QkFBdUI7a0dBQXZCLHVCQUF1QixvR0NwQnBDLHluRUF3Q00sMEREeEJNLGtCQUFrQix5YkFBRSxtQkFBbUIsNHJCQUFFLFlBQVksK0JBQUUsc0JBQXNCLGtYQUFFLFVBQVU7OzJGQUl4Rix1QkFBdUI7a0JBUG5DLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGxvZ2luTWV0aG9kLCBNTG9naW4gfSBmcm9tICdjbG91ZC1pZGUtbG1zLW1vZGVsJztcbmltcG9ydCB7IFJvdXRlciwgUm91dGVyTGluaywgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ2xvdWRJZGVBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL2Nsb3VkLWlkZS1hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2lkZUVsZUJ1dHRvbkNvbXBvbmVudCwgQ2lkZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnY2xvdWQtaWRlLWVsZW1lbnQnO1xuaW1wb3J0IHsgQ2lkZUx5dFNoYXJlZFdyYXBwZXJDb21wb25lbnQsIENpZGVMeXRTaGFyZWRXcmFwcGVyU2V0dXBQYXJhbSwgQXBwU3RhdGVIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnY2xvdWQtaWRlLWxheW91dCc7XG5cbmV4cG9ydCB0eXBlIEZvcm1Hcm91cE1vZGVsPFQ+ID0gRm9ybUdyb3VwPHtcbiAgW0sgaW4ga2V5b2YgVF06IEZvcm1Db250cm9sPFRbS10+XG59PlxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjaWRlLWF1dGgtc2lnbi1pbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDaWRlSW5wdXRDb21wb25lbnQsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIENvbW1vbk1vZHVsZSwgQ2lkZUVsZUJ1dHRvbkNvbXBvbmVudCwgUm91dGVyTGlua10sXG4gIHRlbXBsYXRlVXJsOiAnLi9zaWduLWluLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3NpZ24taW4uY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgQ2lkZUF1dGhTaWduSW5Db21wb25lbnQgZXh0ZW5kcyBDaWRlTHl0U2hhcmVkV3JhcHBlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBvdmVycmlkZSBzaGFyZWRfd3JhcHBlcl9zZXR1cF9wYXJhbTogUGFydGlhbDxDaWRlTHl0U2hhcmVkV3JhcHBlclNldHVwUGFyYW0+ID0ge1xuICAgIHN5cGdfcGFnZV9jb2RlOiBcImF1dGhfc2lnbl9pblwiXG4gIH1cbiAgcHVibGljIHNldHVwX3BhcmFtID0geyBmb3JtX2xvYWRpbmc6IGZhbHNlIH07XG4gIHB1YmxpYyBsb2dpbkZvcm06IEZvcm1Hcm91cE1vZGVsPE1Mb2dpbj47XG4gIHB1YmxpYyBlcnJvX21lc3NhZ2UgPSBcIlwiO1xuICBwcml2YXRlIHJldHVyblVybDogc3RyaW5nID0gJy9jb250cm9sLXBhbmVsJzsgLy8gRGVmYXVsdCByZXR1cm4gVVJMXG4gIHByaXZhdGUgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgYWN0aXZhdGVkUm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuICBwcml2YXRlIGF1dGhTZXJ2aWNlID0gaW5qZWN0KENsb3VkSWRlQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIGFwcFN0YXRlU2VydmljZSA9IGluamVjdChBcHBTdGF0ZUhlbHBlclNlcnZpY2UpO1xuICBjb25zdHJ1Y3RvcihcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMubG9naW5Gb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBjdXN0b21fbG9naW5fbWV0aG9kOiBuZXcgRm9ybUNvbnRyb2w8bG9naW5NZXRob2Q+KCdwYXNzJyksXG4gICAgICB1c2VyX3VzZXJuYW1lOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgdXNlcl9wYXNzd29yZDogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIG1waW5fcGluOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgc3RheV9zaWduX2luOiBuZXcgRm9ybUNvbnRyb2wodHJ1ZSlcbiAgICB9KSBhcyB1bmtub3duIGFzIEZvcm1Hcm91cE1vZGVsPE1Mb2dpbj47XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgLy8gR2V0IHJldHVybiBVUkwgZnJvbSByb3V0ZSBwYXJhbWV0ZXJzIG9yIGRlZmF1bHQgdG8gJy9jb250cm9sLXBhbmVsJ1xuICAgIHRoaXMucmV0dXJuVXJsID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1sncmV0dXJuVXJsJ10gfHwgJ2NvbnRyb2wtcGFuZWwnO1xuXG4gICAgLy8gSWYgdXNlciBpcyBhbHJlYWR5IGF1dGhlbnRpY2F0ZWQsIHJlZGlyZWN0IHRvIHRoZSByZXR1cm4gVVJMXG4gICAgaWYgKHRoaXMuYXV0aFNlcnZpY2UuaXNBdXRoZW50aWNhdGVkKCkgJiYgIXRoaXMuYXV0aFNlcnZpY2UuaXNUb2tlbkV4cGlyZWQoKSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJldHVyblVybCk7XG4gICAgfVxuICB9XG5cbiAgb25TaWduSW4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubG9naW5Gb3JtLnZhbGlkKSB7XG4gICAgICB0aGlzLnNldHVwX3BhcmFtLmZvcm1fbG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmF1dGhTZXJ2aWNlLnNpZ25Jbih0aGlzLmxvZ2luRm9ybT8udmFsdWUgYXMgTUxvZ2luKT8uc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5zdWNjZXNzID09PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBTdG9yZSB1c2VyIGRhdGEgaW4gYXV0aCBzZXJ2aWNlXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLnN0b3JlVXNlckRhdGEocmVzcG9uc2U/LmRhdGE/LmF1dGhfdXNlcl9tc3QgfHwge30pO1xuXG4gICAgICAgICAgICAvLyBTeW5jaHJvbml6ZSBBcHBTdGF0ZVNlcnZpY2Ugd2l0aCB0aGUgc2FtZSB1c2VyIGRhdGEgIFxuICAgICAgICAgICAgdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc2V0VXNlcihyZXNwb25zZT8uZGF0YT8uYXV0aF91c2VyX21zdCB8fCBudWxsKTtcblxuICAgICAgICAgICAgLy8gU3RvcmUgYWN0aXZlIGVudGl0eSBkYXRhXG4gICAgICAgICAgICB0aGlzLmFwcFN0YXRlU2VydmljZS5zZXRBY3RpdmVFbnRpdHkocmVzcG9uc2U/LmRhdGE/LmNvcmVfc3lzdGVtX2VudGl0eSB8fCBudWxsKTtcblxuICAgICAgICAgICAgLy8gU3RvcmUgdG9rZW4gdGhyb3VnaCB0aGUgc2VydmljZSBzZXR0ZXIgd2hpY2ggc2F2ZXMgdG8gbG9jYWxTdG9yYWdlXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhfdG9rZW4gPSAocmVzcG9uc2U/LnRva2VuIHx8ICcnKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIHJldHVybiBVUkwgb3IgY29udHJvbCBwYW5lbFxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh0aGlzLnJldHVyblVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXR1cF9wYXJhbS5mb3JtX2xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmVycm9fbWVzc2FnZSA9IGVycm9yPy5lcnJvcj8ubWVzc2FnZTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgICAgLy8gTW9kZXJuIEVTMjAyMisgcGF0dGVybjogVXNlIFByb21pc2UtYmFzZWQgZGVsYXlcbiAgICAgICAgICBjb25zdCBkZWxheSA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgICAgICAgICBkZWxheSgzMDAwKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZXJyb19tZXNzYWdlID0gXCJcIjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59IiwiPCEtLSBodHRwczovL3BsYXkudGFpbHdpbmRjc3MuY29tL2xmTzg1ZHJwVXkgLS0+XHJcbjwhLS0gTWFpbiBEaXYgT3V0ZXIgRGl2LS0+XHJcbjxkaXYgY2xhc3M9XCJjaWRlLWZvbnQtcG9wcGlucyB0dy1mbGV4IHR3LW1pbi1oLXNjcmVlbiB0dy13LWZ1bGwgdHctYmctZ3JheS01MCB0dy1weS0zXCI+XHJcbiAgPCEtLSBMb2dpbiBGb3JybSBXcmFwcGVyIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJ0dy1tLWF1dG8gdHctdy05NiB0dy1yb3VuZGVkLTJ4bCB0dy1iZy13aGl0ZSB0dy1weS02IHR3LXNoYWRvdy14bFwiPlxyXG4gICAgPCEtLSBMb2dvIFdyYXBwZXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwidHctbS1hdXRvIHR3LWgtMzIgdHctdy02NCB0dy10ZXh0LWNlbnRlclwiPlxyXG4gICAgICA8aW1nIHNyYz1cImh0dHBzOi8vY29uc29sZS5jbG91ZGlkZXN5cy5jb20vYXNzZXRzL0Nsb3VkJTIwSURFJTIwTG9nbyUyMERhcmsucG5nXCIgY2xhc3M9XCJ0dy1tLWF1dG8gdHctaC1mdWxsXCJcclxuICAgICAgICBhbHQ9XCJDbG91ZCBJREUgTG9nb1wiIC8+XHJcbiAgICA8L2Rpdj4gPCEtLSBFbnRpdHkgbmFtZSBoZXJlIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInR3LW15LTIgdHctdGV4dC1jZW50ZXIgdHctdGV4dC14bCB0dy1mb250LXNlbWlib2xkXCI+U2lnbkluIHRvIENsb3VkSURFIHN5czwvZGl2PlxyXG4gICAgIDwhLS0gRXJyb3IgTG9nZ2VyIC0tPlxyXG4gICAgIDxkaXYgY2xhc3M9XCJ0dy13LWZ1bGwgdHctc2VsZWN0LW5vbmUgdHctcHktMSB0dy10ZXh0LWNlbnRlciB0dy10ZXh0LXJlZC01MDAgdHctaC00IHR3LXRleHQtc21cIj57e2Vycm9fbWVzc2FnZX19PC9kaXY+XHJcbiAgICAgIFxyXG4gICAgPCEtLSBzZWN0aW9uIGZvciBjb250cm9scyAtLT5cclxuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwibG9naW5Gb3JtXCIgKG5nU3VibWl0KT1cIm9uU2lnbkluKClcIiBub3ZhbGlkYXRlPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidHctbS1hdXRvIHR3LXBiLTMgdHctcHQtM1wiPlxyXG4gICAgICAgIDwhLS0gVXNlcm5hbWUgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInR3LW0tYXV0byB0dy13LTgwXCI+XHJcbiAgICAgICAgICA8Y2lkZS1lbGUtaW5wdXQgaWQ9XCJ1c2VyX3VzZXJuYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwidXNlcl91c2VybmFtZVwiPjwvY2lkZS1lbGUtaW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBQYXNzd29yZCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidHctbS1hdXRvIHR3LW10LTQgdHctdy04MFwiPlxyXG4gICAgICAgICAgPGNpZGUtZWxlLWlucHV0IGlkPVwidXNlcl9wYXNzd29yZF9tcGluXCIgZm9ybUNvbnRyb2xOYW1lPVwidXNlcl9wYXNzd29yZFwiPjwvY2lkZS1lbGUtaW5wdXQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBGb3Jnb3QgcGFzc3dvcmQgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInR3LW0tYXV0byB0dy1tdC0zIHR3LWZsZXggdHctdy04MCB0dy1qdXN0aWZ5LWJldHdlZW5cIj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxjaWRlLWVsZS1pbnB1dCBpZD1cInN0YXlfc2lnbl9pblwiIGZvcm1Db250cm9sTmFtZT1cInN0YXlfc2lnbl9pblwiPjwvY2lkZS1lbGUtaW5wdXQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxhIHJvdXRlckxpbms9XCIvYXV0aC9mb3Jnb3QtcGFzc3dvcmRcIiBjbGFzcz1cInR3LXRleHQtYmx1ZS03MDBcIj5Gb3Jnb3QgUGFzc3dvcmQ/PC9hPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+ICAgICAgICA8IS0tIFNpZ24gaW4gYnV0dG9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0dy13LTgwIHR3LW0tYXV0byB0dy1tdC0zXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cInR3LXctZnVsbFwiIGNpZGVFbGVCdXR0b24gaWQ9XCJzdGF5X3Npbl9idXR0b25cIiBbbG9hZGluZ109XCJzZXR1cF9wYXJhbS5mb3JtX2xvYWRpbmdcIiBbZGlzYWJsZWRdPVwiIWxvZ2luRm9ybS52YWxpZFwiPmE8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import { RouterOutlet } from '@angular/router';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class CloudIdeAuthComponent {
|
|
5
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CloudIdeAuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
6
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CloudIdeAuthComponent, isStandalone: true, selector: "cide-auth-wrapper", ngImport: i0, template: `
|
|
7
|
+
<router-outlet></router-outlet>
|
|
8
|
+
`, isInline: true, styles: [""], dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CloudIdeAuthComponent, decorators: [{
|
|
11
|
+
type: Component,
|
|
12
|
+
args: [{ selector: 'cide-auth-wrapper', standalone: true, imports: [RouterOutlet], template: `
|
|
13
|
+
<router-outlet></router-outlet>
|
|
14
|
+
` }]
|
|
15
|
+
}] });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQtaWRlLWF1dGguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWF1dGgvc3JjL2xpYi9jbG91ZC1pZGUtYXV0aC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0FBVy9DLE1BQU0sT0FBTyxxQkFBcUI7OEdBQXJCLHFCQUFxQjtrR0FBckIscUJBQXFCLDZFQUx0Qjs7R0FFVCwwRUFIUyxZQUFZOzsyRkFNWCxxQkFBcUI7a0JBVGpDLFNBQVM7K0JBQ0UsbUJBQW1CLGNBQ2pCLElBQUksV0FDUCxDQUFDLFlBQVksQ0FBQyxZQUNiOztHQUVUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlck91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NpZGUtYXV0aC13cmFwcGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtSb3V0ZXJPdXRsZXRdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XHJcbiAgYCxcclxuICBzdHlsZXM6IGBgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbG91ZElkZUF1dGhDb21wb25lbnQge1xyXG5cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const authRoutes = {
|
|
2
|
+
path: "auth",
|
|
3
|
+
loadComponent: () => import('./cloud-ide-auth.component').then(c => c.CloudIdeAuthComponent),
|
|
4
|
+
children: [
|
|
5
|
+
{
|
|
6
|
+
path: "",
|
|
7
|
+
pathMatch: 'full',
|
|
8
|
+
redirectTo: 'sign-in'
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
path: "sign-in",
|
|
12
|
+
loadComponent: () => import('./auth/sign-in/sign-in.component').then(c => c.CideAuthSignInComponent)
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
path: "forgot-password",
|
|
16
|
+
loadComponent: () => import('./auth/forgot-password/forgot-password.component').then(c => c.CideAuthForgotPasswordComponent)
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
path: "reset-password/:rout_token",
|
|
20
|
+
loadComponent: () => import('./auth/reset-password/reset-password.component').then(c => c.CideAuthResetPasswordComponent)
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQtaWRlLWF1dGgucm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xvdWQtaWRlLWF1dGgvc3JjL2xpYi9jbG91ZC1pZGUtYXV0aC5yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUN2QjtJQUNJLElBQUksRUFBRSxNQUFNO0lBQ1osYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztJQUM1RixRQUFRLEVBQUU7UUFDTjtZQUNJLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLE1BQU07WUFDakIsVUFBVSxFQUFFLFNBQVM7U0FDeEI7UUFDRDtZQUNJLElBQUksRUFBRSxTQUFTO1lBQ2YsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQztTQUN2RztRQUNEO1lBQ0ksSUFBSSxFQUFFLGlCQUFpQjtZQUN2QixhQUFhLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGtEQUFrRCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDO1NBQy9IO1FBQ0Q7WUFDSSxJQUFJLEVBQUUsNEJBQTRCO1lBQ2xDLGFBQWEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsZ0RBQWdELENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUM7U0FDNUg7S0FDSjtDQUNKLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5leHBvcnQgY29uc3QgYXV0aFJvdXRlczogUm91dGUgPVxyXG57XHJcbiAgICBwYXRoOiBcImF1dGhcIixcclxuICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9jbG91ZC1pZGUtYXV0aC5jb21wb25lbnQnKS50aGVuKGMgPT4gYy5DbG91ZElkZUF1dGhDb21wb25lbnQpLFxyXG4gICAgY2hpbGRyZW46IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHBhdGg6IFwiXCIsXHJcbiAgICAgICAgICAgIHBhdGhNYXRjaDogJ2Z1bGwnLFxyXG4gICAgICAgICAgICByZWRpcmVjdFRvOiAnc2lnbi1pbidcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF0aDogXCJzaWduLWluXCIsXHJcbiAgICAgICAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9hdXRoL3NpZ24taW4vc2lnbi1pbi5jb21wb25lbnQnKS50aGVuKGMgPT4gYy5DaWRlQXV0aFNpZ25JbkNvbXBvbmVudClcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcGF0aDogXCJmb3Jnb3QtcGFzc3dvcmRcIixcclxuICAgICAgICAgICAgbG9hZENvbXBvbmVudDogKCkgPT4gaW1wb3J0KCcuL2F1dGgvZm9yZ290LXBhc3N3b3JkL2ZvcmdvdC1wYXNzd29yZC5jb21wb25lbnQnKS50aGVuKGMgPT4gYy5DaWRlQXV0aEZvcmdvdFBhc3N3b3JkQ29tcG9uZW50KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwYXRoOiBcInJlc2V0LXBhc3N3b3JkLzpyb3V0X3Rva2VuXCIsXHJcbiAgICAgICAgICAgIGxvYWRDb21wb25lbnQ6ICgpID0+IGltcG9ydCgnLi9hdXRoL3Jlc2V0LXBhc3N3b3JkL3Jlc2V0LXBhc3N3b3JkLmNvbXBvbmVudCcpLnRoZW4oYyA9PiBjLkNpZGVBdXRoUmVzZXRQYXNzd29yZENvbXBvbmVudClcclxuICAgICAgICB9XHJcbiAgICBdXHJcbn1cclxuIl19
|