Browse Source

Second Commit Caprive Portal

Update Project
main
MedioseAlfranda 3 years ago
parent
commit
b36bbd42e5
23 changed files with 12663 additions and 332 deletions
  1. +65
    -1
      Aplikasi-Mikrotik/app/Http/Controllers/Auth/LoginController.php
  2. +45
    -2
      Aplikasi-Mikrotik/app/Http/Controllers/Auth/RegisterController.php
  3. +92
    -2
      Aplikasi-Mikrotik/app/Http/Controllers/RouterController.php
  4. +8
    -34
      Aplikasi-Mikrotik/app/Models/AuthenticationOtp.php
  5. +11
    -5
      Aplikasi-Mikrotik/app/Models/UserAccount.php
  6. +5
    -2
      Aplikasi-Mikrotik/composer.json
  7. +1374
    -126
      Aplikasi-Mikrotik/composer.lock
  8. +1
    -0
      Aplikasi-Mikrotik/config/app.php
  9. +7
    -7
      Aplikasi-Mikrotik/config/auth.php
  10. +6
    -6
      Aplikasi-Mikrotik/config/mail.php
  11. +17
    -0
      Aplikasi-Mikrotik/config/services.php
  12. +14
    -11
      Aplikasi-Mikrotik/database/migrations/2022_12_16_080715_create_user_accounts_table.php
  13. +3
    -0
      Aplikasi-Mikrotik/database/migrations/2022_12_16_082740_create_authentication_otps_table.php
  14. +2
    -0
      Aplikasi-Mikrotik/database/migrations/2022_12_16_085559_create_access_logs_table.php
  15. +1
    -1
      Aplikasi-Mikrotik/package-lock.json
  16. +10878
    -0
      Aplikasi-Mikrotik/public/admin/css/bootstrap.css
  17. +2
    -1
      Aplikasi-Mikrotik/public/admin/css/sb-admin-2.css
  18. +1
    -0
      Aplikasi-Mikrotik/public/admin/css/toastr.min.css
  19. +26
    -13
      Aplikasi-Mikrotik/resources/views/auth/login.blade.php
  20. +1
    -1
      Aplikasi-Mikrotik/resources/views/auth/passwords/confirm.blade.php
  21. +13
    -1
      Aplikasi-Mikrotik/resources/views/auth/register.blade.php
  22. +72
    -118
      Aplikasi-Mikrotik/resources/views/welcome.blade.php
  23. +19
    -1
      Aplikasi-Mikrotik/routes/web.php

+ 65
- 1
Aplikasi-Mikrotik/app/Http/Controllers/Auth/LoginController.php View File

@@ -2,8 +2,12 @@

namespace App\Http\Controllers\Auth;

use App\Models\UserAccount;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\Providers\RouteServiceProvider;
use Exception;
use Laravel\Socialite\Facades\Socialite;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
@@ -37,4 +41,64 @@ class LoginController extends Controller
{
$this->middleware('guest')->except('logout');
}
}


public function redirectToProvider($provider)
{
return Socialite::driver($provider)->redirect();
}

/**
* @param $provider
* @return \Illuminate\Http\RedirectResponse
*/
public function handleProvideCallback($provider)
{
try {

$user = Socialite::driver($provider)->user();

}catch (Exception $e) {
return redirect()->back();
}

$authUser = $this->findOrCreateUser($user, $provider);

Auth()->login($authUser, true);

return redirect()->route('home');

}

/**
* @param $socialUser
* @param $provider
* @return mixed
*/
public function findOrCreateUser($socialUser, $provider)
{
$socialAccount = UserAccount::where('provider_id', $socialUser->getId())
->where('provider_name', $provider)
->first();

if ($socialAccount) {

return $socialAccount->user;

} else {

$user = UserAccount::where('email', $socialUser->getEmail())->first();

if (! $user) {
$user = UserAccount::create([
'name' => $socialUser->getName(),
'email' => $socialUser->getEmail(),
'provider_id' => $socialUser->getId(),
'provider_name' => $provider
]);
}
return $user;

}
}
}

+ 45
- 2
Aplikasi-Mikrotik/app/Http/Controllers/Auth/RegisterController.php View File

@@ -5,9 +5,13 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\UserAccount;

use App\Models\accessLogs;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Illuminate\Http\Request;


class RegisterController extends Controller
{
@@ -51,15 +55,18 @@ class RegisterController extends Controller
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'tanggal_lahir' => ['required', 'date:d/m/Y'],
'tanggal_lahir' => ['required', 'date:DD-MM-YYYY'],
'tempat_lahir' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:user_accounts'],
'handphone' => ['required', 'string', 'max:255'],
'jenis_kelamin' => ['required', 'string', 'max:255'],
'agama' => ['required', 'string', 'max:255'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
'user_role' => ['required', 'string', 'max:255'],
]);


}

