aboutsummaryrefslogtreecommitdiff
path: root/frontend/src/app
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/src/app')
-rw-r--r--frontend/src/app/_pages/login-page/login-page.component.html34
-rw-r--r--frontend/src/app/_pages/login-page/login-page.component.ts20
-rw-r--r--frontend/src/app/_pages/only-authorized/only-authorized.component.css0
-rw-r--r--frontend/src/app/_pages/only-authorized/only-authorized.component.html1
-rw-r--r--frontend/src/app/_pages/only-authorized/only-authorized.component.spec.ts25
-rw-r--r--frontend/src/app/_pages/only-authorized/only-authorized.component.ts15
-rw-r--r--frontend/src/app/_pages/register-page/register-page.component.ts49
-rw-r--r--frontend/src/app/_services/auth-guard.service.spec.ts (renamed from frontend/src/app/_services/register.service.spec.ts)8
-rw-r--r--frontend/src/app/_services/auth-guard.service.ts21
-rw-r--r--frontend/src/app/_services/auth.service.ts24
-rw-r--r--frontend/src/app/_services/register.service.ts9
-rw-r--r--frontend/src/app/app-routing.module.ts5
-rw-r--r--frontend/src/app/app.module.ts4
-rw-r--r--frontend/src/app/auth.service.spec.ts16
-rw-r--r--frontend/src/app/auth.service.ts9
15 files changed, 140 insertions, 100 deletions
diff --git a/frontend/src/app/_pages/login-page/login-page.component.html b/frontend/src/app/_pages/login-page/login-page.component.html
index b8620e2f..906eaba6 100644
--- a/frontend/src/app/_pages/login-page/login-page.component.html
+++ b/frontend/src/app/_pages/login-page/login-page.component.html
@@ -1,39 +1,43 @@
-<div *ngIf="pageLoaded" style="min-height: 100vh; position: relative;">
-
+<div style="min-height: 100vh; position: relative;">
+
<!-- TODO : <app-navbar [activeNav]="'login'"></app-navbar>-->
-
+
<div class="container p-5 rounded-3 shadow-sm border" style="max-width: 50em; margin-top: 50px;">
<h3 class="text-center pb-5">Prijavite se</h3>
<form>
<!-- Email input -->
<div class="form-outline mb-4">
<label class="form-label" for="email">Email adresa</label>
- <input [(ngModel)]="email" name="email" type="email" id="email" class="form-control form-control-lg" placeholder="Unesite email adresu..." />
+ <input [(ngModel)]="email" name="email" type="email" id="email" class="form-control form-control-lg"
+ placeholder="Unesite email adresu..." />
</div>
-
+
<!-- Password input -->
<div class="form-outline mb-3">
<label class="form-label" for="password">Lozinka</label>
- <input [(ngModel)]="password" name="password" type="password" id="password" class="form-control form-control-lg" placeholder="Unesite lozinku..." />
+ <input [(ngModel)]="password" name="password" type="password" id="password"
+ class="form-control form-control-lg" placeholder="Unesite lozinku..." />
</div>
-
+
<div class="text-center text-lg-start mt-4 pt-2">
<!-- Pogresna lozinka -->
- <p *ngIf="wrongCreds" class="small fw-bold mt-2 pt-1 mb-0 text-danger">Lozinka ili e-mail su pogrešni</p>
+ <p *ngIf="wrongCreds" class="small fw-bold mt-2 pt-1 mb-0 text-danger">Lozinka ili e-mail su pogrešni
+ </p>
<!-- Nepotvrdjena registracija
<p *ngIf="notApproved" class="small fw-bold mt-2 pt-1 mb-0 text-danger">Vaša registracija još uvek nije potvrđena</p>-->
<br>
-
- <button type="button" class="btn btn-primary btn-lg" style="padding-left: 2.5rem; padding-right: 2.5rem;"
- (click)="onSubmit()">Prijava
+
+ <button type="button" class="btn btn-primary btn-lg"
+ style="padding-left: 2.5rem; padding-right: 2.5rem;" (click)="onSubmit()">Prijava
</button>
-
- <p class="small fw-bold mt-2 pt-1 mb-0">Još uvek nemate nalog?
- <a routerLink="/register" class="link-danger">Registrujte se</a></p>
+
+ <p class="small fw-bold mt-2 pt-1 mb-0">Još uvek nemate nalog?
+ <a routerLink="/register" class="link-danger">Registrujte se</a>
+ </p>
</div>
</form>
</div>
-
+
<!-- TODO: <app-footer></app-footer>-->
</div> \ No newline at end of file
diff --git a/frontend/src/app/_pages/login-page/login-page.component.ts b/frontend/src/app/_pages/login-page/login-page.component.ts
index c041003d..fec5e16e 100644
--- a/frontend/src/app/_pages/login-page/login-page.component.ts
+++ b/frontend/src/app/_pages/login-page/login-page.component.ts
@@ -1,5 +1,6 @@
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
+import { response } from 'express';
import { AuthService } from 'src/app/_services/auth.service';
//import { LoginService } from 'src/app/_services/login.service';
@@ -9,8 +10,6 @@ import { AuthService } from 'src/app/_services/auth.service';
styleUrls: ['./login-page.component.css']
})
export class LoginPageComponent implements OnInit {
-
- public pageLoaded: boolean = false; //ako korisnik ne sme da ima pristup stranici (vec je ulogovan itd), ona ne sme ni da se ucita
email: string = '';
password: string = '';
@@ -20,26 +19,21 @@ export class LoginPageComponent implements OnInit {
pattEmail: RegExp = /^[a-zA-Z0-9]+([\.\-\+][a-zA-Z0-9]+)*\@([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}$/;
constructor(
- private activatedRoute: ActivatedRoute,
private authService: AuthService
- //private loginService: LoginService
) { }
ngOnInit(): void {
- /*this.authService.checkAccess(this.activatedRoute, this,
- (self: any) => self.pageLoaded = true;
- );*/
}
onSubmit() {
- //this.wrongCreds = false;
- //this.notApproved = false; RAZMOTRITI
-
- if (this.pattEmail.test(this.email)) {
- //this.loginService.login(this.email, this.password);
+ if (!this.pattEmail.test(this.email)) {
+ console.warn('Bad email!');
+ return;
}
else {
- //this.wrongCreds = true;
+ this.authService.login(this.email, this.password).subscribe((response) => {
+ console.log(response)
+ })
}
}
diff --git a/frontend/src/app/_pages/only-authorized/only-authorized.component.css b/frontend/src/app/_pages/only-authorized/only-authorized.component.css
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/frontend/src/app/_pages/only-authorized/only-authorized.component.css
diff --git a/frontend/src/app/_pages/only-authorized/only-authorized.component.html b/frontend/src/app/_pages/only-authorized/only-authorized.component.html
new file mode 100644
index 00000000..27bbcf09
--- /dev/null
+++ b/frontend/src/app/_pages/only-authorized/only-authorized.component.html
@@ -0,0 +1 @@
+<p>only-authorized works!</p>
diff --git a/frontend/src/app/_pages/only-authorized/only-authorized.component.spec.ts b/frontend/src/app/_pages/only-authorized/only-authorized.component.spec.ts
new file mode 100644
index 00000000..82a01f63
--- /dev/null
+++ b/frontend/src/app/_pages/only-authorized/only-authorized.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { OnlyAuthorizedComponent } from './only-authorized.component';
+
+describe('OnlyAuthorizedComponent', () => {
+ let component: OnlyAuthorizedComponent;
+ let fixture: ComponentFixture<OnlyAuthorizedComponent>;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ OnlyAuthorizedComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(OnlyAuthorizedComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/frontend/src/app/_pages/only-authorized/only-authorized.component.ts b/frontend/src/app/_pages/only-authorized/only-authorized.component.ts
new file mode 100644
index 00000000..be88365f
--- /dev/null
+++ b/frontend/src/app/_pages/only-authorized/only-authorized.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-only-authorized',
+ templateUrl: './only-authorized.component.html',
+ styleUrls: ['./only-authorized.component.css']
+})
+export class OnlyAuthorizedComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit(): void {
+ }
+
+}
diff --git a/frontend/src/app/_pages/register-page/register-page.component.ts b/frontend/src/app/_pages/register-page/register-page.component.ts
index d51358de..e8d4c036 100644
--- a/frontend/src/app/_pages/register-page/register-page.component.ts
+++ b/frontend/src/app/_pages/register-page/register-page.component.ts
@@ -1,8 +1,6 @@
import { Component, OnInit } from '@angular/core';
-import { ActivatedRoute } from '@angular/router';
import { Router } from '@angular/router';
import { AuthService } from 'src/app/_services/auth.service';
-import { RegisterService } from 'src/app/_services/register.service';
@Component({
selector: 'app-register-page',
@@ -10,9 +8,6 @@ import { RegisterService } from 'src/app/_services/register.service';
styleUrls: ['./register-page.component.css']
})
export class RegisterPageComponent implements OnInit {
-
- public pageLoaded: boolean = false;
-
firstName: string = '';
lastName: string = '';
nickName: string = '';
@@ -33,19 +28,11 @@ export class RegisterPageComponent implements OnInit {
pattPassword: RegExp = /.{6,30}$/;
constructor(
- private activatedRoute: ActivatedRoute,
private router: Router,
private authService: AuthService,
- private registerService: RegisterService
) { }
ngOnInit(): void {
- /*this.authService.checkAccess(this.activatedRoute, this,
- (self: any) =>
- {
- self.pageLoaded = true;
- }
- );*/
}
isCorrectName(element: string): boolean {
@@ -124,25 +111,25 @@ export class RegisterPageComponent implements OnInit {
if (!(this.wrongFirstNameBool || this.wrongLastNameBool || this.wrongNickNameBool ||
this.wrongEmailBool || this.wrongPass1Bool || this.wrongPass2Bool)) { //sve ok, registruj ga
- let user = {
- firstName: this.firstName,
- lastName: this.lastName,
- nickName: this.nickName,
- email: this.email,
- password: this.pass1
- }
-
- /*this.registerService.createUser(user, this)
- .subscribe(
- (response) => {
- if ()
- this.router.navigate(['/login']); //registracija uspesna, idi na login
- else if ()
- alert('Nalog sa unetim email-om već postoji!');
- }
- );
- */
+ let user = {
+ firstName: this.firstName,
+ lastName: this.lastName,
+ nickName: this.nickName,
+ email: this.email,
+ password: this.pass1
}
+
+ this.authService.register(user)
+ .subscribe(
+ (response) => {
+ console.log(response);
+ /*if ()
+ this.router.navigate(['/login']); //registracija uspesna, idi na login
+ else if ()
+ alert('Nalog sa unetim email-om već postoji!');*/
+ }
+ );
+ }
}
diff --git a/frontend/src/app/_services/register.service.spec.ts b/frontend/src/app/_services/auth-guard.service.spec.ts
index 2ba39608..35afd377 100644
--- a/frontend/src/app/_services/register.service.spec.ts
+++ b/frontend/src/app/_services/auth-guard.service.spec.ts
@@ -1,13 +1,13 @@
import { TestBed } from '@angular/core/testing';
-import { RegisterService } from './register.service';
+import { AuthGuardService } from './auth-guard.service';
-describe('RegisterService', () => {
- let service: RegisterService;
+describe('AuthGuardService', () => {
+ let service: AuthGuardService;
beforeEach(() => {
TestBed.configureTestingModule({});
- service = TestBed.inject(RegisterService);
+ service = TestBed.inject(AuthGuardService);
});
it('should be created', () => {
diff --git a/frontend/src/app/_services/auth-guard.service.ts b/frontend/src/app/_services/auth-guard.service.ts
new file mode 100644
index 00000000..b6d3678d
--- /dev/null
+++ b/frontend/src/app/_services/auth-guard.service.ts
@@ -0,0 +1,21 @@
+import { Injectable } from '@angular/core';
+import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';
+import { Observable } from 'rxjs';
+import { AuthService } from './auth.service';
+
+
+@Injectable({
+ providedIn: 'root'
+})
+export class AuthGuardService implements CanActivate {
+
+ constructor(private auth: AuthService, private router: Router) { }
+
+ canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | UrlTree | Observable<boolean | UrlTree> | Promise<boolean | UrlTree> {
+ if (this.auth.isAuthenticated()) {
+ return true;
+ }
+ this.router.navigate(['login']);
+ return false;
+ }
+}
diff --git a/frontend/src/app/_services/auth.service.ts b/frontend/src/app/_services/auth.service.ts
index af27fdec..d1012d37 100644
--- a/frontend/src/app/_services/auth.service.ts
+++ b/frontend/src/app/_services/auth.service.ts
@@ -1,9 +1,31 @@
import { Injectable } from '@angular/core';
+import { HttpClient, HttpHeaders } from '@angular/common/http';
+import { JwtHelperService } from '@auth0/angular-jwt';
+import { CookieService } from 'ngx-cookie-service';
+import { API_SETTINGS } from 'src/config';
+
+const jwtHelper = new JwtHelperService();
@Injectable({
providedIn: 'root'
})
export class AuthService {
- constructor() { }
+ constructor(private http: HttpClient, private cookie: CookieService) { }
+
+ login(username: string, password: string) {
+ return this.http.post(`${API_SETTINGS.apiURL}/login`, { username, password });
+ }
+
+ register(user: any) {
+ return this.http.post(`${API_SETTINGS.apiURL}/register`, user);
+ }
+
+ isAuthenticated(): boolean {
+ if (this.cookie.check('token')) {
+ var token = this.cookie.get('token');
+ return !jwtHelper.isTokenExpired(token);
+ }
+ return false;
+ }
}
diff --git a/frontend/src/app/_services/register.service.ts b/frontend/src/app/_services/register.service.ts
deleted file mode 100644
index 93074c06..00000000
--- a/frontend/src/app/_services/register.service.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { Injectable } from '@angular/core';
-
-@Injectable({
- providedIn: 'root'
-})
-export class RegisterService {
-
- constructor() { }
-}
diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts
index 3fe2bc13..1868e56c 100644
--- a/frontend/src/app/app-routing.module.ts
+++ b/frontend/src/app/app-routing.module.ts
@@ -2,11 +2,14 @@ import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { LoginPageComponent } from './_pages/login-page/login-page.component';
+import { OnlyAuthorizedComponent } from './_pages/only-authorized/only-authorized.component';
import { RegisterPageComponent } from './_pages/register-page/register-page.component';
+import { AuthGuardService } from './_services/auth-guard.service';
const routes: Routes = [
{ path: 'login', component: LoginPageComponent },
- { path: 'register', component: RegisterPageComponent }
+ { path: 'register', component: RegisterPageComponent },
+ { path: 'only-authorized', component: OnlyAuthorizedComponent, canActivate: [AuthGuardService] }
];
@NgModule({
diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts
index 39d75e89..9ccd7ddb 100644
--- a/frontend/src/app/app.module.ts
+++ b/frontend/src/app/app.module.ts
@@ -8,12 +8,14 @@ import { AppComponent } from './app.component';
import { LoginPageComponent } from './_pages/login-page/login-page.component';
import { RegisterPageComponent } from './_pages/register-page/register-page.component';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
+import { OnlyAuthorizedComponent } from './_pages/only-authorized/only-authorized.component';
@NgModule({
declarations: [
AppComponent,
LoginPageComponent,
- RegisterPageComponent
+ RegisterPageComponent,
+ OnlyAuthorizedComponent
],
imports: [
BrowserModule,
diff --git a/frontend/src/app/auth.service.spec.ts b/frontend/src/app/auth.service.spec.ts
deleted file mode 100644
index f1251cac..00000000
--- a/frontend/src/app/auth.service.spec.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { TestBed } from '@angular/core/testing';
-
-import { AuthService } from './auth.service';
-
-describe('AuthService', () => {
- let service: AuthService;
-
- beforeEach(() => {
- TestBed.configureTestingModule({});
- service = TestBed.inject(AuthService);
- });
-
- it('should be created', () => {
- expect(service).toBeTruthy();
- });
-});
diff --git a/frontend/src/app/auth.service.ts b/frontend/src/app/auth.service.ts
deleted file mode 100644
index af27fdec..00000000
--- a/frontend/src/app/auth.service.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { Injectable } from '@angular/core';
-
-@Injectable({
- providedIn: 'root'
-})
-export class AuthService {
-
- constructor() { }
-}