Inhaltsverzeichnis

cloud4education

Version 4.5.1

wget http://apps.owncloud.com/CONTENT/content-files/151948-rescan_fs.zip => apps/
apps/rescan_fs/appinfo/app.php
OCP\App::addNavigationEntry( array( "id" => "rescan_fs", "order" => 100, "href" => OCP\Util::linkTo( "rescan_fs", "index.php" ), "icon" => OCP\Util::imagePath( "rescan_fs", "loader.gif" ), "name" => "Ordner neu einlesen" ));
apps/rescan_fs/templates/index.php
<!--[if IE 8]><style>input[type="checkbox"]{padding:0;}table td{position:static !important;}</style><![endif]-->
<div id="scanning-message">
        <h3>
                <?php echo $l->t('Ordner werden durchsucht, bitte warten.');?> <span id='scan-count'></span>
        </h3>
        <p>
                <?php echo $l->t('Durchsuche Ordner...');?> <span id='scan-current'></span>
        </p>
</div>
<div id="scanning-message-end">
        <h3>
                <?php echo $l->t('Scan abgeschlossen');?> <span id='scan-complete'></span>
        </h3>
</div>
lib/user.php
        public static function login( $uid, $password ) {
                $run = true;
                OC_Hook::emit( "OC_User", "pre_login", array( "run" => &$run, "uid" => $uid ));
 
                if( $run ) {
                        $uid = self::checkPassword( $uid, $password );
                        $enabled = self::isEnabled($uid);
                        if($uid && $enabled) {
                                session_regenerate_id(true);
                                self::setUserId($uid);
                                OC_Hook::emit( "OC_User", "post_login", array( "uid" => $uid, 'password'=>$password ));
                                $_SESSION['user_password']= $password;
                                return true;
                        }
                }
                return false;
        }
lib/util.php
/*** server4education ***/
 
        /**
        * Check if home folder is mounted, mount if not
        */
        public static function checkHomeMounted(){
                // Check if home folder is mounted
                if (!OC_Filesystem::is_dir('/Home')) {
                        OC_Filesystem::mkdir('/Home');
                        exec("sudo /usr/local/bin/mounthome ".OC_User::getUser()." ".$_SESSION['user_password']);
                }
 
                foreach(self::getS4eShares() as $share) {
                        if (!OC_Filesystem::is_dir('/'.$share)) {
                                OC_Filesystem::mkdir('/'.$share);
                                exec("sudo /usr/local/bin/mountshare ".OC_User::getUser()." ".$_SESSION['user_password']." ".$share);
                        }
                }
                exec("logger \"".OC_User::getUser()." - cloud4education ".`date +%s`."\"");
                $_SESSION['user_password'] = "";
        }
 
/*** server4education ***/
apps/files/index.php
// Check if we are a user
OCP\User::checkLoggedIn();
OC_Util::checkHomeMounted();
core/templates/layout.guest.php
<title>cloud4education</title>
...
<img src="<?php echo image_path('', 'logo.png'); ?>" alt="cloud4education" style="width: 22em" />
...
<footer><p class="info"><a href="http://www.cloud4education.at/">cloud4education</a> &ndash; <?php echo $l->t( 'eine freie Cloud-L&ouml;sung f&uuml;r Schulen' ); ?></p></footer>
core/templates/layout.user.php
<title><?php echo isset($_['application']) && !empty($_['application'])?$_['application'].' | ':'' ?>cloud4education <?php echo OC_User::getUser()?' ('.OC_User::getUser().') ':'' ?></title>

Version 4.0.1

files/index.php
// Check if we are a user
OC_Util::checkLoggedIn();
OC_Util::checkHomeMounted();
lib/user.php
        // server4education shares
        private static function getS4eShares() {
                $shares = array();
                $fp = @fopen("/srv/www/htdocs/".OC::$WEBROOT."/config/s4eshares.config", "r");
                while($line = fgets($fp, 1024)) {
                        $line = trim($line);
                        if($line != "")
                                $shares[] = $line;
                }
                fclose($fp);
                return $shares;
        }
 
 
 
        /**
         * @brief Kick the user
         * @returns true
         *
         * Logout, destroys session
         */
        public static function logout(){
                OC_Hook::emit( "OC_User", "logout", array());
                exec("sudo umount /srv/www/htdocs/".OC::$WEBROOT."/data/".OC_User::getUser()."/files/Home");
                foreach(self::getS4eShares() as $share) {
                        exec("sudo umount /srv/www/htdocs/".OC::$WEBROOT."/data/".OC_User::getUser()."/files/".$share);
                }
// BÖSE?                OC_Helper::rmdirr("/srv/www/htdocs/".OC::$WEBROOT."/data/".OC_User::getUser());
                OC_Helper::rmdirr("/srv/www/htdocs/".OC::$WEBROOT."/data/".OC_User::getUser());
                $_SESSION['user_id'] = false;
                OC_User::unsetMagicInCookie();
                return true;
        }
