$value) { if($key == 'name'){ $newKey = $value; } if($key == 'value'){ $newValue = $value; } if(isset($newKey) && isset($newValue)){ $$newKey = $newValue; } } } $location = cleanDirectory($location); $dbName = $dbName.'.db'; $configVersion = $GLOBALS['installedVersion']; $configArray = array( 'dbName' => $dbName, 'dbLocation' => $location, 'license' => $license, 'organizrHash' => $hashKey, 'organizrAPI' => $api, 'registrationPassword' => $registrationPassword, ); // Create Config if(createConfig($configArray)){ // Call DB Create if(createDB($location,$dbName)){ // Add in first user if(createFirstAdmin($location,$dbName,$username,$password,$email)){ if(createToken($username,$email,gravatar($email),'Admin',0,$hashKey,1)){ return true; }else{ return 'token'; } }else{ return 'admin'; } }else{ return 'db'; } }else{ return 'config'; } return false; } function register($array){ // Grab username and password from login form foreach ($array['data'] as $items) { foreach ($items as $key => $value) { if($key == 'name'){ $newKey = $value; } if($key == 'value'){ $newValue = $value; } if(isset($newKey) && isset($newValue)){ $$newKey = $newValue; } } } if($registrationPassword == $GLOBALS['registrationPassword']){ $defaults = defaultUserGroup(); writeLog('success', 'Registration Function - Registration Password Verified', $username); if(createUser($username,$password,$defaults,$email)){ writeLog('success', 'Registration Function - A User has registered', $username); if(createToken($username,$email,gravatar($email),$defaults['group'],$defaults['group_id'],$GLOBALS['organizrHash'],1)){ writeLoginLog($username, 'success'); writeLog('success', 'Login Function - A User has logged in', $username); return true; } }else{ writeLog('error', 'Registration Function - An error occured', $username); return 'username taken'; } }else{ writeLog('warning', 'Registration Function - Wrong Password', $username); return 'mismatch'; } } function editUser($array){ return $array; } function logout(){ coookie('delete','organizrToken'); $GLOBALS['organizrUser'] = false; return true; } function qualifyRequest($accessLevelNeeded){ if(getUserLevel() <= $accessLevelNeeded){ return true; }else{ return false; } } function getUserLevel(){ $requesterToken = isset(getallheaders()['Token']) ? getallheaders()['Token'] : false; // Check token or API key // If API key, return 0 for admin if(strlen($requesterToken) == 20 && $requesterToken == $GLOBALS['organizrAPI']){ //DO API CHECK return 0; }elseif(isset($GLOBALS['organizrUser'])){ return $GLOBALS['organizrUser']['groupID']; } // All else fails? return guest id return 999; } function organizrStatus(){ $status = array(); $dependenciesActive = array(); $dependenciesInactive = array(); $extensions = array("PDO_SQLITE", "PDO", "SQLITE3", "zip", "cURL", "openssl", "simplexml", "json", "session"); $functions = array("hash", "fopen", "fsockopen", "fwrite", "fclose", "readfile"); foreach($extensions as $check){ if(extension_loaded($check)){ array_push($dependenciesActive,$check); }else{ array_push($dependenciesInactive,$check); } } foreach($functions as $check){ if(function_exists($check)){ array_push($dependenciesActive,$check); }else{ array_push($dependenciesInactive,$check); } } if(!file_exists('config'.DIRECTORY_SEPARATOR.'config.php')){ $status['status'] = "wizard";//wizard - ok for test } if(count($dependenciesInactive)>0 || !is_writable(dirname(__DIR__,2))){ $status['status'] = "dependencies"; } $status['status'] = (!empty($status['status'])) ? $status['status'] : $status['status'] = "ok"; $status['writable'] = is_writable(dirname(__DIR__,2)) ? 'yes' : 'no'; $status['dependenciesActive'] = $dependenciesActive; $status['dependenciesInactive'] = $dependenciesInactive; $status['version'] = $GLOBALS['installedVersion']; $status['os'] = getOS(); $status['php'] = phpversion(); return $status; } function getSettingsMain(){ return array( 'Github' => array( array( 'type' => 'select', 'name' => 'branch', 'label' => 'Branch', 'value' => $GLOBALS['branch'], 'options' => getBranches() ), array( 'type' => 'button', 'label' => 'Force Install Branch', 'class' => 'updateNow', 'icon' => 'fa fa-paper-plane', 'text' => 'Retrieve' ) ), 'API' => array( array( 'type' => 'input', 'name' => 'organizrAPI', 'label' => 'Organizr API', 'value' => $GLOBALS['organizrAPI'] ), array( 'type' => 'button', 'label' => 'Generate New API Key', 'class' => 'newAPIKey', 'icon' => 'fa fa-paper-plane', 'text' => 'Generate' ) ), 'Authentication' => array( array( 'type' => 'select', 'name' => 'authType', 'id' => 'authSelect', 'label' => 'Authentication Type', 'value' => $GLOBALS['authType'], 'options' => getAuthTypes() ), array( 'type' => 'select', 'name' => 'authBackend', 'id' => 'authBackendSelect', 'label' => 'Authentication Backend', 'class' => 'backendAuth switchAuth', 'value' => $GLOBALS['authBackend'], 'options' => getAuthBackends() ), array( 'type' => 'input', 'name' => 'plexToken', 'class' => 'plexAuth switchAuth', 'label' => 'Plex Token', 'value' => $GLOBALS['plexToken'], 'placeholder' => 'Use Get Token Button' ), array( 'type' => 'button', 'label' => 'Get Plex Token', 'class' => 'popup-with-form getPlexTokenAuth plexAuth switchAuth', 'icon' => 'fa fa-paper-plane', 'text' => 'Retrieve', 'href' => '#auth-plex-token-form', 'attr' => 'data-effect="mfp-3d-unfold"' ), array( 'type' => 'input', 'name' => 'plexID', 'class' => 'plexAuth switchAuth', 'label' => 'Plex Machine', 'value' => $GLOBALS['plexID'], 'placeholder' => 'Use Get Plex Machine Button' ), array( 'type' => 'button', 'label' => 'Get Plex Machine', 'class' => 'popup-with-form getPlexMachineAuth plexAuth switchAuth', 'icon' => 'fa fa-paper-plane', 'text' => 'Retrieve', 'href' => '#auth-plex-machine-form', 'attr' => 'data-effect="mfp-3d-unfold"' ), array( 'type' => 'input', 'name' => 'authBackendHost', 'class' => 'ldapAuth ftpAuth switchAuth', 'label' => 'Host Address', 'value' => $GLOBALS['authBackendHost'], 'placeholder' => 'http{s) | ftp(s) | ldap(s)://hostname:port' ), array( 'type' => 'input', 'name' => 'authBaseDN', 'class' => 'ldapAuth switchAuth', 'label' => 'Host Base DN', 'value' => $GLOBALS['authBaseDN'], 'placeholder' => 'cn=%s,dc=sub,dc=domain,dc=com' ), array( 'type' => 'input', 'name' => 'embyURL', 'class' => 'embyAuth switchAuth', 'label' => 'Emby URL', 'value' => $GLOBALS['embyURL'], 'placeholder' => 'http(s)://hostname:port' ), array( 'type' => 'input', 'name' => 'embyToken', 'class' => 'embyAuth switchAuth', 'label' => 'Emby Token', 'value' => $GLOBALS['embyToken'], 'placeholder' => '' ) /*array( 'type' => 'button', 'label' => 'Send Test', 'class' => 'phpmSendTestEmail', 'icon' => 'fa fa-paper-plane', 'text' => 'Send' )*/ ) ); } function getSSO(){ return array( 'Plex' => array( array( 'type' => 'input', 'name' => 'plexToken', 'label' => 'Plex Token', 'value' => $GLOBALS['plexToken'], 'placeholder' => 'Use Get Token Button' ), array( 'type' => 'button', 'label' => 'Get Plex Token', 'class' => 'popup-with-form getPlexTokenSSO', 'icon' => 'fa fa-paper-plane', 'text' => 'Retrieve', 'href' => '#sso-plex-token-form', 'attr' => 'data-effect="mfp-3d-unfold"' ), array( 'type' => 'input', 'name' => 'plexID', 'label' => 'Plex Machine', 'value' => $GLOBALS['plexID'], 'placeholder' => 'Use Get Plex Machine Button' ), array( 'type' => 'button', 'label' => 'Get Plex Machine', 'class' => 'popup-with-form getPlexMachineSSO', 'icon' => 'fa fa-paper-plane', 'text' => 'Retrieve', 'href' => '#sso-plex-machine-form', 'attr' => 'data-effect="mfp-3d-unfold"' ), array( 'type' => 'html', 'label' => 'Plex Note', 'html' => 'Please make sure both Token and Machine are filled in' ), array( 'type' => 'switch', 'name' => 'ssoPlex', 'label' => 'Enable', 'value' => $GLOBALS['ssoPlex'] ) ), 'Ombi' => array( array( 'type' => 'input', 'name' => 'ombiURL', 'label' => 'Ombi URL', 'value' => $GLOBALS['ombiURL'], 'placeholder' => 'http(s)://hostname:port' ), array( 'type' => 'switch', 'name' => 'ssoOmbi', 'label' => 'Enable', 'value' => $GLOBALS['ssoOmbi'] ) ), 'Tautulli' => array( array( 'type' => 'input', 'name' => 'tautulliURL', 'label' => 'Tautulli URL', 'value' => $GLOBALS['tautulliURL'], 'placeholder' => 'http(s)://hostname:port' ), array( 'type' => 'switch', 'name' => 'ssoTautulli', 'label' => 'Enable', 'value' => $GLOBALS['ssoTautulli'] ) ) ); } function loadAppearance(){ $appearance = array(); $appearance['logo'] = $GLOBALS['logo']; $appearance['title'] = $GLOBALS['title']; $appearance['useLogo'] = $GLOBALS['useLogo']; $appearance['headerColor'] = $GLOBALS['headerColor']; $appearance['loginWallpaper'] = $GLOBALS['loginWallpaper']; return $appearance; } function getCustomizeAppearance(){ if(file_exists(dirname(__DIR__,1).DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php')){ return array( 'Top Bar' => array( array( 'type' => 'input', 'name' => 'logo', 'label' => 'Logo', 'value' => $GLOBALS['logo'] ), array( 'type' => 'input', 'name' => 'title', 'label' => 'Title', 'value' => $GLOBALS['title'] ), array( 'type' => 'switch', 'name' => 'useLogo', 'label' => 'Use Logo instead of Title', 'value' => $GLOBALS['useLogo'] ) ), 'Login Page' => array( array( 'type' => 'input', 'name' => 'loginWallpaper', 'label' => 'Login Wallpaper', 'value' => $GLOBALS['loginWallpaper'] ) ), 'Colors & Themes' => array( array( 'type' => 'input', 'name' => 'headerColor', 'label' => 'Nav Bar Color', 'value' => $GLOBALS['headerColor'], 'class' => 'colorpicker', 'disabled' => true ), array( 'type' => 'input', 'name' => 'headerTextColor', 'label' => 'Nav Bar Text Color', 'value' => $GLOBALS['headerTextColor'], 'class' => 'colorpicker', 'disabled' => true ), array( 'type' => 'input', 'name' => 'sidebarColor', 'label' => 'Side Bar Color', 'value' => $GLOBALS['sidebarColor'], 'class' => 'colorpicker', 'disabled' => true ), array( 'type' => 'input', 'name' => 'sidebarTextColor', 'label' => 'Side Bar Text Color', 'value' => $GLOBALS['sidebarTextColor'], 'class' => 'colorpicker', 'disabled' => true ), array( 'type' => 'select', 'name' => 'theme', 'label' => 'Theme', 'class' => 'themeChanger', 'value' => $GLOBALS['theme'], 'options' => getThemes() ), array( 'type' => 'select', 'name' => 'style', 'label' => 'Style', 'class' => 'styleChanger', 'value' => $GLOBALS['style'], 'options' => array( array( 'name' => 'Light', 'value' => 'light' ), array( 'name' => 'Dark', 'value' => 'dark' ), array( 'name' => 'Horizontal', 'value' => 'horizontal' ) ) ) ) ); } } function editAppearance($array){ switch ($array['data']['value']) { case 'true': $array['data']['value'] = (bool) true; break; case 'false': $array['data']['value'] = (bool) false; break; default: $array['data']['value'] = $array['data']['value']; } //return gettype($array['data']['value']).' - '.$array['data']['value']; switch ($array['data']['action']) { case 'editCustomizeAppearance': $newItem = array( $array['data']['name'] => $array['data']['value'] ); return (updateConfig($newItem)) ? true : false; break; default: # code... break; } } function updateConfigItem($array){ switch ($array['data']['value']) { case 'true': $array['data']['value'] = (bool) true; break; case 'false': $array['data']['value'] = (bool) false; break; default: $array['data']['value'] = $array['data']['value']; } // Hash if($array['data']['type'] == 'password'){ $array['data']['value'] = encrypt($array['data']['value']); } //return gettype($array['data']['value']).' - '.$array['data']['value']; $newItem = array( $array['data']['name'] => $array['data']['value'] ); return (updateConfig($newItem)) ? true : false; } function getPlugins(){ if(file_exists(dirname(__DIR__,1).DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php')){ $pluginList = array(); foreach($GLOBALS['plugins'] as $plugin){ foreach ($plugin as $key => $value) { $plugin[$key]['enabled'] = $GLOBALS[$value['configPrefix'].'-enabled']; } $pluginList = array_merge($pluginList, $plugin); } return $pluginList; } return false; } function editPlugins($array){ switch ($array['data']['action']) { case 'enable': $newItem = array( $array['data']['configName'] => true ); writeLog('success', 'Plugin Function - Enabled Plugin ['.$_POST['data']['name'].']', $GLOBALS['organizrUser']['username']); return (updateConfig($newItem)) ? true : false; break; case 'disable': $newItem = array( $array['data']['configName'] => false ); writeLog('success', 'Plugin Function - Disabled Plugin ['.$_POST['data']['name'].']', $GLOBALS['organizrUser']['username']); return (updateConfig($newItem)) ? true : false; break; default: # code... break; } } function auth(){ $debug = false; // CAREFUL WHEN SETTING TO TRUE AS THIS OPENS AUTH UP $ban = isset($_GET['ban']) ? strtoupper($_GET['ban']) : ""; $whitelist = isset($_GET['whitelist']) ? $_GET['whitelist'] : false; $blacklist = isset($_GET['blacklist']) ? $_GET['blacklist'] : false; $group = isset($_GET['group']) ? $_GET['group'] : 0; $currentIP = userIP(); $currentUser = $GLOBALS['organizrUser']['username']; if ($whitelist) { if(in_array($currentIP, arrayIP($whitelist))) { !$debug ? exit(http_response_code(200)) : die("$currentIP Whitelist Authorized"); } } if ($blacklist) { if(in_array($currentIP, arrayIP($blacklist))) { !$debug ? exit(http_response_code(401)) : die("$currentIP Blacklisted"); } } if($group !== null){ if(qualifyRequest($group)){ !$debug ? exit(http_response_code(200)) : die("$currentUser on $currentIP Authorized"); }else{ !$debug ? exit(http_response_code(401)) : die("$currentUser on $currentIP Not Authorized"); } }else{ !$debug ? exit(http_response_code(401)) : die("Not Authorized Due To No Parameters Set"); } } function logoOrText(){ if($GLOBALS['useLogo'] == false){ return '