Browse Source

add autehntication

hotfix/class_typo
Dslak 5 years ago
parent
commit
053b24b977
  1. 29
      src/apis/auth.php
  2. 28
      src/app/admin/admin.component.html
  3. 58
      src/app/admin/admin.component.scss
  4. 25
      src/app/admin/admin.component.spec.ts
  5. 49
      src/app/admin/admin.component.ts
  6. 5
      src/app/app-layout/app-layout.component.html
  7. 5
      src/app/app-layout/app-layout.component.ts
  8. 5
      src/app/app-routing.module.ts
  9. 4
      src/app/app.module.ts
  10. 1
      src/app/services/apis.service.ts
  11. 16
      src/app/services/auth.service.spec.ts
  12. 16
      src/app/services/auth.service.spec.ts_
  13. 33
      src/app/services/auth.service.ts
  14. 27
      src/app/services/auth.service.ts_

29
src/apis/auth.php

@ -0,0 +1,29 @@
<?php
@include 'conn.conn';
$GLOBALS['conn'];
$conn=@mysqli_connect($DATAhst,$DATAusr,$DATApwd,$DATAdtb)or die("CONNECTION ERROR");
$content = null;
$content->status = 404;
if(isset($_POST['act']) && $_POST['act'] == 'auth') {
if($_POST['usr'] == 'admin' && $_POST['pwd'] == 'JohnHolmes') {
$content->status = 200;
$content->authToken = md5(date("Y-m-d"));
} else {
$content->status = 403;
}
} else if(isset($_POST['act']) && $_POST['act'] == 'check') {
if($_POST['token'] == md5(date("Y-m-d"))) {
$content->status = 200;
$content->authToken = md5(date("Y-m-d"));
} else {
$content->status = 403;
}
}
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
echo json_encode($content);
?>

28
src/app/admin/admin.component.html

@ -0,0 +1,28 @@
<div class="component-admin">
<div class="row no-gutters" *ngIf="!authCheck">
<div class="col-12 col-md-6 mx-auto">
<div class="login-form-container">
<div class="m-2">
<span class="font-12">Username</span>
<input type="text" class="input">
</div>
<div class="m-2">
<span class="font-12">Password</span>
<input type="password" class="input">
</div>
<div class="m-2">
<button type="button" class="button">Sign-in</button>
</div>
</div>
</div>
</div>
<div class="row no-gutters" *ngIf="authCheck">
<div class="col-12 col-md-3 col-lg-2 menu" >
<span class="section-title">Works</span>
<button class="action">Add</button>
<button class="action">Add</button>
<button class="action">Add</button>
</div>
</div>
</div>

58
src/app/admin/admin.component.scss

@ -0,0 +1,58 @@
@import "../../assets/scss/variables";
.component-admin {
.login-form-container {
text-align: center;
padding: 40px;
color: $white;
.input {
width: 100%;
}
.button {
background: $black;
}
}
.menu {
background: $dark-gray;
.section-title {
display: block;
width: 100%;
padding: 50px 10px 10px;
font-size: $font-22;
font-weight: bolder;
text-transform: uppercase;
color: $white;
text-align: center;
border-bottom: 1px dotted $white-alpha;
}
.action {
display: block;
appearance: none;
border: none;
width: 100%;
padding: 10px;
font-size: $font-14;
text-transform: uppercase;
color: $white;
background: $dark-gray;
cursor: pointer;
border-bottom: 1px dotted $white-alpha;
}
}
}
@media (min-width: map-get($grid-breakpoints, 'md')) {
.component-admin {
.menu {
height: 100vh;
background: $dark-gray;
}
}
}

25
src/app/admin/admin.component.spec.ts

