From 60b924c954ac880f5d17ce91f733850c5b010e0f Mon Sep 17 00:00:00 2001
From: Robin Appelman <icewind@owncloud.com>
Date: Wed, 25 Apr 2012 00:08:45 +0200
Subject: [PATCH] initial mount configuration work

---
 lib/filesystem.php | 48 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/lib/filesystem.php b/lib/filesystem.php
index dc678fba74..1b91eabc7c 100644
--- a/lib/filesystem.php
+++ b/lib/filesystem.php
@@ -196,9 +196,57 @@ class OC_Filesystem{
 			return false;
 		}
 		self::$defaultInstance=new OC_FilesystemView($root);
+
+		//load custom mount config
+		if(is_file(OC::$SERVERROOT.'/config/mount.php')){
+			$mountConfig=include(OC::$SERVERROOT.'/config/mount.php');
+			if(isset($mountConfig['global'])){
+				foreach($mountConfig['global'] as $mountPoint=>$options){
+					self::mount($options['class'],$options['options'],$mountPoint);
+				}
+			}
+
+			if(isset($mountConfig['group'])){
+				foreach($mountConfig['group'] as $group=>$mounts){
+					if(OC_Group::inGroup(OC_User::getUser(),$group)){
+						foreach($mounts as $mountPoint=>$options){
+							$mountPoint=self::setUserVars($mountPoint);
+							foreach($options as &$option){
+								$option=self::setUserVars($option);
+							}
+							self::mount($options['class'],$options['options'],$mountPoint);
+						}
+					}
+				}
+			}
+
+			if(isset($mountConfig['user'])){
+				foreach($mountConfig['user'] as $user=>$mounts){
+					if($user==='all' or strtolower($user)===strtolower(OC_User::getUser())){
+						foreach($mounts as $mountPoint=>$options){
+							$mountPoint=self::setUserVars($mountPoint);
+							foreach($options as &$option){
+								$option=self::setUserVars($option);
+							}
+							self::mount($options['class'],$options['options'],$mountPoint);
+						}
+					}
+				}
+			}
+		}
+		
 		self::$loaded=true;
 	}
 
+	/**
+	 * fill in the correct values for $user, and $password placeholders
+	 * @param string intput
+	 * @return string
+	 */
+	private static function setUserVars($input){
+		return str_replace('$user',OC_User::getUser(),$input);
+	}
+
 	/**
 	 * get the default filesystem view
 	 * @return OC_FilesystemView
-- 
GitLab