Skip to content

Commit 348bff1

Browse files
committed
add fusio sdk config and forRoot method
1 parent 4985ba5 commit 348bff1

File tree

10 files changed

+122
-57
lines changed

10 files changed

+122
-57
lines changed

package-lock.json

Lines changed: 57 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
"@angular/router": "~13.3.0",
2121
"@ng-bootstrap/ng-bootstrap": "^12.1.2",
2222
"fusio-sdk": "^2.2.5",
23+
"ngx-captcha": "^11.0.0",
24+
"ngx-gravatar": "^13.0.0",
2325
"ng-packagr": "~13.3.0",
2426
"rxjs": "~7.5.0",
2527
"tslib": "^2.3.0",

projects/fusio-sdk/src/lib/component/login/login.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ import {Message} from "fusio-sdk/dist/src/generated/consumer/Message";
33
import axios from "axios";
44
import {Router} from "@angular/router";
55
import {User_Account} from "fusio-sdk/dist/src/generated/consumer/User_Account";
6-
import {Provider, ProviderService} from "../../service/provider.service";
6+
import {ProviderService} from "../../service/provider.service";
77
import {UserService} from "../../service/user.service";
88
import {ConsumerService} from "../../service/consumer.service";
9+
import {Provider} from "../../config/config";
910

