login firebase from firestore
parent
fd3faee1e1
commit
0397720ad4
@ -1,64 +1 @@
|
|||||||
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400"></a></p>
|
## Payroll-App
|
||||||
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://travis-ci.org/laravel/framework"><img src="https://travis-ci.org/laravel/framework.svg" alt="Build Status"></a>
|
|
||||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
|
|
||||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
|
|
||||||
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
## About Laravel
|
|
||||||
|
|
||||||
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
|
|
||||||
|
|
||||||
- [Simple, fast routing engine](https://laravel.com/docs/routing).
|
|
||||||
- [Powerful dependency injection container](https://laravel.com/docs/container).
|
|
||||||
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
|
|
||||||
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
|
|
||||||
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
|
|
||||||
- [Robust background job processing](https://laravel.com/docs/queues).
|
|
||||||
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
|
|
||||||
|
|
||||||
Laravel is accessible, powerful, and provides tools required for large, robust applications.
|
|
||||||
|
|
||||||
## Learning Laravel
|
|
||||||
|
|
||||||
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework.
|
|
||||||
|
|
||||||
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains over 2000 video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
|
|
||||||
|
|
||||||
## Laravel Sponsors
|
|
||||||
|
|
||||||
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell).
|
|
||||||
|
|
||||||
### Premium Partners
|
|
||||||
|
|
||||||
- **[Vehikl](https://vehikl.com/)**
|
|
||||||
- **[Tighten Co.](https://tighten.co)**
|
|
||||||
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
|
|
||||||
- **[64 Robots](https://64robots.com)**
|
|
||||||
- **[Cubet Techno Labs](https://cubettech.com)**
|
|
||||||
- **[Cyber-Duck](https://cyber-duck.co.uk)**
|
|
||||||
- **[Many](https://www.many.co.uk)**
|
|
||||||
- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)**
|
|
||||||
- **[DevSquad](https://devsquad.com)**
|
|
||||||
- **[Curotec](https://www.curotec.com/services/technologies/laravel/)**
|
|
||||||
- **[OP.GG](https://op.gg)**
|
|
||||||
- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)**
|
|
||||||
- **[Lendio](https://lendio.com)**
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
|
|
||||||
|
|
||||||
## Code of Conduct
|
|
||||||
|
|
||||||
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
|
|
||||||
|
|
||||||
## Security Vulnerabilities
|
|
||||||
|
|
||||||
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
|
|
@ -1,59 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Auth;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use App\Http\Requests\Auth\LoginRequest;
|
|
||||||
use App\Providers\RouteServiceProvider;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\Auth;
|
|
||||||
use Illuminate\Support\Facades\Route;
|
|
||||||
use Inertia\Inertia;
|
|
||||||
|
|
||||||
class AuthenticatedSessionController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Display the login view.
|
|
||||||
*
|
|
||||||
* @return \Inertia\Response
|
|
||||||
*/
|
|
||||||
public function create()
|
|
||||||
{
|
|
||||||
return Inertia::render('Auth/Login', [
|
|
||||||
'canResetPassword' => Route::has('password.request'),
|
|
||||||
'status' => session('status'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle an incoming authentication request.
|
|
||||||
*
|
|
||||||
* @param \App\Http\Requests\Auth\LoginRequest $request
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
*/
|
|
||||||
public function store(LoginRequest $request)
|
|
||||||
{
|
|
||||||
$request->authenticate();
|
|
||||||
|
|
||||||
$request->session()->regenerate();
|
|
||||||
|
|
||||||
return redirect()->intended(RouteServiceProvider::HOME);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy an authenticated session.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
*/
|
|
||||||
public function destroy(Request $request)
|
|
||||||
{
|
|
||||||
Auth::guard('web')->logout();
|
|
||||||
|
|
||||||
$request->session()->invalidate();
|
|
||||||
|
|
||||||
$request->session()->regenerateToken();
|
|
||||||
|
|
||||||
return redirect('/');
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,45 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Auth;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use App\Providers\RouteServiceProvider;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\Auth;
|
|
||||||
use Illuminate\Validation\ValidationException;
|
|
||||||
use Inertia\Inertia;
|
|
||||||
|
|
||||||
class ConfirmablePasswordController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Show the confirm password view.
|
|
||||||
*
|
|
||||||
* @return \Inertia\Response
|
|
||||||
*/
|
|
||||||
public function show()
|
|
||||||
{
|
|
||||||
return Inertia::render('Auth/ConfirmPassword');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Confirm the user's password.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function store(Request $request)
|
|
||||||
{
|
|
||||||
if (! Auth::guard('web')->validate([
|
|
||||||
'email' => $request->user()->email,
|
|
||||||
'password' => $request->password,
|
|
||||||
])) {
|
|
||||||
throw ValidationException::withMessages([
|
|
||||||
'password' => __('auth.password'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$request->session()->put('auth.password_confirmed_at', time());
|
|
||||||
|
|
||||||
return redirect()->intended(RouteServiceProvider::HOME);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,27 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Auth;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use App\Providers\RouteServiceProvider;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
|
|
||||||
class EmailVerificationNotificationController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Send a new email verification notification.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
*/
|
|
||||||
public function store(Request $request)
|
|
||||||
{
|
|
||||||
if ($request->user()->hasVerifiedEmail()) {
|
|
||||||
return redirect()->intended(RouteServiceProvider::HOME);
|
|
||||||
}
|
|
||||||
|
|
||||||
$request->user()->sendEmailVerificationNotification();
|
|
||||||
|
|
||||||
return back()->with('status', 'verification-link-sent');
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Auth;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use App\Providers\RouteServiceProvider;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Inertia\Inertia;
|
|
||||||
|
|
||||||
class EmailVerificationPromptController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Display the email verification prompt.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function __invoke(Request $request)
|
|
||||||
{
|
|
||||||
return $request->user()->hasVerifiedEmail()
|
|
||||||
? redirect()->intended(RouteServiceProvider::HOME)
|
|
||||||
: Inertia::render('Auth/VerifyEmail', ['status' => session('status')]);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,73 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Auth;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use Illuminate\Auth\Events\PasswordReset;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\Hash;
|
|
||||||
use Illuminate\Support\Facades\Password;
|
|
||||||
use Illuminate\Support\Str;
|
|
||||||
use Illuminate\Validation\Rules;
|
|
||||||
use Illuminate\Validation\ValidationException;
|
|
||||||
use Inertia\Inertia;
|
|
||||||
|
|
||||||
class NewPasswordController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Display the password reset view.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @return \Inertia\Response
|
|
||||||
*/
|
|
||||||
public function create(Request $request)
|
|
||||||
{
|
|
||||||
return Inertia::render('Auth/ResetPassword', [
|
|
||||||
'email' => $request->email,
|
|
||||||
'token' => $request->route('token'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle an incoming new password request.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
*
|
|
||||||
* @throws \Illuminate\Validation\ValidationException
|
|
||||||
*/
|
|
||||||
public function store(Request $request)
|
|
||||||
{
|
|
||||||
$request->validate([
|
|
||||||
'token' => 'required',
|
|
||||||
'email' => 'required|email',
|
|
||||||
'password' => ['required', 'confirmed', Rules\Password::defaults()],
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Here we will attempt to reset the user's password. If it is successful we
|
|
||||||
// will update the password on an actual user model and persist it to the
|
|
||||||
// database. Otherwise we will parse the error and return the response.
|
|
||||||
$status = Password::reset(
|
|
||||||
$request->only('email', 'password', 'password_confirmation', 'token'),
|
|
||||||
function ($user) use ($request) {
|
|
||||||
$user->forceFill([
|
|
||||||
'password' => Hash::make($request->password),
|
|
||||||
'remember_token' => Str::random(60),
|
|
||||||
])->save();
|
|
||||||
|
|
||||||
event(new PasswordReset($user));
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
// If the password was successfully reset, we will redirect the user back to
|
|
||||||
// the application's home authenticated view. If there is an error we can
|
|
||||||
// redirect them back to where they came from with their error message.
|
|
||||||
if ($status == Password::PASSWORD_RESET) {
|
|
||||||
return redirect()->route('login')->with('status', __($status));
|
|
||||||
}
|
|
||||||
|
|
||||||
throw ValidationException::withMessages([
|
|
||||||
'email' => [trans($status)],
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,54 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Auth;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\Password;
|
|
||||||
use Illuminate\Validation\ValidationException;
|
|
||||||
use Inertia\Inertia;
|
|
||||||
|
|
||||||
class PasswordResetLinkController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Display the password reset link request view.
|
|
||||||
*
|
|
||||||
* @return \Inertia\Response
|
|
||||||
*/
|
|
||||||
public function create()
|
|
||||||
{
|
|
||||||
return Inertia::render('Auth/ForgotPassword', [
|
|
||||||
'status' => session('status'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle an incoming password reset link request.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
*
|
|
||||||
* @throws \Illuminate\Validation\ValidationException
|
|
||||||
*/
|
|
||||||
public function store(Request $request)
|
|
||||||
{
|
|
||||||
$request->validate([
|
|
||||||
'email' => 'required|email',
|
|
||||||
]);
|
|
||||||
|
|
||||||
// We will send the password reset link to this user. Once we have attempted
|
|
||||||
// to send the link, we will examine the response then see the message we
|
|
||||||
// need to show to the user. Finally, we'll send out a proper response.
|
|
||||||
$status = Password::sendResetLink(
|
|
||||||
$request->only('email')
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($status == Password::RESET_LINK_SENT) {
|
|
||||||
return back()->with('status', __($status));
|
|
||||||
}
|
|
||||||
|
|
||||||
throw ValidationException::withMessages([
|
|
||||||
'email' => [trans($status)],
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,55 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Auth;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use App\Models\User;
|
|
||||||
use App\Providers\RouteServiceProvider;
|
|
||||||
use Illuminate\Auth\Events\Registered;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Illuminate\Support\Facades\Auth;
|
|
||||||
use Illuminate\Support\Facades\Hash;
|
|
||||||
use Illuminate\Validation\Rules;
|
|
||||||
use Inertia\Inertia;
|
|
||||||
|
|
||||||
class RegisteredUserController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Display the registration view.
|
|
||||||
*
|
|
||||||
* @return \Inertia\Response
|
|
||||||
*/
|
|
||||||
public function create()
|
|
||||||
{
|
|
||||||
return Inertia::render('Auth/Register');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle an incoming registration request.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
*
|
|
||||||
* @throws \Illuminate\Validation\ValidationException
|
|
||||||
*/
|
|
||||||
public function store(Request $request)
|
|
||||||
{
|
|
||||||
$request->validate([
|
|
||||||
'name' => 'required|string|max:255',
|
|
||||||
'email' => 'required|string|email|max:255|unique:users',
|
|
||||||
'password' => ['required', 'confirmed', Rules\Password::defaults()],
|
|
||||||
]);
|
|
||||||
|
|
||||||
$user = User::create([
|
|
||||||
'name' => $request->name,
|
|
||||||
'email' => $request->email,
|
|
||||||
'password' => Hash::make($request->password),
|
|
||||||
]);
|
|
||||||
|
|
||||||
event(new Registered($user));
|
|
||||||
|
|
||||||
Auth::login($user);
|
|
||||||
|
|
||||||
return redirect(RouteServiceProvider::HOME);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Auth;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use App\Providers\RouteServiceProvider;
|
|
||||||
use Illuminate\Auth\Events\Verified;
|
|
||||||
use Illuminate\Foundation\Auth\EmailVerificationRequest;
|
|
||||||
|
|
||||||
class VerifyEmailController extends Controller
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Mark the authenticated user's email address as verified.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Foundation\Auth\EmailVerificationRequest $request
|
|
||||||
* @return \Illuminate\Http\RedirectResponse
|
|
||||||
*/
|
|
||||||
public function __invoke(EmailVerificationRequest $request)
|
|
||||||
{
|
|
||||||
if ($request->user()->hasVerifiedEmail()) {
|
|
||||||
return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($request->user()->markEmailAsVerified()) {
|
|
||||||
event(new Verified($request->user()));
|
|
||||||
}
|
|
||||||
|
|
||||||
return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,26 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Inertia\Inertia;
|
||||||
|
|
||||||
|
class AuthController extends Controller
|
||||||
|
{
|
||||||
|
public function login()
|
||||||
|
{
|
||||||
|
return Inertia::render('Auth/Login');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
session(['user' => $request->input()]);
|
||||||
|
return redirect()->route('dashboard');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function destroy()
|
||||||
|
{
|
||||||
|
session()->flush();
|
||||||
|
return redirect()->route('login');
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Inertia\Inertia;
|
||||||
|
|
||||||
|
class GeneralController extends Controller
|
||||||
|
{
|
||||||
|
public function dashboard()
|
||||||
|
{
|
||||||
|
return Inertia::render('Dashboard');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function jabatan()
|
||||||
|
{
|
||||||
|
return Inertia::render('Jabatan');
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class IsGuest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle an incoming request.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||||
|
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||||
|
*/
|
||||||
|
public function handle(Request $request, Closure $next)
|
||||||
|
{
|
||||||
|
if ($request->session()->get('user') != null) {
|
||||||
|
return redirect()->route('dashboard');
|
||||||
|
}
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,24 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
|
use Closure;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class IsSessionAuth
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Handle an incoming request.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
|
||||||
|
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
|
||||||
|
*/
|
||||||
|
public function handle(Request $request, Closure $next)
|
||||||
|
{
|
||||||
|
if ($request->session()->get('user') == null) {
|
||||||
|
return redirect()->route('login');
|
||||||
|
}
|
||||||
|
return $next($request);
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -1,62 +0,0 @@
|
|||||||
import React, { useEffect } from 'react';
|
|
||||||
import Button from '@/Components/Button';
|
|
||||||
import Guest from '@/Layouts/Guest';
|
|
||||||
import Input from '@/Components/Input';
|
|
||||||
import Label from '@/Components/Label';
|
|
||||||
import ValidationErrors from '@/Components/ValidationErrors';
|
|
||||||
import { Head, useForm } from '@inertiajs/inertia-react';
|
|
||||||
|
|
||||||
export default function ConfirmPassword() {
|
|
||||||
const { data, setData, post, processing, errors, reset } = useForm({
|
|
||||||
password: '',
|
|
||||||
});
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
return () => {
|
|
||||||
reset('password');
|
|
||||||
};
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const onHandleChange = (event) => {
|
|
||||||
setData(event.target.name, event.target.value);
|
|
||||||
};
|
|
||||||
|
|
||||||
const submit = (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
post(route('password.confirm'));
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Guest>
|
|
||||||
<Head title="Confirm Password" />
|
|
||||||
|
|
||||||
<div className="mb-4 text-sm text-gray-600">
|
|
||||||
This is a secure area of the application. Please confirm your password before continuing.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<ValidationErrors errors={errors} />
|
|
||||||
|
|
||||||
<form onSubmit={submit}>
|
|
||||||
<div className="mt-4">
|
|
||||||
<Label forInput="password" value="Password" />
|
|
||||||
|
|
||||||
<Input
|
|
||||||
type="password"
|
|
||||||
name="password"
|
|
||||||
value={data.password}
|
|
||||||
className="mt-1 block w-full"
|
|
||||||
isFocused={true}
|
|
||||||
handleChange={onHandleChange}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="flex items-center justify-end mt-4">
|
|
||||||
<Button className="ml-4" processing={processing}>
|
|
||||||
Confirm
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</Guest>
|
|
||||||
);
|
|
||||||
}
|
|
@ -1,54 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import Button from '@/Components/Button';
|
|
||||||
import Guest from '@/Layouts/Guest';
|
|
||||||
import Input from '@/Components/Input';
|
|
||||||
import ValidationErrors from '@/Components/ValidationErrors';
|
|
||||||
import { Head, useForm } from '@inertiajs/inertia-react';
|
|
||||||
|
|
||||||
export default function ForgotPassword({ status }) {
|
|
||||||
const { data, setData, post, processing, errors } = useForm({
|
|
||||||
email: '',
|
|
||||||
});
|
|
||||||
|
|
||||||
const onHandleChange = (event) => {
|
|
||||||
setData(event.target.name, event.target.value);
|
|
||||||
};
|
|
||||||
|
|
||||||
const submit = (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
post(route('password.email'));
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Guest>
|
|
||||||
<Head title="Forgot Password" />
|
|
||||||
|
|
||||||
<div className="mb-4 text-sm text-gray-500 leading-normal">
|
|
||||||
Forgot your password? No problem. Just let us know your email address and we will email you a password
|
|
||||||
reset link that will allow you to choose a new one.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{status && <div className="mb-4 font-medium text-sm text-green-600">{status}</div>}
|
|
||||||
|
|
||||||
<ValidationErrors errors={errors} />
|
|
||||||
|
|
||||||
<form onSubmit={submit}>
|
|
||||||
<Input
|
|
||||||
type="text"
|
|
||||||
name="email"
|
|
||||||
value={data.email}
|
|
||||||
className="mt-1 block w-full"
|
|
||||||
isFocused={true}
|
|
||||||
handleChange={onHandleChange}
|
|
||||||
/>
|
|
||||||
|
|
||||||
<div className="flex items-center justify-end mt-4">
|
|
||||||
<Button className="ml-4" processing={processing}>
|
|
||||||
Email Password Reset Link
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</Guest>
|
|
||||||
);
|
|
||||||
}
|
|
@ -1,88 +0,0 @@
|
|||||||
import React, { useEffect } from 'react';
|
|
||||||
import Button from '@/Components/Button';
|
|
||||||
import Guest from '@/Layouts/Guest';
|
|
||||||
import Input from '@/Components/Input';
|
|
||||||
import Label from '@/Components/Label';
|
|
||||||
import ValidationErrors from '@/Components/ValidationErrors';
|
|
||||||
import { Head, useForm } from '@inertiajs/inertia-react';
|
|
||||||
|
|
||||||
export default function ResetPassword({ token, email }) {
|
|
||||||
const { data, setData, post, processing, errors, reset } = useForm({
|
|
||||||
token: token,
|
|
||||||
email: email,
|
|
||||||
password: '',
|
|
||||||
password_confirmation: '',
|
|
||||||
});
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
return () => {
|
|
||||||
reset('password', 'password_confirmation');
|
|
||||||
};
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const onHandleChange = (event) => {
|
|
||||||
setData(event.target.name, event.target.value);
|
|
||||||
};
|
|
||||||
|
|
||||||
const submit = (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
post(route('password.update'));
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Guest>
|
|
||||||
<Head title="Reset Password" />
|
|
||||||
|
|
||||||
<ValidationErrors errors={errors} />
|
|
||||||
|
|
||||||
<form onSubmit={submit}>
|
|
||||||
<div>
|
|
||||||
<Label forInput="email" value="Email" />
|
|
||||||
|
|
||||||
<Input
|
|
||||||
type="email"
|
|
||||||
name="email"
|
|
||||||
value={data.email}
|
|
||||||
className="mt-1 block w-full"
|
|
||||||
autoComplete="username"
|
|
||||||
handleChange={onHandleChange}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="mt-4">
|
|
||||||
<Label forInput="password" value="Password" />
|
|
||||||
|
|
||||||
<Input
|
|
||||||
type="password"
|
|
||||||
name="password"
|
|
||||||
value={data.password}
|
|
||||||
className="mt-1 block w-full"
|
|
||||||
autoComplete="new-password"
|
|
||||||
isFocused={true}
|
|
||||||
handleChange={onHandleChange}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="mt-4">
|
|
||||||
<Label forInput="password_confirmation" value="Confirm Password" />
|
|
||||||
|
|
||||||
<Input
|
|
||||||
type="password"
|
|
||||||
name="password_confirmation"
|
|
||||||
value={data.password_confirmation}
|
|
||||||
className="mt-1 block w-full"
|
|
||||||
autoComplete="new-password"
|
|
||||||
handleChange={onHandleChange}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="flex items-center justify-end mt-4">
|
|
||||||
<Button className="ml-4" processing={processing}>
|
|
||||||
Reset Password
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</Guest>
|
|
||||||
);
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import Button from '@/Components/Button';
|
|
||||||
import Guest from '@/Layouts/Guest';
|
|
||||||
import { Head, Link, useForm } from '@inertiajs/inertia-react';
|
|
||||||
|
|
||||||
export default function VerifyEmail({ status }) {
|
|
||||||
const { post, processing } = useForm();
|
|
||||||
|
|
||||||
const submit = (e) => {
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
post(route('verification.send'));
|
|
||||||
};
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Guest>
|
|
||||||
<Head title="Email Verification" />
|
|
||||||
|
|
||||||
<div className="mb-4 text-sm text-gray-600">
|
|
||||||
Thanks for signing up! Before getting started, could you verify your email address by clicking on the
|
|
||||||
link we just emailed to you? If you didn't receive the email, we will gladly send you another.
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{status === 'verification-link-sent' && (
|
|
||||||
<div className="mb-4 font-medium text-sm text-green-600">
|
|
||||||
A new verification link has been sent to the email address you provided during registration.
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
|
|
||||||
<form onSubmit={submit}>
|
|
||||||
<div className="mt-4 flex items-center justify-between">
|
|
||||||
<Button processing={processing}>Resend Verification Email</Button>
|
|
||||||
|
|
||||||
<Link
|
|
||||||
href={route('logout')}
|
|
||||||
method="post"
|
|
||||||
as="button"
|
|
||||||
className="underline text-sm text-gray-600 hover:text-gray-900"
|
|
||||||
>
|
|
||||||
Log Out
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</Guest>
|
|
||||||
);
|
|
||||||
}
|
|
@ -0,0 +1,89 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import Authenticated from '@/Layouts/Authenticated';
|
||||||
|
import { Head } from '@inertiajs/inertia-react';
|
||||||
|
import Button from '@/Components/Button';
|
||||||
|
|
||||||
|
export default function Jabatan(props) {
|
||||||
|
return (
|
||||||
|
<Authenticated
|
||||||
|
auth={props.auth}
|
||||||
|
errors={props.errors}
|
||||||
|
>
|
||||||
|
<Head title="Jabatan" />
|
||||||
|
|
||||||
|
<div className="py-0">
|
||||||
|
<div className="max-w-7xl sm:px-6">
|
||||||
|
<div className="bg-white overflow-hidden shadow-sm sm:rounded-lg">
|
||||||
|
<div className="p-6 bg-white border-b border-gray-200">
|
||||||
|
<Button>Tambah</Button>
|
||||||
|
<div className="overflow-x-auto relative pt-5">
|
||||||
|
<table className="w-full text-sm text-left text-gray-500 dark:text-gray-400">
|
||||||
|
<thead className="text-xs text-gray-700 uppercase bg-gray-50 dark:bg-gray-700 dark:text-gray-400">
|
||||||
|
<tr>
|
||||||
|
<th scope="col" className="py-3 px-6">
|
||||||
|
Product name
|
||||||
|
</th>
|
||||||
|
<th scope="col" className="py-3 px-6">
|
||||||
|
Color
|
||||||
|
</th>
|
||||||
|
<th scope="col" className="py-3 px-6">
|
||||||
|
Category
|
||||||
|
</th>
|
||||||
|
<th scope="col" className="py-3 px-6">
|
||||||
|
Price
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr className="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
|
||||||
|
<th scope="row" className="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
|
||||||
|
Apple MacBook Pro 17"
|
||||||
|
</th>
|
||||||
|
<td className="py-4 px-6">
|
||||||
|
Sliver
|
||||||
|
</td>
|
||||||
|
<td className="py-4 px-6">
|
||||||
|
Laptop
|
||||||
|
</td>
|
||||||
|
<td className="py-4 px-6">
|
||||||
|
$2999
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr className="bg-white border-b dark:bg-gray-800 dark:border-gray-700">
|
||||||
|
<th scope="row" className="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
|
||||||
|
Microsoft Surface Pro
|
||||||
|
</th>
|
||||||
|
<td className="py-4 px-6">
|
||||||
|
White
|
||||||
|
</td>
|
||||||
|
<td className="py-4 px-6">
|
||||||
|
Laptop PC
|
||||||
|
</td>
|
||||||
|
<td className="py-4 px-6">
|
||||||
|
$1999
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr className="bg-white dark:bg-gray-800">
|
||||||
|
<th scope="row" className="py-4 px-6 font-medium text-gray-900 whitespace-nowrap dark:text-white">
|
||||||
|
Magic Mouse 2
|
||||||
|
</th>
|
||||||
|
<td className="py-4 px-6">
|
||||||
|
Black
|
||||||
|
</td>
|
||||||
|
<td className="py-4 px-6">
|
||||||
|
Accessories
|
||||||
|
</td>
|
||||||
|
<td className="py-4 px-6">
|
||||||
|
$99
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Authenticated>
|
||||||
|
);
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
import db from "@/firebase";
|
||||||
|
import { collection, getDocs, doc, setDoc } from "firebase/firestore";
|
||||||
|
|
||||||
|
async function getAllJabatan() {
|
||||||
|
const collect = collection(db, 'jabatan')
|
||||||
|
const data = await getDocs(collect)
|
||||||
|
const lists = data.docs.map(doc => doc.data())
|
||||||
|
return lists
|
||||||
|
}
|
||||||
|
|
||||||
|
async function createJabatan(payload) {
|
||||||
|
const docRef = await setDoc(doc(db, "jabatan"), payload);
|
||||||
|
return docRef.id
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
getAllJabatan,
|
||||||
|
createJabatan
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
import db from "@/firebase";
|
||||||
|
import { collection, getDocs } from "firebase/firestore";
|
||||||
|
|
||||||
|
async function getAllUsers() {
|
||||||
|
const usersCollcetion = collection(db, 'users')
|
||||||
|
const users = await getDocs(usersCollcetion)
|
||||||
|
const usersList = users.docs.map(doc => doc.data())
|
||||||
|
return usersList
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
getAllUsers
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
// Import the functions you need from the SDKs you need
|
||||||
|
import { initializeApp } from "firebase/app";
|
||||||
|
import { getAnalytics } from "firebase/analytics";
|
||||||
|
// TODO: Add SDKs for Firebase products that you want to use
|
||||||
|
// https://firebase.google.com/docs/web/setup#available-libraries
|
||||||
|
|
||||||
|
// Your web app's Firebase configuration
|
||||||
|
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
|
||||||
|
const firebaseConfig = {
|
||||||
|
apiKey: "xxxxxxxxxxxxxxxx",
|
||||||
|
authDomain: "xxxxxxxxxxxxxxxx.firebaseapp.com",
|
||||||
|
projectId: "xxxxxxxxxxxxxxxx",
|
||||||
|
storageBucket: "xxxxxxxxxxxxxxxx.appspot.com",
|
||||||
|
messagingSenderId: "xxxxxxxxxxxxxxxx",
|
||||||
|
appId: "xxxxxxxxxxxxxxxx",
|
||||||
|
measurementId: "xxxxxxxxxxxxxxxx"
|
||||||
|
};
|
||||||
|
|
||||||
|
// Initialize Firebase
|
||||||
|
const app = initializeApp(firebaseConfig);
|
||||||
|
const analytics = getAnalytics(app);
|
Loading…
Reference in New Issue