setting the timezone is now part of the login process and true part of the core.

This commit is contained in:
Thomas Müller 2012-12-20 11:10:45 +01:00
parent ecf82d2218
commit 7d811e57e6
4 changed files with 779 additions and 744 deletions

View File

@ -1,2 +0,0 @@
<?php
$_SESSION['timezone'] = $_GET['time'];

View File

@ -32,9 +32,7 @@ OCP\Util::addscript( 'files', 'files' );
OCP\Util::addscript('files', 'filelist');
OCP\Util::addscript('files', 'fileactions');
OCP\Util::addscript('files', 'keyboardshortcuts');
if(!isset($_SESSION['timezone'])) {
OCP\Util::addscript( 'files', 'timezone' );
}
OCP\App::setActiveNavigationEntry('files_index');
// Load the files
$dir = isset($_GET['dir']) ? stripslashes($_GET['dir']) : '';
@ -52,8 +50,7 @@ foreach( OC_Files::getdirectorycontent( $dir ) as $i ) {
$i['basename'] = $fileinfo['filename'];
if (!empty($fileinfo['extension'])) {
$i['extension'] = '.' . $fileinfo['extension'];
}
else {
} else {
$i['extension'] = '';
}
}

View File

@ -1,32 +1,50 @@
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}</style><![endif]-->
<form method="post">
<fieldset>
<?php if(!empty($_['redirect_url'])) { echo '<input type="hidden" name="redirect_url" value="'.$_['redirect_url'].'" />'; } ?>
<?php if (!empty($_['redirect_url'])) {
echo '<input type="hidden" name="redirect_url" value="' . $_['redirect_url'] . '" />';
} ?>
<ul>
<?php if (isset($_['invalidcookie']) && ($_['invalidcookie'])): ?>
<li class="errors">
<?php echo $l->t('Automatic logon rejected!'); ?><br>
<small><?php echo $l->t('If you did not change your password recently, your account may be compromised!'); ?></small><br>
<small><?php echo $l->t('If you did not change your password recently, your account may be compromised!'); ?></small>
<br>
<small><?php echo $l->t('Please change your password to secure your account again.'); ?></small>
</li>
<?php endif; ?>
<?php if (isset($_['invalidpassword']) && ($_['invalidpassword'])): ?>
<a href="<?php echo OC_Helper::linkToRoute('core_lostpassword_index') ?>"><li class="errors">
<a href="<?php echo OC_Helper::linkToRoute('core_lostpassword_index') ?>">
<li class="errors">
<?php echo $l->t('Lost your password?'); ?>
</li></a>
</li>
</a>
<?php endif; ?>
</ul>
<p class="infield grouptop">
<input type="text" name="user" id="user" value="<?php echo $_['username']; ?>"<?php echo $_['user_autofocus']?' autofocus':''; ?> autocomplete="on" required />
<input type="text" name="user" id="user"
value="<?php echo $_['username']; ?>"<?php echo $_['user_autofocus'] ? ' autofocus' : ''; ?>
autocomplete="on" required/>
<label for="user" class="infield"><?php echo $l->t('Username'); ?></label>
<img class="svg" src="<?php echo image_path('', 'actions/user.svg'); ?>" alt=""/>
</p>
<p class="infield groupbottom">
<input type="password" name="password" id="password" value="" required<?php echo $_['user_autofocus']?'':' autofocus'; ?> />
<input type="password" name="password" id="password" value=""
required<?php echo $_['user_autofocus'] ? '' : ' autofocus'; ?> />
<label for="password" class="infield"><?php echo $l->t('Password'); ?></label>
<img class="svg" src="<?php echo image_path('', 'actions/password.svg'); ?>" alt=""/>
</p>
<input type="checkbox" name="remember_login" value="1" id="remember_login" /><label for="remember_login"><?php echo $l->t('remember'); ?></label>
<input type="checkbox" name="remember_login" value="1" id="remember_login"/><label
for="remember_login"><?php echo $l->t('remember'); ?></label>
<input type="hidden" name="timezone-offset" id="timezone-offset"/>
<input type="submit" id="submit" class="login primary" value="<?php echo $l->t('Log in'); ?>"/>
</fieldset>
</form>
<script>
$(document).ready(function () {
var visitortimezone = (-new Date().getTimezoneOffset() / 60);
$('#timezone-offset').val(visitortimezone);
});
</script>

View File

