finished login stg 1

This commit is contained in:
2018-05-10 09:27:21 -04:00
parent ca630dda67
commit 4bc9c83e38
14 changed files with 2900 additions and 84 deletions

2806
interfaceServices/api.php Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,32 @@
<?php <?php
/* development only */
header("Access-Control-Allow-Origin: *");
require '../vendor/autoload.php';
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Hmac\Sha256;
$username = $_POST["userName"]; $username = $_POST["userName"];
$password = $_POST["password"]; $password = $_POST["password"];
if( $username == "admin" && $password == "admin" ){ if( $username == "admin" && $password == "admin" ){
$signer = new Sha256();
$token = (new Builder())
->setIssuer("http://pugludos.com")
->setIssuedAt(time())
->set("userName", "ckoch")
->sign($signer, "testing")
->getToken();
$userData = array(); $userData = array();
$userDatap["id"] = "12345"; $userDatap["id"] = "12345";
$userDatap["username"] = "admin"; $userDatap["username"] = "admin";
$userDatap["firstName"] = "TestFirst"; $userDatap["firstName"] = "TestFirst";
$userDatap["lastName"] = "TestLast"; $userDatap["lastName"] = "TestLast";
$userDatap["token"] = "fake-jwt-token"; $userDatap["token"] = (string)$token;
echo( json_encode( $userDatap ) ); echo( json_encode( $userDatap ) );
}else{ }else{

View File

@@ -6,7 +6,6 @@ use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Hmac\Sha256; use Lcobucci\JWT\Signer\Hmac\Sha256;
$signer = new Sha256(); $signer = new Sha256();
$token = (new Builder())->setIssuer("http://pugludos.com") $token = (new Builder())->setIssuer("http://pugludos.com")
->setIssuedAt(time()) ->setIssuedAt(time())
->setExpiration(time() + 3600) ->setExpiration(time() + 3600)

View File

@@ -1,38 +1,62 @@
<?php <?php
/* development only */
header("Access-Control-Allow-Origin: *");
require '../vendor/autoload.php';
require 'dbConfig.php'; require 'dbConfig.php';
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Signer\Hmac\Sha256;
$passwordSalt = "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824"; $passwordSalt = "2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824";
if(isset($_GET['login'])) { $userName = $_POST['userName'];
$password = $_POST['password'];
$userName = $_GET['userName']; $hashedPassword = crypt( $password, $passwordSalt );
$password = $_GET['password'];
$hashedPassword = crypt( $password, $passwordSalt );
$stmt = $connect->prepare('SELECT userId, password FROM users WHERE userName = :userName'); $stmt = $connect->prepare('SELECT * FROM users WHERE userName = :userName');
$stmt->execute(array( $stmt->execute(array(
':userName' => $userName ':userName' => $userName
)); ));
$data = $stmt->fetch(PDO::FETCH_ASSOC); $data = $stmt->fetch(PDO::FETCH_ASSOC);
if($data == false){ if( $data == false ){
//$errMsg = "User $username not found."; http_response_code(400);
echo(0); die();
}else { }else {
if( hash_equals($hashedPassword,$data['password'] ) ) { if( hash_equals($hashedPassword,$data['password'] ) ) {
echo("valid"); if( $data['userName'] == "ckoch" ){
exit; $signer = new Sha256();
}else{ $token = (new Builder())
echo("d"); ->setIssuer("http://pugludos.com")
echo($hashedPassword . "<br />" . $data['password'] ); ->setIssuedAt(time())
} ->set("userName", $data['userId'])
->sign($signer, "testing")
->getToken();
$userData = array();
$userDatap["id"] = $data['userId'];
$userDatap["username"] = $data['userName'];
$userDatap["firstName"] = $data['firstName'];
$userDatap["lastName"] = $data['lastName'];
$userDatap["email"] = $data['email'];
$userDatap["token"] = (string)$token;
echo( json_encode( $userDatap ) );
die();
}else{
http_response_code(400);
die();
} }
}else{
http_response_code(400);
die();
}
} }
?>
?>

View File

@@ -8,12 +8,10 @@ export class AuthGuard implements CanActivate {
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) { canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if (localStorage.getItem('currentUser')) { if (localStorage.getItem('currentUser')) {
// logged in so return true
return true; return true;
} }
// not logged in so redirect to login page with the return url this.router.navigate( ['login'] );
this.router.navigate(['login'], { queryParams: { returnUrl: state.url }});
return false; return false;
} }
} }