@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { AdminComponent } from './admin.component';
describe('AdminComponent', () => {
let component: AdminComponent;
let fixture: ComponentFixture<AdminComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ AdminComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AdminComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

49
src/app/admin/admin.component.ts

@ -0,0 +1,49 @@
import { Component, OnInit } from '@angular/core'
import { AuthService } from '../services/auth.service'
@Component({
selector: 'app-admin',
templateUrl: './admin.component.html',
styleUrls: ['./admin.component.scss']
})
export class AdminComponent implements OnInit {
public authCheck: boolean = false
constructor(private authService: AuthService) { }
ngOnInit(): void {
const body = {
token: window.sessionStorage.getItem('authToken')
}
this.authService.authCheck(body).toPromise().then((response) => {
this.authCheck = response.status == 200
},(error) => {
console.error('Auth ERROR', error)
}).catch((e) => {
console.error('Auth CATCH', e)
})
}
login(): void {
const body = {
usr: 'admin',
pwd: 'JohnHolmes'
}
this.authService.login(body).toPromise().then((response) => {
this.authCheck = response.status == 200
if(this.authCheck) {
window.sessionStorage.setItem('authToken', response.authToken)
}
},(error) => {
console.error('Auth ERROR', error)
}).catch((e) => {
console.error('Auth CATCH', e)
})
}
}

5
src/app/app-layout/app-layout.component.html

@ -1,4 +1,5 @@
<app-header></app-header>
<app-header *ngIf="page != '/admin'"></app-header>
<router-outlet></router-outlet>
<Particles class="particles" [id]="id" [options]="particlesOptions" (particlesLoaded)="particlesLoaded($event)" *ngIf="particlesEnabled"></Particles>
<Particles class="particles" *ngIf="particlesEnabled && page != '/admin'"
[id]="id" [options]="particlesOptions" (particlesLoaded)="particlesLoaded($event)"></Particles>

5
src/app/app-layout/app-layout.component.ts

@ -1,4 +1,5 @@
import { Component, OnInit } from '@angular/core'
import { Router } from '@angular/router'
import type { Container } from 'tsparticles'
@Component({
@ -8,6 +9,7 @@ import type { Container } from 'tsparticles'
})
export class AppLayoutComponent implements OnInit {
public page: string = '/'
public particlesEnabled: boolean = false
public id: string = 'tsparticles'
@ -90,9 +92,10 @@ export class AppLayoutComponent implements OnInit {
detectRetina: true
}
constructor() { }
constructor(private router: Router) { }
ngOnInit(): void {
this.page = this.router.url
}

5
src/app/app-routing.module.ts

@ -4,6 +4,7 @@ import { AppLayoutComponent } from './app-layout/app-layout.component'
import { AboutComponent } from './about/about.component'
import { PortfolioComponent } from './portfolio/portfolio.component'
import { DetailComponent } from './detail/detail.component'
import { AdminComponent } from './admin/admin.component'
const routes: Routes = [
{
@ -27,8 +28,8 @@ const routes: Routes = [
]
}
]
}
},
{ path: 'admin', component: AdminComponent }
]
}
]

4
src/app/app.module.ts

@ -11,6 +11,7 @@ import { AppLayoutComponent } from './app-layout/app-layout.component';
import { AboutComponent } from './about/about.component';
import { PortfolioComponent } from './portfolio/portfolio.component';
import { DetailComponent } from './detail/detail.component';
import { AdminComponent } from './admin/admin.component';
@NgModule({
declarations: [
@ -19,7 +20,8 @@ import { DetailComponent } from './detail/detail.component';
AppLayoutComponent,
AboutComponent,
PortfolioComponent,
DetailComponent
DetailComponent,
AdminComponent
],
imports: [
BrowserModule,

1
src/app/services/apis.service.ts

@ -30,4 +30,5 @@ export class ApisService extends BaseService {
)
}
}

16
src/app/services/auth.service.spec.ts

@ -0,0 +1,16 @@
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();
});
});

16
src/app/services/auth.service.spec.ts_

@ -0,0 +1,16 @@
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();
});
});

33
src/app/services/auth.service.ts

@ -0,0 +1,33 @@
import { Injectable } from '@angular/core'
import { HttpClient, HttpHeaders, HttpParams, HttpRequest } from '@angular/common/http'
import { Observable, Subject, throwError } from 'rxjs'
import { catchError } from 'rxjs/operators'
import { BaseService } from './base-service'
import { environment } from '../../environments/environment'
@Injectable({
providedIn: 'root'
})
export class AuthService extends BaseService {
private restApi = `${environment.API_URL}`
constructor(private http: HttpClient) {
super()
}
login(body): Observable<any> {
let urlApi = `${this.restApi}auth.php?act=login`
return this.http.post<any>(urlApi, JSON.stringify(body)).pipe(
catchError(this.handleError)
)
}
authCheck(body): Observable<any> {
let urlApi = `${this.restApi}auth.php?act=check`
return this.http.post<any>(urlApi, JSON.stringify(body)).pipe(
catchError(this.handleError)
)
}
}

27
src/app/services/auth.service.ts_

@ -0,0 +1,27 @@
import { Injectable } from '@angular/core'
import { HttpClient, HttpHeaders, HttpParams, HttpRequest } from '@angular/common/http'
import { Observable, Subject, throwError } from 'rxjs'
import { catchError } from 'rxjs/operators'
import { BaseService } from './base-service'
import { environment } from '../../environments/environment'
@Injectable({
providedIn: 'root'
})
export class AuthService extends BaseService {
private restApi = `${environment.API_URL}`
constructor(private http: HttpClient) {
super()
}
login(body): Observable<any> {
let urlApi = `${this.restApi}auth.php`
return this.http.post<any>(urlApi, body).pipe(
catchError(this.handleError)
)
}
}
Loading…
Cancel
Save