/**
@@ -79,6 +86,42 @@ class RegisterController extends Controller
'jenis_kelamin' => $data['jenis_kelamin'],
'agama' => $data ['agama'],
'password' => Hash::make($data['password']),
'user_role' => $data['user_role'],
]);
}
}


public function userRegister(Request $request){

$user = $request->validate([
'name' => ['required', 'string', 'max:255'],
'tanggal_lahir' => ['required', 'date:DD-MM-YYYY'],
'tempat_lahir' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:user_accounts'],
'handphone' => ['required', 'string', 'max:255'],
'jenis_kelamin' => ['required', 'string', 'max:255'],
'agama' => ['required', 'string', 'max:255'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
'user_role' => ['required', 'string', 'max:255'],
]);

$ipadd = accessLogs::get('mac_address');
$mac = explode(" ", $ipadd);
$mac_address = $mac[0];

$ipaddress = $request->ip();
$user ['mac_address'] = $ipadd;
$user ['password'] = Hash::make($request->password);
UserAccount::create($user);
return redirect()->route('login');

}


}





+ 92
- 2
Aplikasi-Mikrotik/app/Http/Controllers/RouterController.php View File

@@ -2,9 +2,99 @@

namespace App\Http\Controllers;

use App\Models\AuthenticationOtp;
use PEAR2\Net\RouterOS;
use Exception;

use Illuminate\Http\Request;
use Symfony\Component\Routing\DependencyInjection\RoutingResolverPass;

class RouterController extends Controller
{
//
}
public function connecttoWifi(){
try {
$client = new RouterOS\Client('192.168.88.1', 'admin', 'password');
$DeviceConnect = $client->sendSync(new RouterOS\Request('/ip/arp/print'));
dd($DeviceConnect);
foreach ($DeviceConnect as $response) {
if ($response->getType() === RouterOS\Response::TYPE_DATA) {
dd($response->getProperty('mac-address'));
}
}
} catch (Exception $e) {

throw $e;
//die('Unable to connect to the router.');
//Inspect $e if you want to know details about the failure.
}
}

public function subscription(){
//return register user ke paket
try {
$client = new RouterOS\Client('192.168.88.1', 'admin', 'password');
$amount = 5;
$plan1 = 'bronze';
$plan2 = 'diamond';
$plan3 = 'gold';
$user = auth()->user();
$email = $user->name;
$formatted_email = str_replace('','', $email);
$add_user= new RouterOS\Request('/tool/usermanager/user/add');
$client->sendSync(
$add_user
->setArgument('customer','admin')
->setArgument('disabled', 'no')
->setArgument('username', $formatted_email)
->setArgument('password', $formatted_email)
->setArgument('shared-users', 1)
);
$activate_profile = new RouterOS\Request('/tool user-manager user create-and-activate-profile');
$client->sendSync(
$activate_profile
->setArgument('customer', 'admin')
->setArgument('profile', $plan2)
->setArgument('numbers', $formatted_email)
);

$authen = AuthenticationOtp::where('package', $plan2)->where('status', 1)->first();
if(!$authen){
}
$authentication = new AuthenticationOtp();
$authentication->user_name = $formatted_email;
$authentication->password = $formatted_email;
$authentication->user_id = auth()->id();
$authentication->package = $plan2;
$authentication->status = 1;
$authentication->amount = $amount;
$authentication->save();
return redirect('/home');
}catch (Exception $e) {
throw $e;
//die('Unable to connect to the router.');
//Inspect $e if you want to know details about the failure.
}
}

public function hostpotUsers(){
$client = new RouterOS\Client('192.168.88.1', 'admin', 'password');
$activate_profile = new RouterOS\Request('/tool user-manager user Print');
$users_Hotspot = $client->sendSync( $activate_profile);

}



}





+ 8
- 34
Aplikasi-Mikrotik/app/Models/AuthenticationOtp.php View File

@@ -4,43 +4,17 @@ namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\UserAccount as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
class AuthenticationOtp extends Model
{
use HasFactory, Notifiable;

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'auth_otp_id',
'user_id',
'OTP',
'type_otp',
'last_update_date',
'last_by',
];

/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'OTP',
'type_otp',
];

/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'last_update_date' => 'datetime',
];
protected $guarded = [];
public function user(){
return $this->belongsTo(UserAccount::class, 'user_id');
}
}

+ 11
- 5
Aplikasi-Mikrotik/app/Models/UserAccount.php View File

@@ -4,12 +4,12 @@ namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Foundation\Auth\UserAccount as Authenticatable;
use Illuminate\Notifications\Notifiable;


class UserAccount extends Model
{
class UserAccount extends Authenticatable{
use HasFactory, Notifiable;

/**
@@ -17,15 +17,21 @@ class UserAccount extends Model
*
* @var array
*/

protected $primaryKey = 'user_id';
protected $fillable = [
'name',
'tanggal_lahir',
'tempat_lahir',
'email',
'provider_id',
'photo_account',
'handphone',
'jenis_kelamin',
'agama',
'password',
'user_role',
];