1011
@Component({
1112
selector: 'fusio-login',

projects/fusio-sdk/src/lib/component/password/reset/reset.component.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import {Component, OnInit} from '@angular/core';
1+
import {Component, Inject, OnInit} from '@angular/core';
22
import {Message} from "fusio-sdk/dist/src/generated/consumer/Message";
33
import {ActivatedRoute} from "@angular/router";
44
import axios from "axios";
55
import {User_Email} from "fusio-sdk/dist/src/generated/consumer/User_Email";
6-
import {RecaptchaConfig} from "../../register/register.component";
76
import {ConsumerService} from "../../../service/consumer.service";
7+
import {Config, FUSIO_CONFIG} from "../../../config/config";
88

99
@Component({
1010
selector: 'fusio-password-reset',
@@ -22,11 +22,11 @@ export class ResetComponent implements OnInit {
2222
response?: Message;
2323
loading = false
2424

25-
constructor(private consumer: ConsumerService, protected route: ActivatedRoute, private config: RecaptchaConfig) {
25+
constructor(private consumer: ConsumerService, protected route: ActivatedRoute, @Inject(FUSIO_CONFIG) private config: Config) {
2626
}
2727

2828
ngOnInit(): void {
29-
let captchaKey = this.config.getKey()
29+
let captchaKey = this.config.recaptcha;
3030
if (captchaKey) {
3131
this.captchaKey = captchaKey;
3232
}

projects/fusio-sdk/src/lib/component/register/register.component.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import {Component, OnInit} from '@angular/core';
1+
import {Component, Inject, OnInit} from '@angular/core';
22
import {Message} from "fusio-sdk/dist/src/generated/consumer/Message";
33
import axios from "axios";
44
import {User_Register} from "fusio-sdk/dist/src/generated/consumer/User_Register";
55
import {ConsumerService} from "../../service/consumer.service";
6+
import {Config, FUSIO_CONFIG} from "../../config/config";
67

78
@Component({
89
selector: 'fusio-register',
@@ -23,11 +24,11 @@ export class RegisterComponent implements OnInit {
2324
response?: Message;
2425
loading = false
2526

26-
constructor(private consumer: ConsumerService, private config: RecaptchaConfig) {
27+
constructor(private consumer: ConsumerService, @Inject(FUSIO_CONFIG) private config: Config) {
2728
}
2829

2930
ngOnInit(): void {
30-
let captchaKey = this.config.getKey()
31+
let captchaKey = this.config.recaptcha;
3132
if (captchaKey) {
3233
this.captchaKey = captchaKey;
3334
}
@@ -72,7 +73,3 @@ export class RegisterComponent implements OnInit {
7273
}
7374

7475
}
75-
76-
export interface RecaptchaConfig {
77-
getKey(): string|null;
78-
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import {InjectionToken} from "@angular/core";
2+
3+
export interface Config {
4+
baseUrl: string,
5+
providers?: Array<Provider>,
6+
recaptcha?: string,
7+
}
8+
9+
export interface Provider {
10+
name: string,
11+
icon: string,
12+
key: string
13+
url: string,
14+
params: Record<string, string>
15+
}
16+
17+
export const FUSIO_CONFIG = new InjectionToken<Config>('FUSIO_CONFIG');

projects/fusio-sdk/src/lib/fusio-sdk.module.ts

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {NgModule} from '@angular/core';
1+
import {ModuleWithProviders, NgModule, Optional, SkipSelf} from '@angular/core';
22
import {NgbModule} from "@ng-bootstrap/ng-bootstrap";
33
import {CommonModule} from "@angular/common";
44
import {FormsModule} from "@angular/forms";
@@ -17,6 +17,8 @@ import {ConfirmComponent} from "./component/password/confirm/confirm.component";
1717
import {ResetComponent} from "./component/password/reset/reset.component";
1818
import {RegisterComponent} from "./component/register/register.component";
1919
import {ActivateComponent} from "./component/register/activate/activate.component";
20+
import {Config, FUSIO_CONFIG} from "./config/config";
21+
import {NgxCaptchaModule} from "ngx-captcha";
2022

2123
@NgModule({
2224
declarations: [
@@ -40,6 +42,7 @@ import {ActivateComponent} from "./component/register/activate/activate.componen
4042
FormsModule,
4143
RouterModule,
4244
NgbModule,
45+
NgxCaptchaModule,
4346
],
4447
exports: [
4548
EmptyComponent,
@@ -50,4 +53,23 @@ import {ActivateComponent} from "./component/register/activate/activate.componen
5053
SidebarComponent,
5154
]
5255
})
53-
export class FusioSdkModule { }
56+
export class FusioSdkModule {
57+
58+
constructor(@Optional() @SkipSelf() parentModule?: FusioSdkModule) {
59+
if (parentModule) {
60+
throw new Error(
61+
'FusioSdkModule is already loaded. Import it in the AppModule only');
62+
}
63+
}
64+
65+
static forRoot(config?: Config): ModuleWithProviders<FusioSdkModule> {
66+
return({
67+
ngModule: FusioSdkModule,
68+
providers: [{
69+
provide: FUSIO_CONFIG,
70+
useValue: config
71+
}]
72+
});
73+
}
74+
75+
}

projects/fusio-sdk/src/lib/service/fusio.service.ts

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import {Injectable} from '@angular/core';
1+
import {Inject, Injectable} from '@angular/core';
22
import {TokenStoreInterface} from "sdkgen-client/dist/src/TokenStoreInterface";
33
import {SessionTokenStore} from "sdkgen-client/dist/src/TokenStore/SessionTokenStore";
44
import {ClientCredentials} from "sdkgen-client/dist/src/Credentials/ClientCredentials";
55
import {ClientAbstract, CredentialsInterface} from "sdkgen-client";
6+
import {Config, FUSIO_CONFIG} from "../config/config";
67

78
@Injectable({
89
providedIn: 'root'
@@ -12,13 +13,8 @@ export abstract class FusioService<T extends ClientAbstract> {
1213
private readonly baseUrl: string;
1314
private readonly store: TokenStoreInterface;
1415

15-
constructor() {
16-
let baseUrl;
17-
if (typeof FUSIO_URL === 'string') {
18-
baseUrl = FUSIO_URL;
19-
} else {
20-
baseUrl = FusioService.guessFusioEndpointUrl(false);
21-
}
16+
constructor(@Inject(FUSIO_CONFIG) private config: Config) {
17+
let baseUrl = this.config.baseUrl;
2218

2319
this.baseUrl = FusioService.normalizeBaseUrl(baseUrl);
2420
this.store = new SessionTokenStore();
@@ -92,13 +88,4 @@ export abstract class FusioService<T extends ClientAbstract> {
9288
}
9389
}
9490

95-
private static guessFusioEndpointUrl(urlRewrite: boolean) {
96-
let url = window.location.href
97-
const pos = url.lastIndexOf('/fusio')
98-
if (pos !== -1) {
99-
url = url.substring(0, pos)
100-
}
101-
return url + (urlRewrite ? '/' : '/index.php/')
102-
}
103-
10491
}

projects/fusio-sdk/src/lib/service/provider.service.ts

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import {Injectable} from '@angular/core';
2-
import {LocationStrategy, PlatformLocation} from "@angular/common";
1+
import {Inject, Injectable} from '@angular/core';
2+
import {LocationStrategy} from "@angular/common";
3+
import {Config, FUSIO_CONFIG, Provider} from "../config/config";
34

45
@Injectable({
56
providedIn: 'root'
@@ -8,7 +9,7 @@ export class ProviderService {
89

910
providers: Array<Provider> = [];
1011

11-
constructor(private location: LocationStrategy, private config: ProviderServiceConfig) {
12+
constructor(private location: LocationStrategy, @Inject(FUSIO_CONFIG) private config: Config) {
1213
this.providers = this.getProviders();
1314
}
1415

@@ -66,7 +67,7 @@ export class ProviderService {
6667
}
6768

6869
public getProviders(): Array<Provider> {
69-
return this.config.getProviders();
70+
return this.config.providers || [];
7071
}
7172

7273
private getProviderByName(name: string): Provider|undefined {
@@ -91,25 +92,7 @@ export class ProviderService {
9192

9293
}
9394

94-
export interface Provider {
95-
name: string,
96-
icon: string,
97-
key: string
98-
url: string,
99-
params: Record<string, string>
100-
}
101-
10295
export interface Verification {
10396
clientId: string,
10497
redirectUri: string,
10598
}
106-
107-
enum ProviderType {
108-
github,
109-
google,
110-
facebook,
111-
}
112-
113-
export interface ProviderServiceConfig {
114-
getProviders(): Array<Provider>;
115-
}

projects/fusio-sdk/src/public-api.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,11 @@ export * from './lib/component/sidebar/sidebar.component';
2222

2323
export * from './lib/guard/authentication.guard';
2424

25+
export * from './lib/service/backend.service';
26+
export * from './lib/service/consumer.service';
2527
export * from './lib/service/fusio.service';
2628
export * from './lib/service/help.service';
29+
export * from './lib/service/provider.service';
2730
export * from './lib/service/user.service';
2831

2932
export * from './lib/fusio-sdk.module';
30-
31-
declare global {
32-
var FUSIO_URL: string | undefined;
33-
}

0 commit comments

Comments
 (0)