View File

@@ -1,2 +1 @@
export * from './jwt.interceptor'; export * from './fake-backend';
export * from './fake-backend';

View File

@@ -1,20 +0,0 @@
import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class JwtInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
let currentUser = JSON.parse(localStorage.getItem('currentUser'));
if (currentUser && currentUser.token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${currentUser.token}`
}
});
}
return next.handle(request);
}
}

View File

@@ -11,7 +11,12 @@ const httpOptions = {
@Injectable() @Injectable()
export class AuthenticationService { export class AuthenticationService {
loginUrl = "http://192.241.155.78/interfaceServices/fake_loginInterface.php"; /* testing */
loginUrl = "http://pugludos.com/interfaceServices/loginInterface.php";
/* production */
//loginUrl = "/interfaceServices/fake_loginInterface.php";
params; params;
constructor(private http: HttpClient) { } constructor(private http: HttpClient) { }
@@ -35,7 +40,6 @@ export class AuthenticationService {
} }
logout() { logout() {
// remove user from local storage to log user out
localStorage.removeItem('currentUser'); localStorage.removeItem('currentUser');
} }
} }

View File

@@ -5,12 +5,13 @@ import { GameGridComponent } from './game-grid/game-grid.component'
import { ViewCardComponent } from './view-card/view-card.component' import { ViewCardComponent } from './view-card/view-card.component'
import { LoginComponent } from './login/login.component' import { LoginComponent } from './login/login.component'
import { RegisterComponent } from './register/register.component' import { RegisterComponent } from './register/register.component'
import { AuthGuard } from './_guards/index';
const routes: Routes = [ const routes: Routes = [
{ path: '', redirectTo: '/login', pathMatch: 'full' }, { path: '', redirectTo: '/login', pathMatch: 'full' },
{ path: 'game-grid', component: GameGridComponent }, { path: 'game-grid', component: GameGridComponent, canActivate: [AuthGuard] },
{ path: 'view-card', component: ViewCardComponent }, { path: 'view-card', component: ViewCardComponent, canActivate: [AuthGuard] },
{ path: 'view-card/:gid', component: ViewCardComponent }, { path: 'view-card/:gid', component: ViewCardComponent, canActivate: [AuthGuard] },
{ path: 'login', component: LoginComponent }, { path: 'login', component: LoginComponent },
{ path: 'register', component: RegisterComponent } { path: 'register', component: RegisterComponent }

View File

@@ -34,7 +34,6 @@ import { fakeBackendProvider } from './_helpers/index';
import { AlertComponent } from './_directives/index'; import { AlertComponent } from './_directives/index';
import { AuthGuard } from './_guards/index'; import { AuthGuard } from './_guards/index';
import { JwtInterceptor } from './_helpers/index';
import { AlertService, AuthenticationService, UserService } from './_services/index'; import { AlertService, AuthenticationService, UserService } from './_services/index';
@@ -73,12 +72,6 @@ import { AlertService, AuthenticationService, UserService } from './_services/in
AlertService, AlertService,
AuthenticationService, AuthenticationService,
UserService, UserService,
{
provide: HTTP_INTERCEPTORS,
useClass: JwtInterceptor,
multi: true
},
// provider used to create fake backend // provider used to create fake backend
fakeBackendProvider fakeBackendProvider
], ],

View File

@@ -8,7 +8,7 @@
<button class="mat-button userButton" mat-button > <button class="mat-button userButton" mat-button >
<img src="https://i.pinimg.com/280x280_RS/88/42/df/8842df04cd938aa654c865742253c276.jpg" >&nbsp;Christopher <img src="https://i.pinimg.com/280x280_RS/88/42/df/8842df04cd938aa654c865742253c276.jpg" >&nbsp;<span *ngIf="isEmptyObject(currentUser)">{{currentUser.username}}</span>
</button> </button>
@@ -17,7 +17,7 @@
<mat-menu #settingsMenu="matMenu"> <mat-menu #settingsMenu="matMenu">
<button mat-menu-item>Settings</button> <button mat-menu-item>Settings</button>
<button mat-menu-item>Help</button> <button mat-menu-item>Help</button>
<button mat-menu-item>Log out</button> <button mat-menu-item (click)="logOut()">Log out</button>
</mat-menu> </mat-menu>
<button class="mat-icon-button" mat-icon-button [matMenuTriggerFor]="settingsMenu"> <button class="mat-icon-button" mat-icon-button [matMenuTriggerFor]="settingsMenu">

View File

@@ -1,6 +1,6 @@
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { ActivatedRoute } from '@angular/router'; import { ActivatedRoute, Router } from '@angular/router';
import { GamesService } from '../games.service'; import { GamesService } from '../games.service';
import {PageEvent} from '@angular/material'; import {PageEvent} from '@angular/material';
@@ -26,16 +26,19 @@ export class GameGridComponent implements OnInit {
length = 100; length = 100;
pageSize = 10; pageSize = 10;
pageSizeOptions = [5, 10, 25, 50, 100]; pageSizeOptions = [5, 10, 25, 50, 100];
currentUser;
constructor( constructor(
private route: ActivatedRoute, private route: ActivatedRoute,
private gamesService: GamesService private gamesService: GamesService,
private router: Router
){ ){
} }
ngOnInit() { ngOnInit() {
this.currentUser = JSON.parse(localStorage.getItem('currentUser'));
this.getGamesList(); this.getGamesList();
} }
@@ -81,6 +84,11 @@ export class GameGridComponent implements OnInit {
} }
} }
logOut(){
localStorage.removeItem('currentUser');
this.router.navigate( ['login'] );
}
} }

View File

@@ -20,7 +20,7 @@ const httpOptionsPut = {
@Injectable() @Injectable()
export class GamesService { export class GamesService {
APIURL = "http://192.241.155.78/api.php"; APIURL = "http://pugludos.com/interfaceServices/api.php";
constructor( constructor(
private http: HttpClient private http: HttpClient
@@ -36,7 +36,8 @@ export class GamesService {
} }
getGames( queryFilters, querryPage, queryOrder, queryRecordMax ): Observable<any> { getGames( queryFilters, querryPage, queryOrder, queryRecordMax ): Observable<any> {
return this.http.get( this.APIURL + "/games?filter="+ queryFilters +"&page="+ querryPage + "," + queryRecordMax +"&order="+ queryOrder +"&transform=1" ) let currentUser = JSON.parse(localStorage.getItem('currentUser'));
return this.http.get( this.APIURL + "/games?filter="+ queryFilters +"&page="+ querryPage + "," + queryRecordMax +"&order="+ queryOrder +"&transform=1&token=" + currentUser.token )
.map(res => { .map(res => {
return( return(
res res

View File

@@ -62,20 +62,6 @@ export class LoginComponent implements OnInit {
return formValidators; return formValidators;
} }
onSubmit( form ){
this.registrationService.loginUser( form ).subscribe( data => {
//this.router.navigate([this.returnUrl]);
console.log( "valid" );
},
error => {
console.log( "you suck, no long for you!" );
//this.alertService.error(error);
//this.loading = false;
});
}
login( form ) { login( form ) {
this.loading = true; this.loading = true;
this.authenticationService.login( form ) this.authenticationService.login( form )