/**
@@ -47,9 +53,9 @@ class UserAccount extends Model
'email_verified_at' => 'datetime',
];

public function Authenticationotp()
public function Authenticationotp()
{
return $this->belongsTo(AuthenticationOtp::class);
return $this->hasMany(AuthenticationOtp::class, 'user_id');
}

/**


+ 5
- 2
Aplikasi-Mikrotik/composer.json View File

@@ -10,12 +10,15 @@
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.12",
"laravel/passport": "^10.4",
"laravel/socialite": "^5.5",
"laravel/tinker": "^2.5",
"laravel/ui": "^3.2",
"pear2/cache_shm": "*@alpha",
"pear2/cache_shm": "^0.2.0",
"pear2/console_color": "^1.0",
"pear2/console_commandline": "*@alpha",
"pear2/net_routeros": "*@beta"
"pear2/net_routeros": "dev-develop@dev",
"pear2/net_transmitter": "1.0.0b1"
},
"require-dev": {
"facade/ignition": "^2.5",


+ 1374
- 126
Aplikasi-Mikrotik/composer.lock
File diff suppressed because it is too large
View File


+ 1
- 0
Aplikasi-Mikrotik/config/app.php View File

@@ -161,6 +161,7 @@ return [
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
Laravel\Socialite\SocialiteServiceProvider::class,

/*
* Package Service Providers...


+ 7
- 7
Aplikasi-Mikrotik/config/auth.php View File

@@ -15,7 +15,7 @@ return [

'defaults' => [
'guard' => 'web',
'passwords' => 'users',
'passwords' => 'user_accounts',
],

/*
@@ -38,12 +38,12 @@ return [
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
'provider' => 'user_accounts',
],

'api' => [
'driver' => 'token',
'provider' => 'users',
'provider' => 'user_accounts',
'hash' => false,
],
],
@@ -66,9 +66,9 @@ return [
*/

