From e37ef6dd473eaedcdf2814445ae12fb39786d585 Mon Sep 17 00:00:00 2001
From: Tom Needham
Date: Fri, 15 Jun 2012 23:14:40 +0000
Subject: Move user import to personal settings. Fix user migration between
servers.
---
apps/user_migrate/admin.php | 87 --------------------------------
apps/user_migrate/settings.php | 66 ++++++++++++++++++++++--
apps/user_migrate/templates/admin.php | 13 -----
apps/user_migrate/templates/settings.php | 13 +++++
lib/migrate.php | 40 +++++----------
5 files changed, 90 insertions(+), 129 deletions(-)
delete mode 100644 apps/user_migrate/admin.php
delete mode 100644 apps/user_migrate/templates/admin.php
diff --git a/apps/user_migrate/admin.php b/apps/user_migrate/admin.php
deleted file mode 100644
index df8bff01c8d..00000000000
--- a/apps/user_migrate/admin.php
+++ /dev/null
@@ -1,87 +0,0 @@
-.
- *
- */
-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();
-}
diff --git a/apps/user_migrate/settings.php b/apps/user_migrate/settings.php
index 8edd0353388..098927fa17d 100644
--- a/apps/user_migrate/settings.php
+++ b/apps/user_migrate/settings.php
@@ -23,7 +23,67 @@
*
*/
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
-$tmpl = new OCP\Template('user_migrate', 'settings');
-return $tmpl->fetchPage();
\ No newline at end of file
+ $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', '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();
+}
\ No newline at end of file
diff --git a/apps/user_migrate/templates/admin.php b/apps/user_migrate/templates/admin.php
deleted file mode 100644
index ff51f43ffde..00000000000
--- a/apps/user_migrate/templates/admin.php
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
diff --git a/apps/user_migrate/templates/settings.php b/apps/user_migrate/templates/settings.php
index 8f1fe41df01..1718abe9e0f 100644
--- a/apps/user_migrate/templates/settings.php
+++ b/apps/user_migrate/templates/settings.php
@@ -4,3 +4,16 @@
+
diff --git a/lib/migrate.php b/lib/migrate.php
index f9cab915d04..5939ba32e50 100644
--- a/lib/migrate.php
+++ b/lib/migrate.php
@@ -196,7 +196,7 @@ class OC_Migrate{
* @param optional $uid userid of new user
*/
public static function import( $path, $type='user', $uid=null ){
- OC_Util::checkAdminUser();
+
$datadir = OC_Config::getValue( 'datadirectory' );
// Extract the zip
if( !$extractpath = self::extractZip( $path ) ){
@@ -216,12 +216,19 @@ class OC_Migrate{
}
self::$exporttype = $type;
+ $currentuser = OC_User::getUser();
+
// Have we got a user if type is user
if( self::$exporttype == 'user' ){
- if( !$uid ){
- self::$uid = $json->exporteduser;
- } else {
- self::$uid = $uid;
+ self::$uid = !is_null($uid) ? $uid : $currentuser;
+ }
+
+ // 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 ){
case 'user':
// Check user availability
- if( OC_User::userExists( self::$uid ) ){
- OC_Log::write( 'migration', 'User already exists', 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 );
+ if( !OC_User::userExists( self::$uid ) ){
+ OC_Log::write( 'migration', 'User doesn\'t exist', OC_Log::ERROR );
return json_encode( array( 'success' => false ) );
}
// Copy data
--
cgit v1.2.3