@ -27,7 +27,8 @@ require_once 'public/constants.php';
* No, we can not put this class in its own file because it is used by
* OC_autoload!
*/
class OC{
class OC
{
/**
* Assoziative array for autoloading. classname => filename
*/
@ -73,10 +74,12 @@ class OC{
* OC router
*/
protected static $router = null;
/**
* SPL autoload
*/
public static function autoload($className) {
public static function autoload($className)
{
if (array_key_exists($className, OC::$CLASSPATH)) {
$path = OC::$CLASSPATH[$className];
/** @TODO: Remove this when necessary
@ -86,29 +89,21 @@ class OC{
OC_Log::write('core', 'include path for class "' . $className . '" starts with "apps/"', OC_Log::DEBUG);
$path = str_replace('apps/', '', $path);
}
}
elseif(strpos($className, 'OC_')===0) {
} elseif (strpos($className, 'OC_') === 0) {
$path = strtolower(str_replace('_', '/', substr($className, 3)) . '.php');
}
elseif(strpos($className, 'OC\\')===0) {
} elseif (strpos($className, 'OC\\') === 0) {
$path = strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
}
elseif(strpos($className, 'OCP\\')===0) {
} elseif (strpos($className, 'OCP\\') === 0) {
$path = 'public/' . strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
}
elseif(strpos($className, 'OCA\\')===0) {
} elseif (strpos($className, 'OCA\\') === 0) {
$path = 'apps/' . strtolower(str_replace('\\', '/', substr($className, 3)) . '.php');
}
elseif(strpos($className, 'Sabre_')===0) {
} elseif (strpos($className, 'Sabre_') === 0) {
$path = str_replace('_', '/', $className) . '.php';
}
elseif(strpos($className, 'Symfony\\Component\\Routing\\')===0) {
} elseif (strpos($className, 'Symfony\\Component\\Routing\\') === 0) {
$path = 'symfony/routing/' . str_replace('\\', '/', $className) . '.php';
}
elseif(strpos($className, 'Sabre\\VObject')===0) {
} elseif (strpos($className, 'Sabre\\VObject') === 0) {
$path = str_replace('\\', '/', $className) . '.php';
}
elseif(strpos($className, 'Test_')===0) {
} elseif (strpos($className, 'Test_') === 0) {
$path = 'tests/lib/' . strtolower(str_replace('_', '/', substr($className, 5)) . '.php');
} else {
return false;
@ -120,7 +115,8 @@ class OC{
return false;
}
public static function initPaths() {
public static function initPaths()
{
// calculate the root directories
OC::$SERVERROOT = str_replace("\\", '/', substr(__DIR__, 0, -4));
OC::$SUBURI = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen(OC::$SERVERROOT)));
@ -197,7 +193,8 @@ class OC{
);
}
public static function checkInstalled() {
public static function checkInstalled()
{
// Redirect to installer if not installed
if (!OC_Config::getValue('installed', false) && OC::$SUBURI != '/index.php') {
if (!OC::$CLI) {
@ -208,7 +205,8 @@ class OC{
}
}
public static function checkSSL() {
public static function checkSSL()
{
// redirect to https site if configured
if (OC_Config::getValue("forcessl", false)) {
header('Strict-Transport-Security: max-age=31536000');
@ -221,7 +219,8 @@ class OC{
}
}
public static function checkUpgrade() {
public static function checkUpgrade()
{
if (OC_Config::getValue('installed', false)) {
$installedVersion = OC_Config::getValue('version', '0.0.0');
$currentVersion = implode('.', OC_Util::getVersion());
@ -258,7 +257,8 @@ class OC{
}
}
public static function initTemplateEngine() {
public static function initTemplateEngine()
{
// Add the stuff we need always
OC_Util::addScript("jquery-1.7.2.min");
OC_Util::addScript("jquery-ui-1.8.16.custom.min");
@ -285,7 +285,8 @@ class OC{
OC_Util::addStyle("jquery-tipsy");
}
public static function initSession() {
public static function initSession()
{
// prevents javascript from accessing php session cookies
ini_set('session.cookie_httponly', '1;');
@ -315,7 +316,8 @@ class OC{
$_SESSION['LAST_ACTIVITY'] = time();
}
public static function getRouter() {
public static function getRouter()
{
if (!isset(OC::$router)) {
OC::$router = new OC_Router();
OC::$router->loadRoutes();
@ -324,7 +326,8 @@ class OC{
return OC::$router;
}
public static function init() {
public static function init()
{
// register autoloader
spl_autoload_register(array('OC', 'autoload'));
setlocale(LC_ALL, 'en_US.UTF-8');
@ -484,7 +487,8 @@ class OC{
/**
* register hooks for the cache
*/
public static function registerCacheHooks() {
public static function registerCacheHooks()
{
// register cache cleanup jobs
OC_BackgroundJob_RegularTask::register('OC_Cache_FileGlobal', 'gc');
OC_Hook::connect('OC_User', 'post_login', 'OC_Cache_File', 'loginListener');
@ -493,7 +497,8 @@ class OC{
/**
* register hooks for the filesystem
*/
public static function registerFilesystemHooks() {
public static function registerFilesystemHooks()
{
// Check for blacklisted files
OC_Hook::connect('OC_Filesystem', 'write', 'OC_Filesystem', 'isBlacklisted');
OC_Hook::connect('OC_Filesystem', 'rename', 'OC_Filesystem', 'isBlacklisted');
@ -502,7 +507,8 @@ class OC{
/**
* register hooks for sharing
*/
public static function registerShareHooks() {
public static function registerShareHooks()
{
OC_Hook::connect('OC_User', 'post_deleteUser', 'OCP\Share', 'post_deleteUser');
OC_Hook::connect('OC_User', 'post_addToGroup', 'OCP\Share', 'post_addToGroup');
OC_Hook::connect('OC_User', 'post_removeFromGroup', 'OCP\Share', 'post_removeFromGroup');
@ -512,7 +518,8 @@ class OC{
/**
* @brief Handle the request
*/
public static function handleRequest() {
public static function handleRequest()
{
if (!OC_Config::getValue('installed', false)) {
require_once 'core/setup.php';
exit();
@ -559,7 +566,8 @@ class OC{
}
$file_ext = substr($param['file'], -3);
if ($file_ext != 'php'
|| !self::loadAppScriptFile($param)) {
|| !self::loadAppScriptFile($param)
) {
header('HTTP/1.0 404 Not Found');
}
}
@ -569,7 +577,8 @@ class OC{
self::handleLogin();
}
public static function loadAppScriptFile($param) {
public static function loadAppScriptFile($param)
{
OC_App::loadApps();
$app = $param['app'];
$file = $param['file'];
@ -583,7 +592,8 @@ class OC{
return false;
}
public static function loadCSSFile($param) {
public static function loadCSSFile($param)
{
$app = $param['app'];
$file = $param['file'];
$app_path = OC_App::getAppPath($app);
@ -596,7 +606,8 @@ class OC{
}
}
protected static function handleLogin() {
protected static function handleLogin()
{
OC_App::loadApps(array('prelogin'));
$error = array();
// remember was checked after last login
@ -614,7 +625,8 @@ class OC{
OC_Util::displayLoginPage(array_unique($error));
}
protected static function cleanupLoginTokens($user) {
protected static function cleanupLoginTokens($user)
{
$cutoff = time() - OC_Config::getValue('remember_login_cookie_lifetime', 60 * 60 * 24 * 15);
$tokens = OC_Preferences::getKeys($user, 'login_token');
foreach ($tokens as $token) {
@ -625,11 +637,13 @@ class OC{
}
}
protected static function tryRememberLogin() {
protected static function tryRememberLogin()
{
if (!isset($_COOKIE["oc_remember_login"])
|| !isset($_COOKIE["oc_token"])
|| !isset($_COOKIE["oc_username"])
|| !$_COOKIE["oc_remember_login"]) {
|| !$_COOKIE["oc_remember_login"]
) {
return false;
}
OC_App::loadApps(array('authentication'));
@ -664,7 +678,8 @@ class OC{
return true;
}
protected static function tryFormLogin() {
protected static function tryFormLogin()
{
if (!isset($_POST["user"]) || !isset($_POST['password'])) {
return false;
}
@ -675,6 +690,11 @@ class OC{
OC_User::setupBackends();
if (OC_User::login($_POST["user"], $_POST["password"])) {
// setting up the time zone
if (isset($_POST['timezone-offset'])) {
$_SESSION['timezone'] = $_POST['timezone-offset'];
}
self::cleanupLoginTokens($_POST['user']);
if (!empty($_POST["remember_login"])) {
if (defined("DEBUG") && DEBUG) {
@ -683,8 +703,7 @@ class OC{
$token = OC_Util::generate_random_bytes(32);
OC_Preferences::setValue($_POST['user'], 'login_token', $token, time());
OC_User::setMagicInCookie($_POST["user"], $token);
}
else {
} else {
OC_User::unsetMagicInCookie();
}
OC_Util::redirectToDefaultPage();
@ -693,9 +712,11 @@ class OC{
return true;
}
protected static function tryBasicAuthLogin() {
protected static function tryBasicAuthLogin()
{
if (!isset($_SERVER["PHP_AUTH_USER"])
|| !isset($_SERVER["PHP_AUTH_PW"])) {
|| !isset($_SERVER["PHP_AUTH_PW"])
) {
return false;
}
OC_App::loadApps(array('authentication'));
@ -716,7 +737,8 @@ if( !isset( $RUNTIME_NOAPPS )) {
}
if (!function_exists('get_temp_dir')) {
function get_temp_dir() {
function get_temp_dir()
{
if ($temp = ini_get('upload_tmp_dir')) return $temp;
if ($temp = getenv('TMP')) return $temp;
if ($temp = getenv('TEMP')) return $temp;