'providers' => [
'users' => [
'user_accounts' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
'model' => App\Models\UserAccount::class,
],

// 'users' => [
@@ -93,8 +93,8 @@ return [
*/

'passwords' => [
'users' => [
'provider' => 'users',
'user_accounts' => [
'provider' => 'user_accounts',
'table' => 'password_resets',
'expire' => 60,
'throttle' => 60,


+ 6
- 6
Aplikasi-Mikrotik/config/mail.php View File

@@ -36,11 +36,11 @@ return [
'mailers' => [
'smtp' => [
'transport' => 'smtp',
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'host' => env('MAIL_HOST', 'smtp.mailtrap.io'),
'port' => env('MAIL_PORT',465),
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'username' => env('df44c2ccd88c52'),
'password' => env('af8cad37a2b099'),
'timeout' => null,
'auth_mode' => null,
],
@@ -84,8 +84,8 @@ return [
*/

'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
'name' => env('MAIL_FROM_NAME', 'Example'),
'address' => env('MAIL_FROM_ADDRESS', 'df44c2ccd88c52'),
'name' => env('MAIL_FROM_NAME', 'Gabriel'),
],

/*


+ 17
- 0
Aplikasi-Mikrotik/config/services.php View File

@@ -30,4 +30,21 @@ return [
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],


'google' => [
'client_id' => env('GOOGLE_CLIENT_ID'),
'client_secret' => env('GOOGLE_CLIENT_SECRET'),
'redirect' => env('GOOGLE_REDIRECT_URL'),
],
'facebook' => [
'client_id' => env('FACEBOOK_CLIENT_ID'),
'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
'redirect' => env('FACEBOOK_CLIENT_REDIRECT'),
],
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => env('GITHUB_CLIENT_REDIRECT'),
],

];

+ 14
- 11
Aplikasi-Mikrotik/database/migrations/2022_12_16_080715_create_user_accounts_table.php View File

@@ -15,20 +15,23 @@ class CreateUserAccountsTable extends Migration
{
Schema::create('user_accounts', function (Blueprint $table) {
$table->id('user_id');
$table->string('name')->nullable(false);
$table->date('tanggal_lahir')->nullable(false);
$table->string('tempat_lahir')->nullable(false);
$table->string('name')->nullable();
$table->date('tanggal_lahir')->nullable();
$table->string('tempat_lahir')->nullable();
$table->string('email')->unique();
$table->timestamp('email_verified_at');
$table->string('handphone')->nullable(false);
$table->string('jenis_kelamin')->nullable(false);
$table->string('agama')->nullable(false);
$table->string('password')->nullable(false);
$table->string('provider_id')->nullable();
$table->string('provider_name')->nullable();

$table->string('photo_account')->nullable();

$table->string('handphone')->nullable();
$table->string('jenis_kelamin')->nullable();
$table->string('agama')->nullable();
$table->string('password')->nullable();
$table->rememberToken();
$table->timestamps();
$table->create('create_by')->nullable(false);
$table->date('last_update')->nullable(false);
$table->string('user_role')->nullable(false);
$table->timestamps();
$table->string('user_role')->nullable();
});
}


+ 3
- 0
Aplikasi-Mikrotik/database/migrations/2022_12_16_082740_create_authentication_otps_table.php View File

@@ -17,7 +17,10 @@ class CreateAuthenticationOtpsTable extends Migration
$table->id('auth_otp_id');
$table->UnsignedBigInteger('user_id');
$table->string('OTP');
$table->string('amount')->nullable();
$table->string('package')->nullable();
$table->string('type_otp');
$table->string('status')->default(0);
$table->timestamps();
$table->date('last_update_date');
$table->string('last_by');


+ 2
- 0
Aplikasi-Mikrotik/database/migrations/2022_12_16_085559_create_access_logs_table.php View File

@@ -20,6 +20,8 @@ class CreateAccessLogsTable extends Migration
$table->timestamps();
$table->date('last_update_date');
$table->string('last_by');

$table->foreign('user_id')->references('user_id')->on('user_accounts');

});


+ 1
- 1
Aplikasi-Mikrotik/package-lock.json View File

@@ -1,5 +1,5 @@
{
"name": "ExampleProject",
"name": "Aplikasi-Mikrotik",
"lockfileVersion": 2,
"requires": true,
"packages": {


+ 10878
- 0
Aplikasi-Mikrotik/public/admin/css/bootstrap.css
File diff suppressed because it is too large
View File


+ 2
- 1
Aplikasi-Mikrotik/public/admin/css/sb-admin-2.css View File

@@ -10862,8 +10862,9 @@ a:focus {

.bg-login-image {
background: url("https://i.postimg.cc/28D8yMmk/Logo-Wifi-Panel-Thamrin.gif");
background-size: contain;
background-repeat: no-repeat;
background-position: center;
background-size: cover;
}



+ 1
- 0
Aplikasi-Mikrotik/public/admin/css/toastr.min.css
File diff suppressed because it is too large
View File


+ 26
- 13
Aplikasi-Mikrotik/resources/views/auth/login.blade.php View File

@@ -43,24 +43,37 @@
Me</label>
</div>
</div>

<button class="btn btn-primary btn-user btn-block">
Login
</button>
{{-- <hr>
<a href="index.html" class="btn btn-google btn-user btn-block">
<i class="fab fa-google fa-fw"></i> Login with Google
</a>
<a href="index.html" class="btn btn-facebook btn-user btn-block">
<i class="fab fa-facebook-f fa-fw"></i> Login with Facebook
</a> --}}

<div class="text-center">
<a class="small" href="{{route('password.request')}}">Lupa Password?</a>
</div>

<div class="text-center">
<a class="small" href="{{('register')}}">Buat akun Baru Klik disini</a>
</div>

<div class="text-center">
<p>===================================</p>
</div>
<div class="text-center">
<p class="font-weight-bold"> Atau Membuat Akun Lewat Authentikasi Social Media </p>
</div>
<div class="form-group row">
<a href="/auth/google" class="btn btn-danger btn-user btn-block">Login Dengan Google</a>
<a href="/auth/facebook" class="btn btn-primary btn-user btn-block">Login Dengan Facebook</a>
<a href="/auth/github" class="btn btn-dark btn-user btn-block">Login Dengan Github</a>
</div>
</form>
<hr>
<div class="text-center">
<a class="small" href="{{route('password.request')}}">Forgot Password?</a>
</div>
<div class="text-center">
<a class="small" href="{{('register')}}">Create an Account!</a>
</div>
</div>
</div>
</div>


+ 1
- 1
Aplikasi-Mikrotik/resources/views/auth/passwords/confirm.blade.php View File

@@ -1,4 +1,4 @@
@extends('layouts.app')
@extends('layouts.app')

@section('content')
<div class="container">


+ 13
- 1
Aplikasi-Mikrotik/resources/views/auth/register.blade.php View File

@@ -15,7 +15,7 @@
<div class="text-center">
<h1 class="h4 text-gray-900 mb-4">Register Your Account!</h1>
</div>
<form method="POST" action="{{ route('register') }}">
<form method="POST" action="{{ route('user.register') }}">
@csrf
<div class="form-group">
<input id="name" type="text" class="form-control form-control-user @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" placeholder="Name" autofocus>
@@ -80,6 +80,7 @@
</div>



<div class="form-group">
<input id="agama" type="agama" class="form-control form-control-user @error('agama') is-invalid @enderror" name="agama" value="{{ old('agama') }}" required autocomplete="agama" autofocus placeholder="Agama">

@@ -101,6 +102,17 @@
</span>
@enderror
</div>

<div class="form-group">
<input id="user_role" type="user_role" class="form-control form-control-user @error('user_role') is-invalid @enderror" name="user_role" value="{{ old('user_role') }}" required autocomplete="user_role" autofocus placeholder="User Role for Session">

@error('user_role')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<input id="password-confirm" type="password" class="form-control form-control-user" name="password_confirmation" required autocomplete="new-password" placeholder="Confirm password">
</div>


+ 72
- 118
Aplikasi-Mikrotik/resources/views/welcome.blade.php View File

@@ -1,132 +1,86 @@
<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Login Wifi</title>

<!-- Fonts -->
<link href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap" rel="stylesheet">

<!-- Styles -->
<style>
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}a{background-color:transparent}[hidden]{display:none}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}*,:after,:before{box-sizing:border-box;border:0 solid #e2e8f0}a{color:inherit;text-decoration:inherit}svg,video{display:block;vertical-align:middle}video{max-width:100%;height:auto}.bg-white{--bg-opacity:1;background-color:#fff;background-color:rgba(255,255,255,var(--bg-opacity))}.bg-gray-100{--bg-opacity:1;background-color:#f7fafc;background-color:rgba(247,250,252,var(--bg-opacity))}.border-gray-200{--border-opacity:1;border-color:#edf2f7;border-color:rgba(237,242,247,var(--border-opacity))}.border-t{border-top-width:1px}.flex{display:flex}.grid{display:grid}.hidden{display:none}.items-center{align-items:center}.justify-center{justify-content:center}.font-semibold{font-weight:600}.h-5{height:1.25rem}.h-8{height:2rem}.h-16{height:4rem}.text-sm{font-size:.875rem}.text-lg{font-size:1.125rem}.leading-7{line-height:1.75rem}.mx-auto{margin-left:auto;margin-right:auto}.ml-1{margin-left:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.ml-2{margin-left:.5rem}.mt-4{margin-top:1rem}.ml-4{margin-left:1rem}.mt-8{margin-top:2rem}.ml-12{margin-left:3rem}.-mt-px{margin-top:-1px}.max-w-6xl{max-width:72rem}.min-h-screen{min-height:100vh}.overflow-hidden{overflow:hidden}.p-6{padding:1.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.pt-8{padding-top:2rem}.fixed{position:fixed}.relative{position:relative}.top-0{top:0}.right-0{right:0}.shadow{box-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px 0 rgba(0,0,0,.06)}.text-center{text-align:center}.text-gray-200{--text-opacity:1;color:#edf2f7;color:rgba(237,242,247,var(--text-opacity))}.text-gray-300{--text-opacity:1;color:#e2e8f0;color:rgba(226,232,240,var(--text-opacity))}.text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}.text-gray-500{--text-opacity:1;color:#a0aec0;color:rgba(160,174,192,var(--text-opacity))}.text-gray-600{--text-opacity:1;color:#718096;color:rgba(113,128,150,var(--text-opacity))}.text-gray-700{--text-opacity:1;color:#4a5568;color:rgba(74,85,104,var(--text-opacity))}.text-gray-900{--text-opacity:1;color:#1a202c;color:rgba(26,32,44,var(--text-opacity))}.underline{text-decoration:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.w-5{width:1.25rem}.w-8{width:2rem}.w-auto{width:auto}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}@media (min-width:640px){.sm\:rounded-lg{border-radius:.5rem}.sm\:block{display:block}.sm\:items-center{align-items:center}.sm\:justify-start{justify-content:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:h-20{height:5rem}.sm\:ml-0{margin-left:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:pt-0{padding-top:0}.sm\:text-left{text-align:left}.sm\:text-right{text-align:right}}@media (min-width:768px){.md\:border-t-0{border-top-width:0}.md\:border-l{border-left-width:1px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){.lg\:px-8{padding-left:2rem;padding-right:2rem}}@media (prefers-color-scheme:dark){.dark\:bg-gray-800{--bg-opacity:1;background-color:#2d3748;background-color:rgba(45,55,72,var(--bg-opacity))}.dark\:bg-gray-900{--bg-opacity:1;background-color:#1a202c;background-color:rgba(26,32,44,var(--bg-opacity))}.dark\:border-gray-700{--border-opacity:1;border-color:#4a5568;border-color:rgba(74,85,104,var(--border-opacity))}.dark\:text-white{--text-opacity:1;color:#fff;color:rgba(255,255,255,var(--text-opacity))}.dark\:text-gray-400{--text-opacity:1;color:#cbd5e0;color:rgba(203,213,224,var(--text-opacity))}}
</style>

<style>
body {
font-family: 'Nunito', sans-serif;
}
</style>
</head>
<body class="antialiased">
<div class="relative flex items-top justify-center min-h-screen bg-gray-100 dark:bg-gray-900 sm:items-center py-4 sm:pt-0">
@if (Route::has('login'))
<div class="hidden fixed top-0 right-0 px-6 py-4 sm:block">
@auth
<a href="{{ url('/home') }}" class="text-sm text-gray-700 underline">Home</a>
@else
<a href="{{ route('login') }}" class="text-sm text-gray-700 underline">Log in</a>

@if (Route::has('register'))
<a href="{{ route('register') }}" class="ml-4 text-sm text-gray-700 underline">Register</a>
@endif
@endauth
</div>
@endif

<div class="max-w-6xl mx-auto sm:px-6 lg:px-8">
<div class="flex justify-center pt-8 sm:justify-start sm:pt-0">
<svg viewBox="0 0 651 192" fill="none" xmlns="http://www.w3.org/2000/svg" class="h-16 w-auto text-gray-700 sm:h-20">
<g clip-path="url(#clip0)" fill="#2A10F3">
<path d="M248.032 44.676h-16.466v100.23h47.394v-14.748h-30.928V44.676zM337.091 87.202c-2.101-3.341-5.083-5.965-8.949-7.875-3.865-1.909-7.756-2.864-11.669-2.864-5.062 0-9.69.931-13.89 2.792-4.201 1.861-7.804 4.417-10.811 7.661-3.007 3.246-5.347 6.993-7.016 11.239-1.672 4.249-2.506 8.713-2.506 13.389 0 4.774.834 9.26 2.506 13.459 1.669 4.202 4.009 7.925 7.016 11.169 3.007 3.246 6.609 5.799 10.811 7.66 4.199 1.861 8.828 2.792 13.89 2.792 3.913 0 7.804-.955 11.669-2.863 3.866-1.908 6.849-4.533 8.949-7.875v9.021h15.607V78.182h-15.607v9.02zm-1.431 32.503c-.955 2.578-2.291 4.821-4.009 6.73-1.719 1.91-3.795 3.437-6.229 4.582-2.435 1.146-5.133 1.718-8.091 1.718-2.96 0-5.633-.572-8.019-1.718-2.387-1.146-4.438-2.672-6.156-4.582-1.719-1.909-3.032-4.152-3.938-6.73-.909-2.577-1.36-5.298-1.36-8.161 0-2.864.451-5.585 1.36-8.162.905-2.577 2.219-4.819 3.938-6.729 1.718-1.908 3.77-3.437 6.156-4.582 2.386-1.146 5.059-1.718 8.019-1.718 2.958 0 5.656.572 8.091 1.718 2.434 1.146 4.51 2.674 6.229 4.582 1.718 1.91 3.054 4.152 4.009 6.729.953 2.577 1.432 5.298 1.432 8.162-.001 2.863-.479 5.584-1.432 8.161zM463.954 87.202c-2.101-3.341-5.083-5.965-8.949-7.875-3.865-1.909-7.756-2.864-11.669-2.864-5.062 0-9.69.931-13.89 2.792-4.201 1.861-7.804 4.417-10.811 7.661-3.007 3.246-5.347 6.993-7.016 11.239-1.672 4.249-2.506 8.713-2.506 13.389 0 4.774.834 9.26 2.506 13.459 1.669 4.202 4.009 7.925 7.016 11.169 3.007 3.246 6.609 5.799 10.811 7.66 4.199 1.861 8.828 2.792 13.89 2.792 3.913 0 7.804-.955 11.669-2.863 3.866-1.908 6.849-4.533 8.949-7.875v9.021h15.607V78.182h-15.607v9.02zm-1.432 32.503c-.955 2.578-2.291 4.821-4.009 6.73-1.719 1.91-3.795 3.437-6.229 4.582-2.435 1.146-5.133 1.718-8.091 1.718-2.96 0-5.633-.572-8.019-1.718-2.387-1.146-4.438-2.672-6.156-4.582-1.719-1.909-3.032-4.152-3.938-6.73-.909-2.577-1.36-5.298-1.36-8.161 0-2.864.451-5.585 1.36-8.162.905-2.577 2.219-4.819 3.938-6.729 1.718-1.908 3.77-3.437 6.156-4.582 2.386-1.146 5.059-1.718 8.019-1.718 2.958 0 5.656.572 8.091 1.718 2.434 1.146 4.51 2.674 6.229 4.582 1.718 1.91 3.054 4.152 4.009 6.729.953 2.577 1.432 5.298 1.432 8.162 0 2.863-.479 5.584-1.432 8.161zM650.772 44.676h-15.606v100.23h15.606V44.676zM365.013 144.906h15.607V93.538h26.776V78.182h-42.383v66.724zM542.133 78.182l-19.616 51.096-19.616-51.096h-15.808l25.617 66.724h19.614l25.617-66.724h-15.808zM591.98 76.466c-19.112 0-34.239 15.706-34.239 35.079 0 21.416 14.641 35.079 36.239 35.079 12.088 0 19.806-4.622 29.234-14.688l-10.544-8.158c-.006.008-7.958 10.449-19.832 10.449-13.802 0-19.612-11.127-19.612-16.884h51.777c2.72-22.043-11.772-40.877-33.023-40.877zm-18.713 29.28c.12-1.284 1.917-16.884 18.589-16.884 16.671 0 18.697 15.598 18.813 16.884h-37.402zM184.068 43.892c-.024-.088-.073-.165-.104-.25-.058-.157-.108-.316-.191-.46-.056-.097-.137-.176-.203-.265-.087-.117-.161-.242-.265-.345-.085-.086-.194-.148-.29-.223-.109-.085-.206-.182-.327-.252l-.002-.001-.002-.002-35.648-20.524a2.971 2.971 0 00-2.964 0l-35.647 20.522-.002.002-.002.001c-.121.07-.219.167-.327.252-.096.075-.205.138-.29.223-.103.103-.178.228-.265.345-.066.089-.147.169-.203.265-.083.144-.133.304-.191.46-.031.085-.08.162-.104.25-.067.249-.103.51-.103.776v38.979l-29.706 17.103V24.493a3 3 0 00-.103-.776c-.024-.088-.073-.165-.104-.25-.058-.157-.108-.316-.191-.46-.056-.097-.137-.176-.203-.265-.087-.117-.161-.242-.265-.345-.085-.086-.194-.148-.29-.223-.109-.085-.206-.182-.327-.252l-.002-.001-.002-.002L40.098 1.396a2.971 2.971 0 00-2.964 0L1.487 21.919l-.002.002-.002.001c-.121.07-.219.167-.327.252-.096.075-.205.138-.29.223-.103.103-.178.228-.265.345-.066.089-.147.169-.203.265-.083.144-.133.304-.191.46-.031.085-.08.162-.104.25-.067.249-.103.51-.103.776v122.09c0 1.063.568 2.044 1.489 2.575l71.293 41.045c.156.089.324.143.49.202.078.028.15.074.23.095a2.98 2.98 0 001.524 0c.069-.018.132-.059.2-.083.176-.061.354-.119.519-.214l71.293-41.045a2.971 2.971 0 001.489-2.575v-38.979l34.158-19.666a2.971 2.971 0 001.489-2.575V44.666a3.075 3.075 0 00-.106-.774zM74.255 143.167l-29.648-16.779 31.136-17.926.001-.001 34.164-19.669 29.674 17.084-21.772 12.428-43.555 24.863zm68.329-76.259v33.841l-12.475-7.182-17.231-9.92V49.806l12.475 7.182 17.231 9.92zm2.97-39.335l29.693 17.095-29.693 17.095-29.693-17.095 29.693-17.095zM54.06 114.089l-12.475 7.182V46.733l17.231-9.92 12.475-7.182v74.537l-17.231 9.921zM38.614 7.398l29.693 17.095-29.693 17.095L8.921 24.493 38.614 7.398zM5.938 29.632l12.475 7.182 17.231 9.92v79.676l.001.005-.001.006c0 .114.032.221.045.333.017.146.021.294.059.434l.002.007c.032.117.094.222.14.334.051.124.088.255.156.371a.036.036 0 00.004.009c.061.105.149.191.222.288.081.105.149.22.244.314l.008.01c.084.083.19.142.284.215.106.083.202.178.32.247l.013.005.011.008 34.139 19.321v34.175L5.939 144.867V29.632h-.001zm136.646 115.235l-65.352 37.625V148.31l48.399-27.628 16.953-9.677v33.862zm35.646-61.22l-29.706 17.102V66.908l17.231-9.92 12.475-7.182v33.841z"/>
</g>
</svg>
</div>

<div class="mt-8 bg-white dark:bg-gray-800 overflow-hidden shadow sm:rounded-lg">
<div class="grid grid-cols-1 md:grid-cols-2">
<div class="p-6">
<div class="flex items-center">
<svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="w-8 h-8 text-gray-500"><path d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"></path></svg>
<div class="ml-4 text-lg leading-7 font-semibold"><a href="https://laravel.com/docs" class="underline text-gray-900 dark:text-white">Documentation</a></div>
@extends('auth.layouts.app')

@section('content')
<div class="row justify-content-center">

<div class="col-xl-10 col-lg-12 col-md-9">

<div class="card o-hidden border-0 shadow-lg my-5">
<div class="card-body p-0">
<!-- Nested Row within Card Body -->
<div class="row">
<div class="col-lg-6 d-none d-lg-block bg-login-image" ></div>
<div class="col-lg-6">
<div class="p-5">
<div class="text-center">
<h1 class="h4 text-gray-900 mb-4">Hello, Selamat Datang. Silahkan Login</h1>
</div>

<div class="ml-12">
<div class="mt-2 text-gray-600 dark:text-gray-400 text-sm">
Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end.
</div>
</div>
</div>

<div class="p-6 border-t border-gray-200 dark:border-gray-700 md:border-t-0 md:border-l">
<div class="flex items-center">
<svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="w-8 h-8 text-gray-500"><path d="M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"></path><path d="M15 13a3 3 0 11-6 0 3 3 0 016 0z"></path></svg>
<div class="ml-4 text-lg leading-7 font-semibold"><a href="https://laracasts.com" class="underline text-gray-900 dark:text-white">Laracasts</a></div>
</div>

<div class="ml-12">
<div class="mt-2 text-gray-600 dark:text-gray-400 text-sm">
Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process.
<form method="POST" action="{{ route('login') }}">
@csrf
<div class="form-group">
<input id="email" type="email" class="form-control form-control-user @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus placeholder="Enter Email Address.">

@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
</div>

<div class="p-6 border-t border-gray-200 dark:border-gray-700">
<div class="flex items-center">
<svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="w-8 h-8 text-gray-500"><path d="M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z"></path></svg>
<div class="ml-4 text-lg leading-7 font-semibold"><a href="https://laravel-news.com/" class="underline text-gray-900 dark:text-white">Laravel News</a></div>
</div>

<div class="ml-12">
<div class="mt-2 text-gray-600 dark:text-gray-400 text-sm">
Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials.
<div class="form-group">
<input id="password" type="password" class="form-control form-control-user @error('password') is-invalid @enderror" name="password" required autocomplete="current-password" placeholder="Password">

@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
</div>

<div class="p-6 border-t border-gray-200 dark:border-gray-700 md:border-l">
<div class="flex items-center">
<svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="w-8 h-8 text-gray-500"><path d="M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path></svg>
<div class="ml-4 text-lg leading-7 font-semibold text-gray-900 dark:text-white">Vibrant Ecosystem</div>
</div>
<div class="form-group">
<div class="custom-control custom-checkbox small">
<input class="custom-control-input" type="checkbox" name="remember" id="customCheck" {{ old('remember') ? 'checked' : '' }}>

<div class="ml-12">
<div class="mt-2 text-gray-600 dark:text-gray-400 text-sm">
Laravel's robust library of first-party tools and libraries, such as <a href="https://forge.laravel.com" class="underline">Forge</a>, <a href="https://vapor.laravel.com" class="underline">Vapor</a>, <a href="https://nova.laravel.com" class="underline">Nova</a>, and <a href="https://envoyer.io" class="underline">Envoyer</a> help you take your projects to the next level. Pair them with powerful open source libraries like <a href="https://laravel.com/docs/billing" class="underline">Cashier</a>, <a href="https://laravel.com/docs/dusk" class="underline">Dusk</a>, <a href="https://laravel.com/docs/broadcasting" class="underline">Echo</a>, <a href="https://laravel.com/docs/horizon" class="underline">Horizon</a>, <a href="https://laravel.com/docs/sanctum" class="underline">Sanctum</a>, <a href="https://laravel.com/docs/telescope" class="underline">Telescope</a>, and more.
<label class="custom-control-label" for="customCheck">Remember
Me</label>
</div>
</div>
</div>
</div>
</div>
</div>

<div class="flex justify-center mt-4 sm:items-center sm:justify-between">
<div class="text-center text-sm text-gray-500 sm:text-left">
<div class="flex items-center">
<svg fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" stroke="currentColor" class="-mt-px w-5 h-5 text-gray-400">
<path d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"></path>
</svg>
<button class="btn btn-primary btn-user btn-block">
Login
</button>

<a href="https://laravel.bigcartel.com" class="ml-1 underline">
Shop
</a>
<div class="text-center">
<a class="small" href="{{route('password.request')}}">Lupa Password?</a>
</div>

<svg fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" viewBox="0 0 24 24" class="ml-4 -mt-px w-5 h-5 text-gray-400">
<path d="M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z"></path>
</svg>
<div class="text-center">
<a class="small" href="{{('register')}}">Buat akun Baru Klik disini</a>
</div>

<a href="https://github.com/sponsors/taylorotwell" class="ml-1 underline">
Sponsor
</a>
<div class="text-center">
<p>===================================</p>
</div>
<div class="text-center">
<p class="font-weight-bold"> Atau Membuat Akun Lewat Authentikasi Social Media </p>
</div>
<div class="form-group row">
<a href="/auth/google" class="btn btn-danger btn-user btn-block">Login Dengan Google</a>
<a href="/auth/facebook" class="btn btn-primary btn-user btn-block">Login Dengan Facebook</a>
<a href="/auth/github" class="btn btn-dark btn-user btn-block">Login Dengan Github</a>
</div>
</form>
<hr>
</div>
</div>

<div class="ml-4 text-center text-sm text-gray-500 sm:text-right sm:ml-0">
Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})
</div>
</div>
</div>
</div>
</body>
</html>

</div>

</div>
@endsection

+ 19
- 1
Aplikasi-Mikrotik/routes/web.php View File

@@ -1,5 +1,7 @@
<?php

use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\RouterController;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;

@@ -18,6 +20,22 @@ Route::get('/', function () {
return view('welcome');
});

Auth::routes();


// Untuk Route Utama
Auth::routes();
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');

// untuk Route Login Register Route
Route::post('/user/register', [App\Http\Controllers\Auth\RegisterController::class, 'userRegister'])->name('user.register');
Route::get('/hotspot/users',[RouterController::class, 'hotspotUsers']);


// Untuk Route Koneksi Wifi
Route::get('/subcription', [RouterController::class, 'subscription'])->name('user.subscription')->middleware('auth');
Route::get('/connecttoWifi', [RouterController::class, 'connecttoWifi']);


// Untuk Route Authentikasi Socialite
Route::get('/auth/{provider}',[LoginController::class,'redirectToProvider']);
Route::get('/auth/{provider}/callback', [LoginController::class,'handleProvideCallback']);

Loading…
Cancel
Save