not finished yet

note for me: get auth token system finished.
This commit is contained in:
xander 2022-03-05 16:55:02 -12:00
parent 766d3a6aef
commit 8577b0aca9
15 changed files with 56 additions and 26 deletions

View File

@ -84,16 +84,24 @@ class RegisterController extends Controller
$messages = $valid->messages()->get('*'); $messages = $valid->messages()->get('*');
return Response()->json(['message'=>$error, 'badInputs'=>[array_keys($messages)]]); return Response()->json(['message'=>$error, 'badInputs'=>[array_keys($messages)]]);
} }
$prws = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 8));
shuffle($prws);
$sc = substr(implode($prws), 0, 56);
$user = new User; $user = new User;
$user->username = $data['username']; $user->username = $data['username'];
$user->email = $data['email']; $user->email = $data['email'];
$user->password = Hash::make($data['password']); $user->password = Hash::make($data['password']);
$user->token = $sc;
$user->save(); $user->save();
Auth::login($user);
Request::session()->regenerate(); Request::session()->regenerate();
Auth::login($user);
setcookie('gtok', $sc, time()+(345600*30), "/");
return Response()->json('good'); return Response()->json('good');
} }

View File

@ -39,4 +39,5 @@ class BannerController extends Controller
return response($content) return response($content)
->header('Content-Type', 'application/json'); ->header('Content-Type', 'application/json');
} }
} }

View File

@ -19,11 +19,6 @@ class Controller extends BaseController
{ {
use AuthorizesRequests, DispatchesJobs, ValidatesRequests; use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function __construct()
{
$this->middleware('guest');
}
public function login(Request $request) { public function login(Request $request) {
$data = Request::all(); $data = Request::all();
@ -42,6 +37,8 @@ class Controller extends BaseController
if (!User::where('username', Request::input('username'))->first()) { if (!User::where('username', Request::input('username'))->first()) {
return Response()->json(['message'=>"Sorry, that user wasn't found!", 'badInputs'=>['username']]); return Response()->json(['message'=>"Sorry, that user wasn't found!", 'badInputs'=>['username']]);
} }
$user = User::where('username', Request::input('username'))->first();
if (!Auth::attempt(Request::only('username', 'password'))) { if (!Auth::attempt(Request::only('username', 'password'))) {
return Response()->json(['message'=>'Sorry, thats the wrong password!', 'badInputs'=>['password']]); return Response()->json(['message'=>'Sorry, thats the wrong password!', 'badInputs'=>['password']]);
@ -49,6 +46,8 @@ class Controller extends BaseController
Request::session()->regenerate(); Request::session()->regenerate();
Auth::login($user);
return Response()->json('good'); return Response()->json('good');
} }

View File

@ -20,6 +20,7 @@ class Kernel extends HttpKernel
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class, \App\Http\Middleware\TrimStrings::class,
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
\Illuminate\Session\Middleware\StartSession::class
]; ];
/** /**

View File

@ -31,6 +31,8 @@ class User extends Authenticatable
protected $hidden = [ protected $hidden = [
'password', 'password',
'remember_token', 'remember_token',
'token',
'email'
]; ];
/** /**

View File

@ -19,6 +19,7 @@ class CreateUsersTable extends Migration
$table->string('email'); $table->string('email');
$table->timestamp('email_verified_at')->default(null); $table->timestamp('email_verified_at')->default(null);
$table->string('password'); $table->string('password');
$table->string('token');
$table->timestamps(); $table->timestamps();
}); });
} }

View File

@ -2,7 +2,7 @@ import 'bootstrap';
import React from 'react'; import React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import { useState, useEffect } from "react";
import App from '../layouts/App.js'; import App from '../layouts/App.js';
function Main() { function Main() {

View File

@ -16,7 +16,7 @@ export function CreateAccount(form)
var badInputs = []; var badInputs = [];
return new Promise(async (resolve, reject)=>{ return new Promise(async (resolve, reject)=>{
await axios.post(`${protocol}apis.${url}/account/register`, body, {headers: {'X-CSRF-TOKEN': document.querySelector(`meta[name="csrf-token"]`).content}}).then(data=>{ await axios.post(`${protocol}apis.${url}/account/register`, body, {headers: {'X-CSRF-TOKEN': document.querySelector(`meta[name="csrf-token"]`).content, "X-Requested-With":"XMLHttpRequest"}}).then(data=>{
const res = data.data; const res = data.data;
if (res.badInputs.length >= 1) { if (res.badInputs.length >= 1) {
badInputs=res.badInputs; badInputs=res.badInputs;
@ -35,7 +35,7 @@ export function LoginToAccount(form) {
return new Promise(async (resolve, reject)=>{ return new Promise(async (resolve, reject)=>{
await axios.post(`${protocol}apis.${url}/account/login`, body, {headers: {'X-CSRF-TOKEN': document.querySelector(`meta[name="csrf-token"]`).content}}).then(data=>{ await axios.post(`${protocol}apis.${url}/account/login`, body, {headers: {'X-CSRF-TOKEN': document.querySelector(`meta[name="csrf-token"]`).content, "X-Requested-With":"XMLHttpRequest"}}).then(data=>{
const res = data.data; const res = data.data;
if (res.badInputs.length >= 1) { if (res.badInputs.length >= 1) {
badInputs=res.badInputs; badInputs=res.badInputs;

View File

@ -3,7 +3,9 @@
import { useEffect } from 'react'; import { useEffect } from 'react';
function useOnClickOutside(refs, handler) { export var user;
export function useOnClickOutside(refs, handler) {
useEffect( useEffect(
() => { () => {
const listener = (event) => { const listener = (event) => {
@ -36,7 +38,3 @@ function useOnClickOutside(refs, handler) {
[refs, handler] [refs, handler]
); );
} }
export {
useOnClickOutside
};

View File

@ -34,7 +34,8 @@ var protocol = Config.Protocol;
const App = () => { const App = () => {
const [state, setState] = useState({maintenance: false, theme: 0, banners: [], offlineFetch: false}); const [state, setState] = useState({maintenance: false, theme: 0, banners: [], offlineFetch: false, user: []});
var finished = false;
function updateBanners() function updateBanners()
{ {
@ -47,6 +48,12 @@ const App = () => {
setState({banners: result}); setState({banners: result});
}); });
} }
function fetchUser() {
axios.post(`${protocol}apis.${url}/fetch/user`).then((res)=>{
setState({user: res.data.data}, (e)=>{console.log(state.user)});
});
}
function updateOfflineStatus() function updateOfflineStatus()
{ {
@ -67,13 +74,12 @@ const App = () => {
}); });
} }
useEffect(()=>{ useEffect(async ()=>{
await fetchUser();
updateBanners(); updateBanners();
updateOfflineStatus(); updateOfflineStatus();
setInterval(updateBanners, 2*60*1000 /* 2 mins */); setInterval(updateBanners, 2*60*1000 /* 2 mins */);
setInterval(updateOfflineStatus, 10*60*1000 /* 10 mins */); setInterval(updateOfflineStatus, 10*60*1000 /* 10 mins */);
console.log(state);
}, []); }, []);
document.documentElement.classList.add(state.theme == 0 ? 'gtoria-light' : 'gtoria-dark'); document.documentElement.classList.add(state.theme == 0 ? 'gtoria-light' : 'gtoria-dark');
@ -103,13 +109,13 @@ const App = () => {
<Route exact path="/" component={Home}/> <Route exact path="/" component={Home}/>
<Route exact path="/login"> <Route exact path="/login">
<Auth location={location.pathname}/> {state.user? <NotFound/> : <Auth location={location.pathname}/>}
</Route> </Route>
<Route exact path="/register"> <Route exact path="/register">
<Auth location={location.pathname}/> {state.user? <NotFound/> : <Auth location={location.pathname}/>}
</Route> </Route>
<Route exact path="/passwordreset"> <Route exact path="/passwordreset">
<Auth location={location.pathname}/> {state.user? <NotFound/> : <Auth location={location.pathname}/>}
</Route> </Route>
<Route exact path="/games" component={Games}/> <Route exact path="/games" component={Games}/>

View File

@ -21,9 +21,10 @@ const LoginForm = (props) => {
if (res != `good`) { if (res != `good`) {
setValidity({error: true, message:res.message, inputs: res.inputs}); setValidity({error: true, message:res.message, inputs: res.inputs});
setTimeout(()=>{setValidity({...validity, error: false, inputs: res.inputs});}, 4000); setTimeout(()=>{setValidity({...validity, error: false, inputs: res.inputs});}, 4000);
}else{
window.history.pushState(`/home`);
return;
} }
window.history.pushState(`/home`);
return;
}).catch(error=>console.log(error)); }).catch(error=>console.log(error));
setWaitingForSubmission(false); setWaitingForSubmission(false);
} }