lib/util.php
        // server4education shares
        private static function getS4eShares() {
                $shares = array();
                $fp = @fopen("/srv/www/htdocs/".OC::$WEBROOT."/config/s4eshares.config", "r");
                while($line = fgets($fp, 1024)) {
                        $line = trim($line);
                        if($line != "")
                                $shares[] = $line;
                }
                fclose($fp);
                return $shares;
        }
 
 
 
 
        /**
        * Check if the user is logged in, redirects to home if not
        */
        public static function checkLoggedIn(){
                // Check if we are a user
                if( !OC_User::isLoggedIn()){
                        header( 'Location: '.OC_Helper::linkTo( '', 'index.php' , true));
                        exit();
                }
        }
 
/*** server4education ***/
 
        /**
        * Check if home folder is mounted, mount if not
        */
        public static function checkHomeMounted(){
                // Check if home folder is mounted
                if (!OC_Filesystem::is_dir('/Home')) {
                        OC_Filesystem::mkdir('/Home'); }
                        exec("sudo /usr/local/bin/mounthome ".OC_User::getUser()." ".$_SESSION['user_password']);
#exec("sudo mount | grep \"on /srv/www/htdocs/owncloud/data/".OC_User::getUser()."/files/Home type\"; if [ $? -eq 1 ] ; then sudo mount //localhost/".OC_User::getUser()." /srv/www/htdocs/".OC::$WEBROOT."/data/".OC_User::getUser()."/files/Home -o user=".OC_User::getUser().",pass=".$_SESSION['user_password'].",uid=wwwrun,gid=www; fi");

                foreach(self::getS4eShares() as $share) {
                        if (!OC_Filesystem::is_dir('/'.$share)) {
                                OC_Filesystem::mkdir('/'.$share);
                        }
                        exec("sudo /usr/local/bin/mountshare ".OC_User::getUser()." ".$_SESSION['user_password']." ".$share);
#                        exec("mount | grep \"on /srv/www/htdocs/".OC::$WEBROOT."/data/".OC_User::getUser()."/files/".$share." type\" > /dev/null; if [ $? -eq 1 ] ; then sudo mount //localhost/".$share." /srv/www/htdocs/".OC::$WEBROOT."/data/".OC_User::getUser()."/files/".$share." -o user=".OC_User::getUser().",pass=".$_SESSION['user_password'].",uid=wwwrun,gid=www; fi");
                }
                exec("logger \"".OC_User::getUser()." - cloud4education ".`date +%s`."\"");
        }
 
/*** server4education ***/
config/s4eshares.config
gemeinsam
material
abgabe
/usr/local/bin/cloud4education
#!/bin/bash
 
for username in $(mount | grep owncloud | grep Home | cut -d"/" -f4 | cut -d" " -f1); do
 START=$(grep "logger: $username" /var/log/messages | tail -1 | awk '{print $9}')
 DUR=$(echo "( ( $(date +%s) - $START ) / 60 )" | bc)
 if [ $DUR -gt 15 ]; then
  umount /srv/www/htdocs/owncloud/data/$username/files/Home
  for SHARE in `cat /srv/www/htdocs/owncloud/config/s4eshares.config`; do
    umount /srv/www/htdocs/owncloud/data/$username/files/$SHARE
  done
  rm /srv/www/htdocs/owncloud/data/$username
 fi
done
/usr/local/bin/mounthome
#!/bin/bash
 
mount | grep "on /srv/www/htdocs/owncloud/data/$1/files/Home type" > /dev/null
if [ $? -eq 1 ] ; then
        sudo mount "//localhost/$1" /srv/www/htdocs/owncloud/data/$1/files/Home -o user="$1",pass="$2",uid=wwwrun,gid=www
fi
/usr/local/bin/mountshare
#!/bin/bash
 
mount | grep "on /srv/www/htdocs/owncloud/data/$1/files/$3 type" > /dev/null
if [ $? -eq 1 ] ; then
        sudo mount "//localhost/$3" "/srv/www/htdocs/owncloud/data/$1/files/$3" -o user="$1",pass="$2",uid=wwwrun,gid=www
fi
crontab
# Umount lost cloud4education connections
*/15 * * * *  /usr/local/bin/cloud4education > /dev/null 2>&1
core/templates/layout.user.php
<title>cloud4education</title>
core/templates/layout.guest.php
<title>cloud4education</title>
...
<footer><p class="info"><a href="http://www.cloud4education.at/">cloud4education</a> &ndash; <?php echo $l->t( 'eine freie Cloud-L&ouml;sung f&uuml;r Schulen' ); ?></p></footer>
core/templates/css/styles.css
#body-login p.info { width:26em; text-align: center; margin:2em auto; color:#777; text-shadow:#fff 0 1px 0; }
/etc/sudoers
wwwrun ALL = NOPASSWD: /usr/local/bin/mounthome
wwwrun ALL = NOPASSWD: /usr/local/bin/mountshare
wwwrun ALL = NOPASSWD: /bin/umount
wwwrun ALL = NOPASSWD: /bin/mount
wwwrun ALL = NOPASSWD: /sbin/mount.cifs