bool CGUIPassword::CheckSettingLevelLock(const SettingLevel& level, bool enforce /*=false*/) { LOCK_LEVEL::SETTINGS_LOCK lockLevel = CProfilesManager::Get().GetCurrentProfile().settingsLockLevel(); if (lockLevel == LOCK_LEVEL::NONE) return true; //check if we are already in settings and in an level that needs unlocking int windowID = g_windowManager.GetActiveWindow(); if ((int)lockLevel-1 <= (short)CViewStateSettings::Get().GetSettingLevel() && (windowID == WINDOW_SETTINGS_MENU || (windowID >= WINDOW_SCREEN_CALIBRATION && windowID <= WINDOW_SETTINGS_MYPVR))) return true; //Already unlocked else if (lockLevel == LOCK_LEVEL::ALL) return IsMasterLockUnlocked(true); else if ((int)lockLevel-1 <= (short)level) { if (enforce) return IsMasterLockUnlocked(true); else if (!IsMasterLockUnlocked(false)) { //Current Setting level is higher than our permission... so lower the viewing level SettingLevel newLevel = (SettingLevel)(short)(lockLevel-2); CViewStateSettings::Get().SetSettingLevel(newLevel); } } return true; }
bool CGUIPassword::IsProfileLockUnlocked(int iProfile, bool& bCanceled, bool prompt) { if (g_passwordManager.bMasterUser) return true; int iProfileToCheck=iProfile; if (iProfile == -1) iProfileToCheck = CProfilesManager::Get().GetCurrentProfileIndex(); if (iProfileToCheck == 0) return IsMasterLockUnlocked(prompt,bCanceled); else { CProfile *profile = CProfilesManager::Get().GetProfile(iProfileToCheck); if (!profile) return false; if (!prompt) return (profile->getLockMode() == LOCK_MODE_EVERYONE); if (profile->getDate().empty() && (CProfilesManager::Get().GetMasterProfile().getLockMode() == LOCK_MODE_EVERYONE || profile->getLockMode() == LOCK_MODE_EVERYONE)) { // user hasn't set a password and this is the first time they've used this account // so prompt for password/settings if (CGUIDialogProfileSettings::ShowForProfile(iProfileToCheck, true)) return true; } else if (CProfilesManager::Get().GetMasterProfile().getLockMode() != LOCK_MODE_EVERYONE) return CheckLock(profile->getLockMode(),profile->getLockCode(),20095,bCanceled); } return true; }
bool CGUIPassword::CheckMenuLock(int iWindowID) { bool bCheckPW = false; int iSwitch = iWindowID; // check if a settings subcategory was called from other than settings window if (IsSettingsWindow(iWindowID)) { int iCWindowID = g_windowManager.GetActiveWindow(); if (iCWindowID != WINDOW_SETTINGS_MENU && !IsSettingsWindow(iCWindowID)) iSwitch = WINDOW_SETTINGS_MENU; } if (iWindowID == WINDOW_MUSIC_FILES) if (g_windowManager.GetActiveWindow() == WINDOW_MUSIC_NAV) iSwitch = WINDOW_HOME; if (iWindowID == WINDOW_MUSIC_NAV) if (g_windowManager.GetActiveWindow() == WINDOW_HOME) iSwitch = WINDOW_MUSIC_FILES; if (iWindowID == WINDOW_VIDEO_NAV) if (g_windowManager.GetActiveWindow() == WINDOW_HOME) iSwitch = WINDOW_VIDEO_FILES; if (iWindowID == WINDOW_VIDEO_FILES) if (g_windowManager.GetActiveWindow() == WINDOW_VIDEO_NAV) iSwitch = WINDOW_HOME; switch (iSwitch) { case WINDOW_SETTINGS_MENU: // Settings return CheckSettingLevelLock(CViewStateSettings::Get().GetSettingLevel()); break; case WINDOW_ADDON_BROWSER: // Addons bCheckPW = CProfilesManager::Get().GetCurrentProfile().addonmanagerLocked(); break; case WINDOW_FILES: // Files bCheckPW = CProfilesManager::Get().GetCurrentProfile().filesLocked(); break; case WINDOW_PROGRAMS: // Programs bCheckPW = CProfilesManager::Get().GetCurrentProfile().programsLocked(); break; case WINDOW_MUSIC_FILES: // Music bCheckPW = CProfilesManager::Get().GetCurrentProfile().musicLocked(); break; case WINDOW_VIDEO_FILES: // Video bCheckPW = CProfilesManager::Get().GetCurrentProfile().videoLocked(); break; case WINDOW_PICTURES: // Pictures bCheckPW = CProfilesManager::Get().GetCurrentProfile().picturesLocked(); break; case WINDOW_SETTINGS_PROFILES: bCheckPW = true; break; default: bCheckPW = false; break; } if (bCheckPW) return IsMasterLockUnlocked(true); //Now let's check the PW if we need! else return true; }
bool CGUIPassword::IsMasterLockUnlocked(bool bPromptUser) { bool bDummy; return IsMasterLockUnlocked(bPromptUser,bDummy); }
bool CGUIPassword::CheckMenuLock(int iWindowID) { bool bCheckPW = false; int iSwitch = iWindowID; // check if a settings subcategory was called from other than settings window if (iWindowID >= WINDOW_SCREEN_CALIBRATION && iWindowID <= WINDOW_SETTINGS_APPEARANCE) { int iCWindowID = g_windowManager.GetActiveWindow(); if (iCWindowID != WINDOW_SETTINGS_MENU && (iCWindowID < WINDOW_SCREEN_CALIBRATION || iCWindowID > WINDOW_SETTINGS_APPEARANCE)) iSwitch = WINDOW_SETTINGS_MENU; } if (iWindowID == WINDOW_MUSIC_FILES) if (g_windowManager.GetActiveWindow() == WINDOW_MUSIC_NAV) iSwitch = WINDOW_HOME; if (iWindowID == WINDOW_MUSIC_NAV) if (g_windowManager.GetActiveWindow() == WINDOW_HOME) iSwitch = WINDOW_MUSIC_FILES; if (iWindowID == WINDOW_VIDEO_NAV) if (g_windowManager.GetActiveWindow() == WINDOW_HOME) iSwitch = WINDOW_VIDEO_FILES; if (iWindowID == WINDOW_VIDEO_FILES) if (g_windowManager.GetActiveWindow() == WINDOW_VIDEO_NAV) iSwitch = WINDOW_HOME; CLog::Log(LOGDEBUG, "Checking if window ID %i is locked.", iSwitch); switch (iSwitch) { case WINDOW_SETTINGS_MENU: // Settings bCheckPW = g_settings.GetCurrentProfile().settingsLocked(); break; case WINDOW_ADDON_BROWSER: // Addons bCheckPW = g_settings.GetCurrentProfile().addonmanagerLocked(); break; case WINDOW_FILES: // Files bCheckPW = g_settings.GetCurrentProfile().filesLocked(); break; case WINDOW_PROGRAMS: // Programs bCheckPW = g_settings.GetCurrentProfile().programsLocked(); break; case WINDOW_MUSIC_FILES: // Music bCheckPW = g_settings.GetCurrentProfile().musicLocked(); break; case WINDOW_VIDEO_FILES: // Video bCheckPW = g_settings.GetCurrentProfile().videoLocked(); break; case WINDOW_PICTURES: // Pictures bCheckPW = g_settings.GetCurrentProfile().picturesLocked(); break; case WINDOW_SETTINGS_PROFILES: bCheckPW = true; break; default: bCheckPW = false; break; } if (bCheckPW) return IsMasterLockUnlocked(true); //Now let's check the PW if we need! else return true; }