Hack --plugins=path
[src/app-framework-binder.git] / src / config.c
index 893b3a5..815d11f 100644 (file)
 
 */
 
-
 #include "../include/local-def.h"
 #include <stdarg.h>
 #include <sys/stat.h>
 #include <sys/types.h>
 
-
 #define AFB_CONFIG_JTYPE "AFB_config"
 
 PUBLIC  char *ERROR_LABEL[]=ERROR_LABEL_DEF;
 
 PUBLIC int verbose;
-STATIC AFB_ErrorT  AFB_Error [AFB_SUCCESS+1];
-STATIC json_object *AFBJsonType;
+STATIC AFB_errorT   AFBerr [AFB_SUCCESS+1];
+STATIC json_object *jTypeStatic;
 
 /* ------------------------------------------------------------------------------
  * Get localtime and return in a string
@@ -56,23 +54,34 @@ PUBLIC char * configTime (void) {
 }
 
 // load config from disk and merge with CLI option
-PUBLIC AFB_ERROR configLoadFile (AFB_session * session, AFB_config *cliconfig) {
+PUBLIC AFB_error configLoadFile (AFB_session * session, AFB_config *cliconfig) {
    static char cacheTimeout [10];
    int fd;
    json_object * AFBConfig, *value;
    
-   // fix config redirect message
-   session->config->html5.msg = "Angular/HTML5 redirect";
-   session->config->html5.len = strlen(session->config->html5.msg);
-
+   // TBD integrate alias-dir array with config-file
+   session->config->aliasdir = cliconfig->aliasdir;
+   
    // default HTTP port
    if (cliconfig->httpdPort == 0) session->config->httpdPort=1234;
    else session->config->httpdPort=cliconfig->httpdPort;
+   
+   // default Plugin API timeout
+   if (cliconfig->apiTimeout == 0) session->config->apiTimeout=DEFLT_API_TIMEOUT;
+   else session->config->apiTimeout=cliconfig->apiTimeout;
+   
+   // default AUTH_TOKEN
+   if (cliconfig->token == NULL) session->config->token= DEFLT_AUTH_TOKEN;
+   else session->config->token=cliconfig->token;
 
    // cache timeout default one hour
-   if (cliconfig->cacheTimeout == 0) session->config->cacheTimeout=3600;
+   if (cliconfig->cacheTimeout == 0) session->config->cacheTimeout=DEFLT_CACHE_TIMEOUT;
    else session->config->cacheTimeout=cliconfig->cacheTimeout;
 
+   // cache timeout default one hour
+   if (cliconfig->cntxTimeout == 0) session->config->cntxTimeout=DEFLT_CNTX_TIMEOUT;
+   else session->config->cntxTimeout=cliconfig->cntxTimeout;
+
    if (cliconfig->rootdir == NULL) {
        session->config->rootdir = getenv("AFBDIR");
        if (session->config->rootdir == NULL) {
@@ -88,19 +97,28 @@ PUBLIC AFB_ERROR configLoadFile (AFB_session * session, AFB_config *cliconfig) {
    
    // if no Angular/HTML5 rootbase let's try '/' as default
    if  (cliconfig->rootbase == NULL) {
-       session->config->rootbase = "/";
+       session->config->rootbase = "/opa";
    } else {
-       session->config->console= cliconfig->console;
+       session->config->rootbase= cliconfig->rootbase;
    }
    
-   // if no rootapi use '/api'
-   if  (cliconfig->rootbase == NULL) {
-       session->config->rootbase = "/api";
+   if  (cliconfig->rootapi == NULL) {
+       session->config->rootapi = "/api";
    } else {
-       session->config->console= cliconfig->console;
+       session->config->rootapi= cliconfig->rootapi;
    }
 
+   if  (cliconfig->smack == NULL) {
+       session->config->smack = "demo";
+   } else {
+       session->config->smack= cliconfig->smack;
+   }
 
+   if  (cliconfig->plugins == NULL) {
+       session->config->plugins = PLUGIN_INSTALL_DIR;
+   } else {
+       session->config->plugins= cliconfig->plugins;
+   }
 
    // if no session dir create a default path from rootdir
    if  (cliconfig->sessiondir == NULL) {
@@ -176,6 +194,10 @@ PUBLIC AFB_ERROR configLoadFile (AFB_session * session, AFB_config *cliconfig) {
       session->config->plugins =  strdup (json_object_get_string (value));
    }
 
+   if (!cliconfig->setuid && json_object_object_get_ex (AFBConfig, "setuid", &value)) {
+      session->config->setuid = strdup (json_object_get_string (value));
+   }
+   
    if (!cliconfig->sessiondir && json_object_object_get_ex (AFBConfig, "sessiondir", &value)) {
       session->config->sessiondir = strdup (json_object_get_string (value));
    }
@@ -188,9 +210,6 @@ PUBLIC AFB_ERROR configLoadFile (AFB_session * session, AFB_config *cliconfig) {
       session->config->httpdPort = json_object_get_int (value);
    }
    
-   if (!cliconfig->setuid && json_object_object_get_ex (AFBConfig, "setuid", &value)) {
-      session->config->setuid = json_object_get_int (value);
-   }
 
    if (!cliconfig->localhostOnly && json_object_object_get_ex (AFBConfig, "localhostonly", &value)) {
       session->config->localhostOnly = json_object_get_int (value);
@@ -199,11 +218,23 @@ PUBLIC AFB_ERROR configLoadFile (AFB_session * session, AFB_config *cliconfig) {
    if (!cliconfig->cacheTimeout && json_object_object_get_ex (AFBConfig, "cachetimeout", &value)) {
       session->config->cacheTimeout = json_object_get_int (value);
    }
-   // cacheTimeout is an interger but HTTPd wants it as a string
+   
+   if (!cliconfig->apiTimeout && json_object_object_get_ex (AFBConfig, "apitimeout", &value)) {
+      session->config->apiTimeout = json_object_get_int (value);
+   }
+   
+   if (!cliconfig->cntxTimeout && json_object_object_get_ex (AFBConfig, "cntxtimeout", &value)) {
+      session->config->cntxTimeout = json_object_get_int (value);
+   }
+   
+   // cacheTimeout is an integer but HTTPd wants it as a string
    snprintf (cacheTimeout, sizeof (cacheTimeout),"%d", session->config->cacheTimeout);
    session->cacheTimeout = cacheTimeout; // httpd uses cacheTimeout string version
+   
    json_object_put   (AFBConfig);    // decrease reference count to free the json object
 
+   
    return AFB_SUCCESS;
 }
 
@@ -228,10 +259,12 @@ PUBLIC void configStoreFile (AFB_session * session) {
    json_object_object_add (AFBConfig, "plugins"       , json_object_new_string (session->config->plugins));
    json_object_object_add (AFBConfig, "sessiondir"    , json_object_new_string (session->config->sessiondir));
    json_object_object_add (AFBConfig, "pidfile"       , json_object_new_string (session->config->pidfile));
+   json_object_object_add (AFBConfig, "setuid"        , json_object_new_string (session->config->setuid));
    json_object_object_add (AFBConfig, "httpdPort"     , json_object_new_int (session->config->httpdPort));
-   json_object_object_add (AFBConfig, "setuid"        , json_object_new_int (session->config->setuid));
    json_object_object_add (AFBConfig, "localhostonly" , json_object_new_int (session->config->localhostOnly));
    json_object_object_add (AFBConfig, "cachetimeout"  , json_object_new_int (session->config->cacheTimeout));
+   json_object_object_add (AFBConfig, "apitimeout"    , json_object_new_int (session->config->apiTimeout));
+   json_object_object_add (AFBConfig, "cntxtimeout"   , json_object_new_int (session->config->cntxTimeout));
 
    err = json_object_to_file (session->config->configfile, AFBConfig);
    json_object_put   (AFBConfig);    // decrease reference count to free the json object
@@ -258,18 +291,17 @@ PUBLIC AFB_session *configInit () {
   // stack config handle into session
   session->config = config;
 
-  AFBJsonType = json_object_new_string ("AFB_message");
+  jTypeStatic = json_object_new_string ("AFB_message");
 
   // initialise JSON constant messages and increase reference count to make them permanent
   verbosesav = verbose;
   verbose = 0;  // run initialisation in silent mode
 
 
-
   for (idx = 0; idx <= AFB_SUCCESS; idx++) {
-     AFB_Error[idx].level = idx;
-     AFB_Error[idx].label = ERROR_LABEL [idx];
-     AFB_Error[idx].json  = jsonNewMessage (idx, NULL);
+     AFBerr[idx].level = idx;
+     AFBerr[idx].label = ERROR_LABEL [idx];
+     AFBerr[idx].json  = jsonNewMessage (idx, NULL);
   }
   verbose = verbosesav;
   
@@ -278,9 +310,9 @@ PUBLIC AFB_session *configInit () {
 
 
 // get JSON object from error level and increase its reference count
-PUBLIC json_object *jsonNewStatus (AFB_ERROR level) {
+PUBLIC json_object *jsonNewStatus (AFB_error level) {
 
-  json_object *target =  AFB_Error[level].json;
+  json_object *target =  AFBerr[level].json;
   json_object_get (target);
 
   return (target);
@@ -288,12 +320,12 @@ PUBLIC json_object *jsonNewStatus (AFB_ERROR level) {
 
 // get AFB object type with adequate usage count
 PUBLIC json_object *jsonNewjtype (void) {
-  json_object_get (AFBJsonType); // increase reference count
-  return (AFBJsonType);
+  json_object_get (jTypeStatic); // increase reference count
+  return (jTypeStatic);
 }
 
 // build an ERROR message and return it as a valid json object
-PUBLIC  json_object *jsonNewMessage (AFB_ERROR level, char* format, ...) {
+PUBLIC  json_object *jsonNewMessage (AFB_error level, char* format, ...) {
    static int count = 0;
    json_object * AFBResponse;
    va_list args;
@@ -313,7 +345,7 @@ PUBLIC  json_object *jsonNewMessage (AFB_ERROR level, char* format, ...) {
         json_object_object_add (AFBResponse, "info"   , json_object_new_string (message));
    }
    if (verbose) {
-        fprintf (stderr, "AFB:%-6s [%3d]: ", AFB_Error [level].label, count++);
+        fprintf (stderr, "AFB:%-6s [%3d]: ", AFBerr [level].label, count++);
         if (format != NULL) {
             fprintf (stderr, "%s", message);
         } else {