]> git.mxchange.org Git - friendica.git/commitdiff
Solving the "Disallow public access to addons listed in the apps menu" has no effect bug
authorZered <zered.free@free.fr>
Wed, 24 Jul 2013 01:45:22 +0000 (03:45 +0200)
committerZered <zered.free@free.fr>
Wed, 24 Jul 2013 01:53:10 +0000 (03:53 +0200)
Adding plugin_is_app function in include/plugin.php for checking if a plugin is an app or not (checking the existence of an 'app_menu' hook)

Populating the app menu conditionaly ( is the user logged or not, are apps private ) and dissalowing apps running if apps are private and the user not logged

include/plugin.php
index.php

index b89cb2c53dc4cb0ef6089fc16972b4b0db5d587b..0f0ad9d964a8fab3e07b2c7bc7e969ab9b8a0180 100644 (file)
@@ -185,6 +185,21 @@ function call_hooks($name, &$data = null) {
        }
 }}
 
+//check if an app_menu hook exist for plugin $name.
+//Return true if the plugin is an app
+if(! function_exists('plugin_is_app')) {
+function plugin_is_app($name) {
+       $a = get_app();
+
+       if(is_array($a->hooks) && (array_key_exists('app_menu',$a->hooks))) {
+               foreach($a->hooks['app_menu'] as $hook) {
+                       if($hook[0] == 'addon/'.$name.'/'.$name.'.php')
+                               return true;
+               }
+       }
+       
+       return false;
+}}
 
 /*
  * parse plugin comment in search of plugin infos.
index d3a4cef44ebf5bfca9239583d7923858ce3109e8..6b6e873ea6b1987a20206b5bdcbabd2cdda9bccc 100644 (file)
--- a/index.php
+++ b/index.php
@@ -149,11 +149,16 @@ else {
 
 nav_set_selected('nothing');
 
-$arr = array('app_menu' => $a->apps);
+//Don't populate apps_menu if apps are private
+$privateapps = get_config('config','private_addons');
+if((local_user()) || (! $privateapps === "1"))
+{
+       $arr = array('app_menu' => $a->apps);
 
-call_hooks('app_menu', $arr);
+       call_hooks('app_menu', $arr);
 
-$a->apps = $arr['app_menu'];
+       $a->apps = $arr['app_menu'];
+}
 
 /**
  *
@@ -186,11 +191,19 @@ if(strlen($a->module)) {
        // Compatibility with the Android Diaspora client
        if ($a->module == "stream")
                $a->module = "network";
+       
+       $privateapps = get_config('config','private_addons');
 
        if(is_array($a->plugins) && in_array($a->module,$a->plugins) && file_exists("addon/{$a->module}/{$a->module}.php")) {
-               include_once("addon/{$a->module}/{$a->module}.php");
-               if(function_exists($a->module . '_module'))
-                       $a->module_loaded = true;
+               //Check if module is an app and if public access to apps is allowed or not
+               if((!local_user()) && plugin_is_app($a->module) && $privateapps === "1") {
+                       info( t("You must be logged in to use addons. "));
+               }
+               else {
+                       include_once("addon/{$a->module}/{$a->module}.php");
+                       if(function_exists($a->module . '_module'))
+                               $a->module_loaded = true;
+               }
        }
 
        /**