View File

@ -45,9 +45,10 @@ const RegisterForm = (props) => {
if (res != `good`) { if (res != `good`) {
setValidity({error: true, message:res.message, inputs: res.inputs}); setValidity({error: true, message:res.message, inputs: res.inputs});
setTimeout(()=>{setValidity({...validity, error: false, inputs: res.inputs});}, 4000); setTimeout(()=>{setValidity({...validity, error: false, inputs: res.inputs});}, 4000);
}else{
window.history.pushState(`/home`);
return;
} }
window.history.pushState(`/home`);
return;
}).catch(error=>console.log(error)); }).catch(error=>console.log(error));
setWaitingForSubmission(false); setWaitingForSubmission(false);
} }

View File

@ -7,6 +7,7 @@ import { Link } from "react-router-dom";
import SetTitle from "../Helpers/Title.js"; import SetTitle from "../Helpers/Title.js";
import SocialCard from "../Components/Landing/SocialCard.js"; import SocialCard from "../Components/Landing/SocialCard.js";
import { user } from "../helpers/utils.js";
const Home = () => { const Home = () => {
useEffect(()=>{ useEffect(()=>{

View File

@ -6,6 +6,7 @@ use App\Http\Controllers\BannerController;
use App\Http\Controllers\GamesController; use App\Http\Controllers\GamesController;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Controllers\Auth\RegisterController; use App\Http\Controllers\Auth\RegisterController;
use App\Models\User;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -26,6 +27,16 @@ Route::get('/banners/data', 'BannerController@getBanners');
Route::get('/games/metadata', 'GamesController@isAvailable'); Route::get('/games/metadata', 'GamesController@isAvailable');
Route::post('/fetch/user', function(){
$cookie;
if (!isset($_COOKIE['gtok'])) {return Response()->json(false);}
$cookie = $_COOKIE['gtok'];
$user = User::where('token', $cookie)->first();
$array = $user->toArray();
if (!$user) {return Response()->json(false);}
return Response()->json(["data"=>$array]);
});
Route::post('/maintenance/bypass', 'MaintenanceController@bypass'); Route::post('/maintenance/bypass', 'MaintenanceController@bypass');
Route::post('/account/register', 'Auth\RegisterController@create'); Route::post('/account/register', 'Auth\RegisterController@create');

View File

@ -15,7 +15,7 @@ use Illuminate\Support\Facades\Route;
Route::get('/javascript', function(){ Route::get('/javascript', function(){
return view('javascript'); return view('javascript');
}); })->middleware('auth');
Route::get('/', function(){ Route::get('/', function(){
return view('main'); return view('main');