Initial Commit

This commit is contained in:
dev 2021-07-15 23:35:54 -07:00
commit cc2af611e1
148 changed files with 54234 additions and 0 deletions

View file

@ -0,0 +1,18 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use chillerlan\QRCode\{QRCode, QROptions};
class AboutController extends Controller
{
public function index()
{
$data = [
'address' => config('app.xmr_tip_address'),
'qr' => (new QRCode)->render(config('app.xmr_tip_address')),
];
return view('about', ['data' => $data]);
}
}

View file

@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Models\Address;
use Illuminate\Http\Request;
class AddressController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\Address $address
* @return \Illuminate\Http\Response
*/
public function show(Address $address)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Address $address
* @return \Illuminate\Http\Response
*/
public function edit(Address $address)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Address $address
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Address $address)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Address $address
* @return \Illuminate\Http\Response
*/
public function destroy(Address $address)
{
//
}
}

View file

@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ConfirmsPasswords;
class ConfirmPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Confirm Password Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password confirmations and
| uses a simple trait to include the behavior. You're free to explore
| this trait and override any functions that require customization.
|
*/
use ConfirmsPasswords;
/**
* Where to redirect users when the intended url fails.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
}

View file

@ -0,0 +1,22 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
class ForgotPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
}

View file

@ -0,0 +1,40 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}

View file

@ -0,0 +1,76 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use App\Rules\ValidateAddress;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'name' => ['required', 'string', 'max:255'],
'address' => ['required', 'string', 'unique:users', new ValidateAddress],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\Models\User
*/
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'address' => $data['address'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
}

View file

@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\ResetsPasswords;
class ResetPasswordController extends Controller
{
/*
|--------------------------------------------------------------------------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset requests
| and uses a simple trait to include this behavior. You're free to
| explore this trait and override any methods you wish to tweak.
|
*/
use ResetsPasswords;
/**
* Where to redirect users after resetting their password.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
}

View file

@ -0,0 +1,42 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Foundation\Auth\VerifiesEmails;
class VerificationController extends Controller
{
/*
|--------------------------------------------------------------------------
| Email Verification Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling email verification for any
| user that recently registered with the application. Emails may also
| be re-sent if the user didn't receive the original email message.
|
*/
use VerifiesEmails;
/**
* Where to redirect users after verification.
*
* @var string
*/
protected $redirectTo = RouteServiceProvider::HOME;
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('signed')->only('verify');
$this->middleware('throttle:6,1')->only('verify', 'resend');
}
}

View file

@ -0,0 +1,13 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

View file

@ -0,0 +1,28 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class DashboardController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('dashboard');
}
}

View file

@ -0,0 +1,146 @@
<?php
namespace App\Http\Controllers;
use App\Models\Meme;
use App\Models\User;
use App\Models\Address;
use Illuminate\Http\Request;
use chillerlan\QRCode\{QRCode, QROptions};
class MemeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
// $this->middleware('auth');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$data = [
'seo' => [
'title' => null,
'desc' => null,
'img' => null,
],
'memes' => Meme::with(['user', 'tips'])->orderByDesc('created_at')->paginate(20),
];
return view('homepage', ['data' => $data]);
}
public function leaderboard()
{
$users = User::with('tips')->has('memes')->get();
$users = $users->sortByDesc(function($user) {
return $user->tips_total;
});
$data = [
'users' => $users,
];
return view('leaderboard', ['data' => $data]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('meme-create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$user = \Auth::user();
$used_ids = Meme::pluck('address_id')->toArray();
$address = Address::whereNotIn('id', $used_ids)->first('id');
return Meme::create([
'user_id' => $user->id,
'address_id' => $address->id,
'title' => $request->input('title'),
// 'caption' => $request->input('caption'),
'image' => $request->file('image'),
]);
}
/**
* Display the specified resource.
*
* @param \App\Models\Meme $meme
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$meme = Meme::where('id', $id)->with(['user', 'tips', 'address'])->firstOrFail();
$share = \Share::page(url()->current(), $meme->title, ['class' => 'fa-lg', 'target' => '_blank'])
->facebook()
->twitter()
->reddit()
->telegram()
->linkedin()
->whatsapp();
$data = [
'meme' => $meme,
'qr' => (new QRCode)->render($meme->address->address),
'share' => preg_replace("/<a(.*?)>/", "<a$1 target=\"_blank\">", $share),
];
return view('meme', ['data' => $data]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Meme $meme
* @return \Illuminate\Http\Response
*/
public function edit(Meme $meme)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Meme $meme
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Meme $meme)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Meme $meme
* @return \Illuminate\Http\Response
*/
public function destroy(Meme $meme)
{
//
}
}

View file

@ -0,0 +1,138 @@
<?php
namespace App\Http\Controllers;
use App\Models\Tip;
use App\Models\Address;
use App\Models\Meme;
use Illuminate\Http\Request;
use MoneroIntegrations\MoneroPhp\walletRPC;
class TipController extends Controller
{
public function check()
{
try {
$walletRPC = new walletRPC('127.0.0.1', config('app.xmr_network_port')); // Change to match your wallet (monero-wallet-rpc) IP address and port; 18083 is the customary port for mainnet, 28083 for testnet, 38083 for stagenet
$open_wallet = $walletRPC->open_wallet(config('app.xmr_wallet_name'), '');
$get_transfers = $walletRPC->get_transfers('all', true);
// dd($get_transfers);
// dd($walletRPC->get_balance());
foreach ($get_transfers['in'] as $transfer) {
$address = Address::where('address', $transfer['address'])->first();
$tip_exists = Tip::where('txid', $transfer['txid'])->first();
if ($address && !$tip_exists) {
$tip = new Tip();
$tip->address_id = $address->id;
$tip->amount = $transfer['amount'];
$tip->txid = $transfer['txid'];
$tip->height = $transfer['height'];
$tip->save();
}
}
$walletRPC->close_wallet();
} catch (\Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
}
public function payout()
{
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
try {
$walletRPC = new walletRPC('127.0.0.1', config('app.xmr_network_port')); // Change to match your wallet (monero-wallet-rpc) IP address and port; 18083 is the customary port for mainnet, 28083 for testnet, 38083 for stagenet
$open_wallet = $walletRPC->open_wallet(config('app.xmr_wallet_name'), '');
$tip = Tip::where('is_sent', 0)->firstOrFail();
$meme = Meme::where('address_id', $tip->address_id)->first();
if ($meme->user->address) {
$send_funds = $walletRPC->sweep_all($meme->user->address, $tip->address->address_index);
$tip->is_sent = 1;
$tip->save();
}
$walletRPC->close_wallet();
} catch (\Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\Tip $tip
* @return \Illuminate\Http\Response
*/
public function show(Tip $tip)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\Tip $tip
* @return \Illuminate\Http\Response
*/
public function edit(Tip $tip)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Tip $tip
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Tip $tip)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Tip $tip
* @return \Illuminate\Http\Response
*/
public function destroy(Tip $tip)
{
//
}
}

View file

@ -0,0 +1,17 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class UserController extends Controller
{
public function show($id)
{
$data = [
'user' => User::with('memes')->where('id', $id)->firstOrFail(),
];
return view('profile', ['data' => $data]);
}
}