Move user import to personal settings. Fix user migration between servers.
This commit is contained in:
parent
0074062b53
commit
c1744d2eb6
5 changed files with 90 additions and 129 deletions
|
@ -1,87 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ownCloud - user_migrate
|
|
||||||
*
|
|
||||||
* @author Tom Needham
|
|
||||||
* @copyright 2012 Tom Needham tom@owncloud.com
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
||||||
* License as published by the Free Software Foundation; either
|
|
||||||
* version 3 of the License, or any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public
|
|
||||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
OCP\User::checkAdminUser();
|
|
||||||
OCP\App::checkAppEnabled('user_migrate');
|
|
||||||
|
|
||||||
// Import?
|
|
||||||
if (isset($_POST['user_import'])) {
|
|
||||||
|
|
||||||
$root = OC::$SERVERROOT . "/";
|
|
||||||
$importname = "owncloud_import_" . date("y-m-d_H-i-s");
|
|
||||||
|
|
||||||
// Save data dir for later
|
|
||||||
$datadir = OCP\Config::getSystemValue( 'datadirectory' );
|
|
||||||
|
|
||||||
// Copy the uploaded file
|
|
||||||
$from = $_FILES['owncloud_import']['tmp_name'];
|
|
||||||
$to = get_temp_dir().'/'.$importname.'.zip';
|
|
||||||
if( !move_uploaded_file( $from, $to ) ){
|
|
||||||
$error = array('error'=>'Failed to move the uploaded file','hint'=>'Try checking the permissions of the '.get_temp_dir().' dir.');
|
|
||||||
OCP\Util::writeLog( 'user_migrate', "Failed to copy the uploaded file", OCP\Util::ERROR );
|
|
||||||
$tmpl = new OCP\Template('user_migrate', 'admin');
|
|
||||||
$tmpl->assign('error',$error);
|
|
||||||
return $tmpl->fetchPage();
|
|
||||||
}
|
|
||||||
$response = json_decode( OC_Migrate::import( $to, 'user' ) );
|
|
||||||
if( !$response->success ){
|
|
||||||
$error = array('error'=>'There was an error while importing the user!','hint'=>'Please check the logs for a more detailed explaination');
|
|
||||||
$tmpl = new OCP\Template('user_migrate', 'admin');
|
|
||||||
$tmpl->assign('error',$error);
|
|
||||||
return $tmpl->fetchPage();
|
|
||||||
} else {
|
|
||||||
// Check import status
|
|
||||||
foreach( $response->data as $app => $status ){
|
|
||||||
if( $status != 'true' ){
|
|
||||||
// It failed for some reason
|
|
||||||
if( $status == 'notsupported' ){
|
|
||||||
$notsupported[] = $app;
|
|
||||||
} else if( !$status ){
|
|
||||||
$failed[] = $app;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Any problems?
|
|
||||||
if( isset( $notsupported ) || isset( $failed ) ){
|
|
||||||
if( count( $failed ) > 0 ){
|
|
||||||
$error = array('error'=>'Some app data failed to import','hint'=>'App data for: '.implode(', ', $failed).' failed to import.');
|
|
||||||
$tmpl = new OCP\Template('user_migrate', 'admin');
|
|
||||||
$tmpl->assign('error',$error);
|
|
||||||
return $tmpl->fetchPage();
|
|
||||||
} else if( count( $notsupported ) > 0 ){
|
|
||||||
$error = array('error'=>'Some app data could not be imported, as the apps are not installed on this instance','hint'=>'App data for: '.implode(', ', $notsupported).' failed to import as they were not found. Please install the apps and try again');
|
|
||||||
$tmpl = new OCP\Template('user_migrate', 'admin');
|
|
||||||
$tmpl->assign('error',$error);
|
|
||||||
return $tmpl->fetchPage();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// Went swimmingly!
|
|
||||||
$tmpl = new OCP\Template('user_migrate', 'admin');
|
|
||||||
return $tmpl->fetchPage();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// fill template
|
|
||||||
$tmpl = new OCP\Template('user_migrate', 'admin');
|
|
||||||
return $tmpl->fetchPage();
|
|
||||||
}
|
|
|
@ -23,7 +23,67 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
OCP\App::checkAppEnabled('user_migrate');
|
OCP\App::checkAppEnabled('user_migrate');
|
||||||
|
if (isset($_POST['user_import'])) {
|
||||||
|
$root = OC::$SERVERROOT . "/";
|
||||||
|
$importname = "owncloud_import_" . date("y-m-d_H-i-s");
|
||||||
|
|
||||||
|
// Save data dir for later
|
||||||
|
$datadir = OCP\Config::getSystemValue( 'datadirectory' );
|
||||||
|
|
||||||
|
// Copy the uploaded file
|
||||||
|
$from = $_FILES['owncloud_import']['tmp_name'];
|
||||||
|
$to = get_temp_dir().'/'.$importname.'.zip';
|
||||||
|
if( !move_uploaded_file( $from, $to ) ){
|
||||||
|
|
||||||
// fill template
|
$error = array('error'=>'Failed to move the uploaded file','hint'=>'Try checking the permissions of the '.get_temp_dir().' dir.');
|
||||||
$tmpl = new OCP\Template('user_migrate', 'settings');
|
OCP\Util::writeLog( 'user_migrate', "Failed to copy the uploaded file", OCP\Util::ERROR );
|
||||||
return $tmpl->fetchPage();
|
$tmpl = new OCP\Template('user_migrate', 'settings');
|
||||||
|
$tmpl->assign('error',$error);
|
||||||
|
//return $tmpl->fetchPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$response = json_decode( OC_Migrate::import( $to, 'user' ) );
|
||||||
|
if( !$response->success ){
|
||||||
|
$error = array('error'=>'There was an error while importing the user!','hint'=>'Please check the logs for a more detailed explaination');
|
||||||
|
$tmpl = new OCP\Template('user_migrate', 'settings');
|
||||||
|
$tmpl->assign('error',$error);
|
||||||
|
//return $tmpl->fetchPage();
|
||||||
|
} else {
|
||||||
|
// Check import status
|
||||||
|
foreach( $response->data as $app => $status ){
|
||||||
|
if( $status != 'true' ){
|
||||||
|
// It failed for some reason
|
||||||
|
if( $status == 'notsupported' ){
|
||||||
|
$notsupported[] = $app;
|
||||||
|
} else if( !$status ){
|
||||||
|
$failed[] = $app;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Any problems?
|
||||||
|
if( isset( $notsupported ) || isset( $failed ) ){
|
||||||
|
if( count( $failed ) > 0 ){
|
||||||
|
$error = array('error'=>'Some app data failed to import','hint'=>'App data for: '.implode(', ', $failed).' failed to import.');
|
||||||
|
$tmpl = new OCP\Template('user_migrate', 'settings');
|
||||||
|
$tmpl->assign('error',$error);
|
||||||
|
//return $tmpl->fetchPage();
|
||||||
|
} else if( count( $notsupported ) > 0 ){
|
||||||
|
$error = array('error'=>'Some app data could not be imported, as the apps are not installed on this instance','hint'=>'App data for: '.implode(', ', $notsupported).' failed to import as they were not found. Please install the apps and try again');
|
||||||
|
$tmpl = new OCP\Template('user_migrate', 'settings');
|
||||||
|
$tmpl->assign('error',$error);
|
||||||
|
//return $tmpl->fetchPage();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Went swimmingly!
|
||||||
|
$tmpl = new OCP\Template('user_migrate', 'settings');
|
||||||
|
//return $tmpl->fetchPage();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// fill template
|
||||||
|
$tmpl = new OCP\Template('user_migrate', 'settings');
|
||||||
|
return $tmpl->fetchPage();
|
||||||
|
}
|
|
@ -1,13 +0,0 @@
|
||||||
<form id="import" action="#" method="post" enctype="multipart/form-data">
|
|
||||||
<fieldset class="personalblock">
|
|
||||||
<?php if(isset($_['error'])){ ?>
|
|
||||||
<h3><?php echo $_['error']['error']; ?></h3>
|
|
||||||
<p><?php echo $_['error']['hint']; ?></p>
|
|
||||||
<?php } ?>
|
|
||||||
<legend><strong><?php echo $l->t('Import user account');?></strong></legend>
|
|
||||||
</p>
|
|
||||||
<p><input type="file" id="owncloud_import" name="owncloud_import" style="width:180px;"><label for="owncloud_import"> <?php echo $l->t('ownCloud User Zip');?></label>
|
|
||||||
</p>
|
|
||||||
<input type="submit" name="user_import" value="<?php echo $l->t('Import'); ?>" />
|
|
||||||
</fieldset>
|
|
||||||
</form>
|
|
|
@ -4,3 +4,16 @@
|
||||||
</p>
|
</p>
|
||||||
<button id="exportbtn">Export<img style="display: none;" class="loading" src="<?php echo OCP\Util::linkTo('core', 'img/loading.gif'); ?>" /></button>
|
<button id="exportbtn">Export<img style="display: none;" class="loading" src="<?php echo OCP\Util::linkTo('core', 'img/loading.gif'); ?>" /></button>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
<form id="import" action="#" method="post" enctype="multipart/form-data">
|
||||||
|
<fieldset class="personalblock">
|
||||||
|
<?php if(isset($_['error'])){ ?>
|
||||||
|
<h3><?php echo $_['error']['error']; ?></h3>
|
||||||
|
<p><?php echo $_['error']['hint']; ?></p>
|
||||||
|
<?php } ?>
|
||||||
|
<legend><strong><?php echo $l->t('Import user account');?></strong></legend>
|
||||||
|
</p>
|
||||||
|
<p><input type="file" id="owncloud_import" name="owncloud_import" style="width:180px;"><label for="owncloud_import"> <?php echo $l->t('ownCloud User Zip');?></label>
|
||||||
|
</p>
|
||||||
|
<input type="submit" name="user_import" value="<?php echo $l->t('Import'); ?>" />
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
|
|
@ -196,7 +196,7 @@ class OC_Migrate{
|
||||||
* @param optional $uid userid of new user
|
* @param optional $uid userid of new user
|
||||||
*/
|
*/
|
||||||
public static function import( $path, $type='user', $uid=null ){
|
public static function import( $path, $type='user', $uid=null ){
|
||||||
OC_Util::checkAdminUser();
|
|
||||||
$datadir = OC_Config::getValue( 'datadirectory' );
|
$datadir = OC_Config::getValue( 'datadirectory' );
|
||||||
// Extract the zip
|
// Extract the zip
|
||||||
if( !$extractpath = self::extractZip( $path ) ){
|
if( !$extractpath = self::extractZip( $path ) ){
|
||||||
|
@ -216,12 +216,19 @@ class OC_Migrate{
|
||||||
}
|
}
|
||||||
self::$exporttype = $type;
|
self::$exporttype = $type;
|
||||||
|
|
||||||
|
$currentuser = OC_User::getUser();
|
||||||
|
|
||||||
// Have we got a user if type is user
|
// Have we got a user if type is user
|
||||||
if( self::$exporttype == 'user' ){
|
if( self::$exporttype == 'user' ){
|
||||||
if( !$uid ){
|
self::$uid = !is_null($uid) ? $uid : $currentuser;
|
||||||
self::$uid = $json->exporteduser;
|
}
|
||||||
} else {
|
|
||||||
self::$uid = $uid;
|
// We need to be an admin if we are not importing our own data
|
||||||
|
if(($type == 'user' && self::$uid != $currentuser) || $type != 'user' ){
|
||||||
|
if( !OC_Group::inGroup( OC_User::getUser(), 'admin' )){
|
||||||
|
// Naughty.
|
||||||
|
OC_Log::write( 'migration', 'Import not permitted.', OC_Log::ERROR );
|
||||||
|
return json_encode( array( 'success' => false ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -229,27 +236,8 @@ class OC_Migrate{
|
||||||
switch( self::$exporttype ){
|
switch( self::$exporttype ){
|
||||||
case 'user':
|
case 'user':
|
||||||
// Check user availability
|
// Check user availability
|
||||||
if( OC_User::userExists( self::$uid ) ){
|
if( !OC_User::userExists( self::$uid ) ){
|
||||||
OC_Log::write( 'migration', 'User already exists', OC_Log::ERROR );
|
OC_Log::write( 'migration', 'User doesn\'t exist', OC_Log::ERROR );
|
||||||
return json_encode( array( 'success' => false ) );
|
|
||||||
}
|
|
||||||
$run = true;
|
|
||||||
OC_Hook::emit( "OC_User", "pre_createUser", array( "run" => &$run, "uid" => self::$uid, "password" => $json->hash ));
|
|
||||||
if( !$run ){
|
|
||||||
// Something stopped the user creation
|
|
||||||
OC_Log::write( 'migration', 'User creation failed', OC_Log::ERROR );
|
|
||||||
return json_encode( array( 'success' => false ) );
|
|
||||||
}
|
|
||||||
// Create the user
|
|
||||||
if( !self::createUser( self::$uid, $json->hash ) ){
|
|
||||||
return json_encode( array( 'success' => false ) );
|
|
||||||
}
|
|
||||||
// Emit the post_createUser hook (password is already hashed, will cause problems
|
|
||||||
OC_Hook::emit( "OC_User", "post_createUser", array( "uid" => self::$uid, "password" => $json->hash ));
|
|
||||||
// Make the new users data dir
|
|
||||||
$path = $datadir . '/' . self::$uid;
|
|
||||||
if( !mkdir( $path, 0755, true ) ){
|
|
||||||
OC_Log::write( 'migration', 'Failed to create users data dir: '.$path, OC_Log::ERROR );
|
|
||||||
return json_encode( array( 'success' => false ) );
|
return json_encode( array( 'success' => false ) );
|
||||||
}
|
}
|
||||||
// Copy data
|
// Copy data
|
||||||
|
|
Loading…
Reference in a new issue