diff --git a/dmp-admin/package-lock.json b/dmp-admin/package-lock.json index 976e4eca1..629f89a74 100644 --- a/dmp-admin/package-lock.json +++ b/dmp-admin/package-lock.json @@ -23,6 +23,14 @@ "tslib": "1.7.1" } }, + "@angular/cdk": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-5.1.1.tgz", + "integrity": "sha512-V8kQmwf1PhtxiiE0cS1x9SW7/VFrJ7LcL9RqxUOMmJMl8kVR43dQBEeuVOOYJlGo9LAR5ctfemlJHwd9+PoHew==", + "requires": { + "tslib": "1.7.1" + } + }, "@angular/cli": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.3.1.tgz", @@ -159,6 +167,14 @@ "integrity": "sha1-RScBGllJZ6OW7/PAXtFb1MhtUbc=", "dev": true }, + "@angular/material": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-5.1.1.tgz", + "integrity": "sha512-RC3xkbX35daNq4w+XBmm+Vgi16TJvLbSkw5xkdxCqLSysFx9ymwDOjUbLeHt2nJtvYWvnSjuVukdSAeaBknTFg==", + "requires": { + "tslib": "1.7.1" + } + }, "@angular/platform-browser": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.4.3.tgz", diff --git a/dmp-admin/package.json b/dmp-admin/package.json index 60f7017f3..11834b0e5 100644 --- a/dmp-admin/package.json +++ b/dmp-admin/package.json @@ -13,11 +13,13 @@ "private": true, "dependencies": { "@angular/animations": "^4.2.4", + "@angular/cdk": "^5.1.1", "@angular/common": "^4.2.4", "@angular/compiler": "^4.2.4", "@angular/core": "^4.2.4", "@angular/forms": "^4.2.4", "@angular/http": "^4.2.4", + "@angular/material": "^5.1.1", "@angular/platform-browser": "^4.2.4", "@angular/platform-browser-dynamic": "^4.2.4", "@angular/router": "^4.2.4", diff --git a/dmp-admin/src/app/app.module.ts b/dmp-admin/src/app/app.module.ts index 6f798be24..a1ff61f0b 100644 --- a/dmp-admin/src/app/app.module.ts +++ b/dmp-admin/src/app/app.module.ts @@ -1,13 +1,15 @@ -import { CheckBoxComponent } from './components/checkbox/checkbox-component'; -import { FreeTextData } from './models/DataField/FreeTextData'; -import { BooleanDecisionComponent } from './components/booleanDecision/booleanDecision-component'; -import { FreeTextComponent } from './components/freetext/freetext-component'; -import { TextAreaComponent } from './components/textarea/textarea-component'; -import { RadioBoxComponent } from './components/radiobox/radiobox-component'; -import { WordlistComponent } from './components/wordlist/wordlist-component'; -import { AutocompleteComponent } from './components/autocomplete/autocomplete-component'; -import { ComboboxComponent } from './components/combobox/combobox-component'; +// import { CheckBoxComponent } from './components/checkbox/checkbox-component'; +// import { FreeTextData } from './models/DataField/FreeTextData'; +// import { BooleanDecisionComponent } from './components/booleanDecision/booleanDecision-component'; +// import { FreeTextComponent } from './components/freetext/freetext-component'; +// import { TextAreaComponent } from './components/textarea/textarea-component'; +// import { RadioBoxComponent } from './components/radiobox/radiobox-component'; +// import { WordlistComponent } from './components/wordlist/wordlist-component'; +// import { AutocompleteComponent } from './components/autocomplete/autocomplete-component'; +// import { ComboboxComponent } from './components/combobox/combobox-component'; +//import { MaterialModule } from './shared/material/material.module'; +import { AuthService } from './services/auth/auth.service'; import { BrowserModule } from '@angular/platform-browser'; import { RouterModule, Routes } from '@angular/router'; @@ -51,7 +53,6 @@ import { DatarepoTableFilterPipe } from './pipes/datarepo-table-filter.pipe'; import { GooggleSignInComponent } from './login/googgle-sign-in/googgle-sign-in.component'; import { MainSignInComponent } from './login/main-sign-in/main-sign-in.component'; -import { ProjectEditorComponent } from './managers/project-editor/project-editor.component'; import { DatasetsViewerComponent } from './datasets-viewer/datasets-viewer.component'; import { AppComponent } from './app.component'; import { FormsModule } from '@angular/forms'; @@ -59,25 +60,21 @@ import { ProfileEditorComponent } from './bootstrap/profile-editor/profile-edito import { PropertiesEditorComponent } from './bootstrap/properties-editor/properties-editor.component'; import { NewDatasetComponent } from './bootstrap/new-dataset/new-dataset.component'; import { ConfirmationComponent } from './bootstrap/confirmation/confirmation.component'; -import { DmpEditorComponent } from './managers/dmp-editor/dmp-editor.component'; import { MainWindowComponent } from './main-window/main-window.component'; import { AppRouting } from './routes'; import { DmpProfileEditorComponent } from './managers/dmp-profile-editor/dmp-profile-editor.component'; -import { OrganisationEditorComponent } from './managers/organisation-editor/organisation-editor.component'; -import { RegistryEditorComponent } from './managers/registry-editor/registry-editor.component'; -import { ServiceEditorComponent } from './managers/service-editor/service-editor.component'; -import { ResearcherEditorComponent } from './managers/researcher-editor/researcher-editor.component'; -import { DatareposEditorComponent } from './managers/datarepos-editor/datarepos-editor.component'; import { DatasetprofileEditorComponent } from './managers/datasetprofile-editor/datasetprofile-editor.component'; import { DatasetProfileGUIEditorComponent } from './dataset-profile-gui-editor/dataset-profile-gui-editor.component'; -import { FieldFormComponent } from './dataset-profile-form/field-form/field-form.component'; -import { FormComponent } from './dataset-profile-form/form/form.component'; -import { GroupFieldFormComponent } from './dataset-profile-form/groupfield-form/groupfield-form.component'; -import { RuleFormComponent } from './dataset-profile-form/rule-component/rule.component'; -import { SectionFormComponent } from './dataset-profile-form/section-form/section-form.component'; -import { PageFormComponent } from './dataset-profile-form/page-form/page-component'; -import { CompositeFieldFormComponent } from './dataset-profile-form/compositefield-form/compositefield-form.component'; +import { DatasetProfileModule } from './dataset-profile-form/dataset-profile.module'; + +// import { FieldFormComponent } from './dataset-profile-form/field-form/field-form.component'; +// import { FormComponent } from './dataset-profile-form/form/form.component'; +// import { GroupFieldFormComponent } from './dataset-profile-form/groupfield-form/groupfield-form.component'; +// import { RuleFormComponent } from './dataset-profile-form/rule-component/rule.component'; +// import { SectionFormComponent } from './dataset-profile-form/section-form/section-form.component'; +// import { PageFormComponent } from './dataset-profile-form/page-form/page-component'; +// import { CompositeFieldFormComponent } from './dataset-profile-form/compositefield-form/compositefield-form.component'; @@ -97,38 +94,31 @@ import { CompositeFieldFormComponent } from './dataset-profile-form/compositefie AppComponent, GooggleSignInComponent, - FieldFormComponent, - FormComponent, - GroupFieldFormComponent, - RuleFormComponent, - SectionFormComponent, - PageFormComponent, - CompositeFieldFormComponent, - ComboboxComponent, - AutocompleteComponent, - WordlistComponent, - RadioBoxComponent, + // FieldFormComponent, + // FormComponent, + // GroupFieldFormComponent, + // RuleFormComponent, + // SectionFormComponent, + // PageFormComponent, + // CompositeFieldFormComponent, + // ComboboxComponent, + // AutocompleteComponent, + // WordlistComponent, + // RadioBoxComponent, DatasetsViewerComponent, ProfileEditorComponent, PropertiesEditorComponent, NewDatasetComponent, ConfirmationComponent, - DmpEditorComponent, MainWindowComponent, - ProjectEditorComponent, DmpProfileEditorComponent, - OrganisationEditorComponent, - RegistryEditorComponent, - ServiceEditorComponent, MainSignInComponent, - ResearcherEditorComponent, - DatareposEditorComponent, DatasetprofileEditorComponent, DatasetProfileGUIEditorComponent, - TextAreaComponent, - CheckBoxComponent, - BooleanDecisionComponent, - FreeTextComponent + // TextAreaComponent, + // CheckBoxComponent, + // BooleanDecisionComponent, + // FreeTextComponent ], imports: [ BrowserModule, @@ -142,7 +132,8 @@ import { CompositeFieldFormComponent } from './dataset-profile-form/compositefie NgbModule.forRoot(), AppRouting ], - providers: [{ + providers: [AuthService, + { provide: HTTP_INTERCEPTORS, useClass: GlobalInterceptor, multi: true, diff --git a/dmp-admin/src/app/dataset-profile-form/dataset-profile.module.ts b/dmp-admin/src/app/dataset-profile-form/dataset-profile.module.ts new file mode 100644 index 000000000..e01749a41 --- /dev/null +++ b/dmp-admin/src/app/dataset-profile-form/dataset-profile.module.ts @@ -0,0 +1,77 @@ +import { NgModule } from "@angular/core"; +import { CommonModule } from '@angular/common'; +import { FormsModule,ReactiveFormsModule } from '@angular/forms'; + +import { DatasetProfileRoutes } from "./dataset-profile.router"; +import { RouterModule } from "@angular/router"; + +import { FormComponent } from './form/form.component'; +import { GroupFieldFormComponent } from './groupfield-form/groupfield-form.component'; +import { RuleFormComponent } from './rule-component/rule.component'; +import { SectionFormComponent } from './section-form/section-form.component'; +import { PageFormComponent } from './page-form/page-component'; +import { CompositeFieldFormComponent } from './compositefield-form/compositefield-form.component'; +import { FieldFormComponent } from './field-form/field-form.component'; +import { HttpClientModule, HttpClient } from "@angular/common/http"; + +import { CheckBoxComponent } from '../components/checkbox/checkbox-component'; +import { FreeTextData } from '../models/DataField/FreeTextData'; +import { BooleanDecisionComponent } from '../components/booleanDecision/booleanDecision-component'; +import { FreeTextComponent } from '../components/freetext/freetext-component'; +import { TextAreaComponent } from '../components/textarea/textarea-component'; +import { RadioBoxComponent } from '../components/radiobox/radiobox-component'; +import { WordlistComponent } from '../components/wordlist/wordlist-component'; +import { AutocompleteComponent } from '../components/autocomplete/autocomplete-component'; +import { ComboboxComponent } from '../components/combobox/combobox-component'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + HttpClientModule, + ReactiveFormsModule, + RouterModule, + RouterModule.forChild(DatasetProfileRoutes) + ], + + declarations: [ + FormComponent, + GroupFieldFormComponent, + RuleFormComponent, + SectionFormComponent, + PageFormComponent, + CompositeFieldFormComponent, + FieldFormComponent, + TextAreaComponent, + CheckBoxComponent, + BooleanDecisionComponent, + FreeTextComponent, + ComboboxComponent, + AutocompleteComponent, + WordlistComponent, + RadioBoxComponent + ], + + exports: [ + FormComponent, + GroupFieldFormComponent, + RuleFormComponent, + SectionFormComponent, + PageFormComponent, + CompositeFieldFormComponent, + FieldFormComponent, + TextAreaComponent, + CheckBoxComponent, + BooleanDecisionComponent, + FreeTextComponent, + ComboboxComponent, + AutocompleteComponent, + WordlistComponent, + RadioBoxComponent + ], + providers:[ + ] +}) + + +export class DatasetProfileModule { } \ No newline at end of file diff --git a/dmp-admin/src/app/dataset-profile-form/dataset-profile.router.ts b/dmp-admin/src/app/dataset-profile-form/dataset-profile.router.ts new file mode 100644 index 000000000..44e2337e6 --- /dev/null +++ b/dmp-admin/src/app/dataset-profile-form/dataset-profile.router.ts @@ -0,0 +1,15 @@ +import { RouterModule, Routes } from '@angular/router'; +import { FormComponent } from 'app/dataset-profile-form/form/form.component'; + +export const DatasetProfileRoutes: Routes = [ + //{ path: "new/:dmpId", component: DatasetWizardComponent, canActivate: [AuthGuard] } + { + path: ':id', + component: FormComponent + }, + { + path: '', + component: FormComponent + } + +]; diff --git a/dmp-admin/src/app/dataset-profile-form/form/form.component.ts b/dmp-admin/src/app/dataset-profile-form/form/form.component.ts index 993f34174..381b65890 100644 --- a/dmp-admin/src/app/dataset-profile-form/form/form.component.ts +++ b/dmp-admin/src/app/dataset-profile-form/form/form.component.ts @@ -29,11 +29,11 @@ export class FormComponent { ngOnInit() { - this.dataModel = new JsonSerializer().fromJSONObject(new DatasetProfileModel(), DatasetProfileModel); + this.dataModel = JsonSerializer.fromJSONObject(new DatasetProfileModel(), DatasetProfileModel); this.form = this.dataModel.buildForm(); if (this.profileID) { this.datasetProfileService.getDatasetProfileById(this.profileID).subscribe((data) => { - this.dataModel = new JsonSerializer().fromJSONObject(data, DatasetProfileModel); + this.dataModel = JsonSerializer.fromJSONObject(data, DatasetProfileModel); this.form = this.dataModel.buildForm(); }); } diff --git a/dmp-admin/src/app/guards/auth.guard.ts b/dmp-admin/src/app/guards/auth.guard.ts new file mode 100644 index 000000000..1117cbfe2 --- /dev/null +++ b/dmp-admin/src/app/guards/auth.guard.ts @@ -0,0 +1,17 @@ +import { AuthService } from '../services/auth/auth.service'; +import { Injectable } from '@angular/core'; +import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; + +@Injectable() +export class AuthGuard implements CanActivate { + + constructor(private auth: AuthService, private router: Router) { } + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + let url: string = state.url; + if (!this.auth.current()) { + this.router.navigate(['/unauthorized'], { queryParams: { returnUrl: url } }); + return false; + } + return true; + } +} diff --git a/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.ts b/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.ts index 3879e22fe..bc305972c 100644 --- a/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.ts +++ b/dmp-admin/src/app/login/main-sign-in/main-sign-in.component.ts @@ -2,10 +2,13 @@ import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { NativeLoginService } from '../../services/login/native-login.service'; import { TokenService, TokenProvider } from '../../services/login/token.service'; -import {Router} from '@angular/router'; +import { Router } from '@angular/router'; import '../../../assets/custom.js'; -declare function simple_notifier(type: string, title: string, message:string): any; +import { AuthService } from 'app/services/auth/auth.service'; +import { Credential } from 'app/models/login/Credential'; +import { ActivatedRoute, Params } from '@angular/router'; +import { NgZone } from '@angular/core'; @Component({ selector: 'app-main-sign-in', @@ -15,21 +18,22 @@ declare function simple_notifier(type: string, title: string, message:string): a export class MainSignInComponent implements OnInit { - nativeLoginForm : any; + nativeLoginForm: any; - creds : any = {"username":"","password":""}; + creds: any = { "username": "", "password": "" }; - constructor( private fb: FormBuilder, private nativeLogin : NativeLoginService, private tokenService : TokenService, private router : Router) { - + constructor(private fb: FormBuilder, private nativeLogin: NativeLoginService, private tokenService: TokenService, + private router: Router, private authservice: AuthService, public route: ActivatedRoute, private zone: NgZone) { + } - createProjectEditorForm(){ + createProjectEditorForm() { this.nativeLoginForm = this.fb.group({ - username: ['', Validators.required ], - password: ['', Validators.required ] + username: ['', Validators.required], + password: ['', Validators.required] }); } @@ -40,22 +44,50 @@ export class MainSignInComponent implements OnInit { } - login(){ + login() { //login using the credentials - this.nativeLogin.login(this.creds.username, this.creds.password).subscribe( - response => { - - simple_notifier("success",null,"Successful login"); - - this.tokenService.login(response['token'], TokenProvider.native, this.creds.username, response['email']); - - }, - err => { - simple_notifier("danger",null,"Failed to login"); - } - ); + // this.nativeLogin.login(this.creds.username, this.creds.password).subscribe( + // response => { + // simple_notifier("success",null,"Successful login"); + + // this.tokenService.login(response['token'], TokenProvider.native, this.creds.username, response['email']); + + // }, + // err => { + // simple_notifier("danger",null,"Failed to login"); + // } + // ); + let credentials = new Credential(); + credentials.username = this.creds.username; + credentials.secret = this.creds.password; + + this.authservice.nativeLogin(credentials).subscribe( + res => this.onLogInSuccess(res), + error => this.onLogInError(error) + ); } + + public onLogInSuccess(logoutMessage: any) { + // this.snackBar.openFromComponent(SnackBarNotificationComponent, { + // data: { message: 'GENERAL.SNACK-BAR.SUCCESSFUL-LOGIN', language: this.language }, + // duration: 3000, + // extraClasses: ['snackbar-success'] + // }); + this.route.queryParams.subscribe((params: Params) => { + let redirectUrl = params['returnUrl'] ? params['returnUrl'] : '/'; + this.zone.run(() => this.router.navigate([redirectUrl])); + }) +} + +public onLogInError(errorMessage: string) { + // this.snackBar.openFromComponent(SnackBarNotificationComponent, { + // data: { message: 'GENERAL.SNACK-BAR.UNSUCCESSFUL-LOGIN', language: this.language }, + // duration: 3000, + // extraClasses: ['snackbar-warning'] + // }) +} + } diff --git a/dmp-admin/src/app/main-window/main-window.component.html b/dmp-admin/src/app/main-window/main-window.component.html index bc10eb217..3c03daa7e 100644 --- a/dmp-admin/src/app/main-window/main-window.component.html +++ b/dmp-admin/src/app/main-window/main-window.component.html @@ -14,57 +14,6 @@
  • Datasets
  • Dataset Profiles
  • - - - - - - - - - - - - - - - - - - - - -