diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 770c3d2..fe50b91 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -15,6 +15,7 @@ class AppServiceProvider extends ServiceProvider { public function boot() { + UriFactory::registerScheme('capacitor', Uri::class); UriFactory::registerScheme('chrome-extension', Uri::class); } diff --git a/app/Server/Http/Controllers/Admin/UpdateUsersController.php b/app/Server/Http/Controllers/Admin/UpdateUsersController.php new file mode 100644 index 0000000..0d83292 --- /dev/null +++ b/app/Server/Http/Controllers/Admin/UpdateUsersController.php @@ -0,0 +1,54 @@ +userRepository = $userRepository; + } + + public function handle(Request $request, ConnectionInterface $httpConnection) + { + $validator = Validator::make($request->all(), [ + 'name' => 'required', + ], [ + 'required' => 'The :attribute field is required.', + ]); + + if ($validator->fails()) { + $httpConnection->send(respond_json(['errors' => $validator->getMessageBag()], 401)); + $httpConnection->close(); + + return; + } + + $insertData = [ + 'name' => $request->get('name'), + 'auth_token' => $request->get('token', (string) Str::uuid()), + 'can_specify_subdomains' => (int) $request->get('can_specify_subdomains'), + 'can_specify_domains' => (int) $request->get('can_specify_domains'), + 'can_share_tcp_ports' => (int) $request->get('can_share_tcp_ports'), + 'max_connections' => (int) $request->get('max_connections'), + ]; + + $this->userRepository + ->storeUser($insertData) + ->then(function ($user) use ($httpConnection) { + $httpConnection->send(respond_json(['user' => $user], 200)); + $httpConnection->close(); + }); + } +} diff --git a/app/Server/Http/Controllers/TunnelMessageController.php b/app/Server/Http/Controllers/TunnelMessageController.php index df6bffc..f1ce487 100644 --- a/app/Server/Http/Controllers/TunnelMessageController.php +++ b/app/Server/Http/Controllers/TunnelMessageController.php @@ -70,14 +70,14 @@ class TunnelMessageController extends Controller protected function detectSubdomain(Request $request): ?string { - $subdomain = Str::before($request->getHost(), '.'); + $subdomain = Str::before($request->header('Host'), '.'); - return $subdomain === $request->getHost() ? null : $subdomain; + return $subdomain === $request->header('Host') ? null : $subdomain; } protected function detectServerHost(Request $request): ?string { - return Str::after($request->getHost(), '.'); + return Str::after($request->header('Host'), '.'); } protected function sendRequestToClient(Request $request, ControlConnection $controlConnection, ConnectionInterface $httpConnection) diff --git a/app/Server/UserRepository/DatabaseUserRepository.php b/app/Server/UserRepository/DatabaseUserRepository.php index 5b472bc..62ce315 100644 --- a/app/Server/UserRepository/DatabaseUserRepository.php +++ b/app/Server/UserRepository/DatabaseUserRepository.php @@ -168,7 +168,7 @@ class DatabaseUserRepository implements UserRepository { $deferred = new Deferred(); - $this->database->query('DELETE FROM users WHERE id = :id', ['id' => $id]) + $this->database->query('DELETE FROM users WHERE id = :id OR auth_token = :id', ['id' => $id]) ->then(function (Result $result) use ($deferred) { $deferred->resolve($result); });