]> source.dussan.org Git - nextcloud-server.git/commitdiff
Move user import to personal settings. Fix user migration between servers.
authorTom Needham <needham.thomas@gmail.com>
Fri, 15 Jun 2012 23:14:40 +0000 (23:14 +0000)
committerTom Needham <needham.thomas@gmail.com>
Fri, 15 Jun 2012 23:17:31 +0000 (23:17 +0000)
apps/user_migrate/admin.php [deleted file]
apps/user_migrate/settings.php
apps/user_migrate/templates/admin.php [deleted file]
apps/user_migrate/templates/settings.php
lib/migrate.php

diff --git a/apps/user_migrate/admin.php b/apps/user_migrate/admin.php
deleted file mode 100644 (file)
index df8bff0..0000000
+++ /dev/null
@@ -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();
-}
index 8edd035338859f8dc3c45e3e8138e7ec3a2a229f..098927fa17d81e72287ca9957ab63c512721dd33 100644 (file)
  *
  */
 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 (file)
index ff51f43..0000000
+++ /dev/null
@@ -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>
index 8f1fe41df017e43db199b72da7075ead60243b7c..1718abe9e0f9d903d97b555a631435df345d37ee 100644 (file)
@@ -4,3 +4,16 @@
        </p>
        <button id="exportbtn">Export<img style="display: none;" class="loading" src="<?php echo OCP\Util::linkTo('core', 'img/loading.gif'); ?>" /></button>
 </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>
index f9cab915d04bd055648eceefce72fcaff126ecc9..5939ba32e50d76ba10827506059e381b5b090ef0 100644 (file)
@@ -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