Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Basic Multi-User Setup #217

Merged
merged 5 commits into from
May 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 8 additions & 6 deletions app/Http/Controllers/HomeController.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
use App\Http\Requests\Home\GetConfigRequest;

class HomeController extends Controller {

private $statisticsService;
private $goalService;

Expand All @@ -28,12 +28,14 @@ public function index() {
$selectedLanguage = Auth::user()->selected_language;
$userCount = User::count();
$userName = Auth::user()->name;
$isAdmin = Auth::user()->is_admin;
$theme = $_COOKIE['theme'] ?? 'light';

return view('home', [
'language' => $selectedLanguage,
'userCount' => $userCount,
'userName' => $userName,
'isAdmin' => $isAdmin,
'theme' => $theme
]);
}
Expand Down Expand Up @@ -62,7 +64,7 @@ public function getConfig($configPath, GetConfigRequest $request) {

public function getUserManualTree() {
$manualTree = [];

$path = public_path('./../manual/');
$files = scandir($path);

Expand Down Expand Up @@ -92,7 +94,7 @@ public function getUserManualTree() {
$subPageName = str_replace("\r\n", '', $subPageName);
$subPageName = str_replace("\n", '', $subPageName);
$subPageName = str_replace("\n", '', $subPageName);

$subPage = new \stdClass();
$subPage->id = $index;
$subPage->name = $subPageName;
Expand All @@ -102,10 +104,10 @@ public function getUserManualTree() {
$index ++;
}
}

fclose($handle);
}

if (count($subPages)) {
$page->children = $subPages;
}
Expand Down
15 changes: 9 additions & 6 deletions app/Http/Controllers/MediaPlayerController.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,16 @@ class MediaPlayerController extends Controller
// production
private $apiKey = '0000';
private $apiHost = 'http://jellyfin:8096';
private $enabled = false;

private $jellyfinLanguageCodes = [];

function __construct() {
$this->jellyfinLanguageCodes = config('linguacafe.languages.jellyfin_language_codes');

// retrieve api key and host from database
$setting = Setting::where('name', 'jellyfinEnabled')->first();
$this->enabled = json_decode($setting->value);
$setting = Setting::where('name', 'jellyfinApiKey')->first();
$this->apiKey = json_decode($setting->value);
$setting = Setting::where('name', 'jellyfinHost')->first();
Expand Down Expand Up @@ -56,7 +59,7 @@ private function makeJellyfinRequest ($method, $url) {
public function jellyfinRequest (Request $request) {
return $this->makeJellyfinRequest($request->method, $request->url);
}

/*
Returns a list of subtitles of the media currently being played
on the jellyfin server.
Expand Down Expand Up @@ -90,7 +93,7 @@ public function getJellyfinCurrentlyPlayedSubtitles () {
} else {
$session->movieName = $sessions[$sessionCounter]['NowPlayingItem']['Name'];
}

$session->runTimeTicks = $sessions[$sessionCounter]['NowPlayingItem']['RunTimeTicks'];
$session->nowPlayingItemId = $sessions[$sessionCounter]['NowPlayingItem']['Id'];
$session->sessionId = $sessions[$sessionCounter]['Id'];
Expand All @@ -109,14 +112,14 @@ public function getJellyfinCurrentlyPlayedSubtitles () {
}

$subtitleText = $this->makeJellyfinRequest('GET', '/Videos/' . $session->nowPlayingItemId . '/' . $session->mediaSourceId . '/Subtitles/ ' . $mediaSource['MediaStreams'][$subtitleCounter]['Index'] . '/0/Stream.js');

// add language for subtitles that Jellyfin did not recognise
if (!isset($mediaSource['MediaStreams'][$subtitleCounter]['Language'])) {
$mediaSource['MediaStreams'][$subtitleCounter]['Language'] = 'unrecognised by jellyfin: ' . $mediaSource['MediaStreams'][$subtitleCounter]['Title'];
}

// retrieve language. if not possible, use the jellyfin language code instead,
// so it can be viewed as an error message in the console and added to
// so it can be viewed as an error message in the console and added to
// jellyfinLanguageCodes.
if (array_key_exists($mediaSource['MediaStreams'][$subtitleCounter]['Language'], $this->jellyfinLanguageCodes)) {
$language = $this->jellyfinLanguageCodes[$mediaSource['MediaStreams'][$subtitleCounter]['Language']];
Expand All @@ -125,7 +128,7 @@ public function getJellyfinCurrentlyPlayedSubtitles () {
$language = $mediaSource['MediaStreams'][$subtitleCounter]['Language'];
$supportedLanguage = false;
}

$subtitle = new \stdClass();
$subtitle->language = $language;
$subtitle->supportedLanguage = $supportedLanguage;
Expand Down
8 changes: 4 additions & 4 deletions app/Http/Controllers/SettingsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public function getGlobalSettingsByName(GetGlobalSettingsByNameRequest $request)
} catch (\Exception $e) {
abort(500, $e->getMessage());
}

return response()->json($settings, 200);
}

Expand All @@ -44,7 +44,7 @@ public function updateGlobalSettings(UpdateGlobalSettingsRequest $request) {
} catch (\Exception $e) {
abort(500, $e->getMessage());
}

return response()->json('Settings have been updated successfully.', 200);
}

Expand All @@ -58,7 +58,7 @@ public function getUserSettingsByName(GetUserSettingsByNameRequest $request) {
} catch (\Exception $e) {
abort(500, $e->getMessage());
}

return response()->json($settings, 200);
}

Expand All @@ -72,7 +72,7 @@ public function updateUserSettings(UpdateUserSettingsRequest $request) {
} catch (\Exception $e) {
abort(500, $e->getMessage());
}

return response()->json('Settings have been updated successfully.', 200);
}
}
9 changes: 7 additions & 2 deletions app/Http/Controllers/UserController.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ public function __construct(UserService $userService) {

}

public function isAdmin() {
$isAdmin = Auth::user()->is_admin;
return response($isAdmin, 200);
}

public function isUserPasswordChanged() {
$passwordChanged = Auth::user()->password_changed;
return response($passwordChanged, 200);
Expand All @@ -40,13 +45,13 @@ public function getUsers() {
public function updatePassword(UpdatePasswordRequest $request) {
$user = Auth::user();
$password = $request->post('password');

try {
$this->userService->updatePassword($user, $password);
} catch(\Exception $e) {
abort(500, $e->getMessage());
}

return response()->json('Password has been updated successfully.', 200);
}

Expand Down
1 change: 1 addition & 0 deletions app/Http/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ class Kernel extends HttpKernel
* @var array
*/
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\AdminMiddleware::class,
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
Expand Down
26 changes: 26 additions & 0 deletions app/Http/Middleware/AdminMiddleware.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AdminMiddleware
{
/**
* 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 (!Auth::check() || !Auth::user()->is_admin) {
// If the user is not logged in or not an admin, redirect or handle as necessary
return response()->json(['error' => 'You do not have permission to access this resource.'], 403);
}
return $next($request);
}
}
8 changes: 8 additions & 0 deletions database/seeders/SettingsSeeder.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@ public function run()
}

// jellyfin api settings
$setting = Setting::where('name', 'jellyfinEnabled')->first();
if (!$setting) {
DB::table('settings')->insert([
'name' => 'jellyfinEnabled',
'value' => json_encode(false)
]);
}

$setting = Setting::where('name', 'jellyfinApiKey')->first();
if (!$setting) {
DB::table('settings')->insert([
Expand Down
Loading