Allows or in mustache instanciation
authorJosé Bollo <jose.bollo@iot.bzh>
Tue, 21 Mar 2017 16:54:30 +0000 (17:54 +0100)
committerJosé Bollo <jose.bollo@iot.bzh>
Tue, 21 Mar 2017 16:54:30 +0000 (17:54 +0100)
This allows to simplify the configuration file
afm-unit.conf.

Restore the type application/vnd.agl.service

Change-Id: Iaadde2c2d96155cea6d1b8bee4d3c78e885cf44a
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
conf/afm-unit.conf
docs/config.xml.md
src/wgtpkg-mustach.c

index 82113ef..5fbba96 100644 (file)
@@ -137,14 +137,19 @@ Environment=AFM_APP_INSTALL_DIR={{:#metadata.install-dir}}
 {{/required-permission.urn:AGL:permission::public:hidden}}\
 
 ;---------------------------------------------------------------------------------
-;----                 text/html                                               ----
+;----   text/html  application/vnd.agl.native  application/vnd.agl.service    ----
 ;---------------------------------------------------------------------------------
-{{#content.type=text/html}}
+{{#content.type=text/html|application/vnd.agl.native|application/vnd.agl.service}}
 
+{{^content.type=application/vnd.agl.service}}
 X-AFM--http-port={{:#metadata.http-port}}
+{{/content.type=application/vnd.agl.service}}
+
 ExecStart=/usr/bin/afb-daemon \
-       --port={{:#metadata.http-port}} \
-       --random-token \
+       {{^content.type=application/vnd.agl.service}}\
+               --port={{:#metadata.http-port}} \
+               --random-token \
+       {{/content.type=application/vnd.agl.service}}\
        --rootdir={{:#metadata.install-dir}} \
        --workdir={{&#metadata.app-data-dir}}/{{id}} \
        {{#required-permission.urn:AGL:permission::public:no-htdocs}}\
@@ -192,9 +197,18 @@ ExecStart=/usr/bin/afb-daemon \
                        --dbus-server={{name}} \
                {{/value=dbus}}\
        {{/provided-api}}\
-       --exec /usr/bin/web-runtime http://localhost:@p/{{content.src}}?token=@t
+       {{#content.type=text/html}}\
+       --exec /usr/bin/web-runtime http://localhost:@p/{{content.src}}?token=@t \
+       {{/content.type=text/html}}\
+       {{#content.type=application/vnd.agl.native}}\
+       --exec {{:#metadata.install-dir}}/{{content.src}} @p @t \
+       {{/content.type=application/vnd.agl.native}}\
+       {{#content.type=application/vnd.agl.service}}\
+       --no-httpd \
+       {{/content.type=application/vnd.agl.service}}
+
+{{/content.type=text/html|application/vnd.agl.native|application/vnd.agl.service}}
 
-{{/content.type=text/html}}
 
 ;---------------------------------------------------------------------------------
 ;----                 application/x-executable                                ----
@@ -207,56 +221,6 @@ ExecStart={{:#metadata.install-dir}}/{{content.src}}
 
 {{/content.type=application/x-executable}}
 
-;---------------------------------------------------------------------------------
-;----                 application/vnd.agl.service                             ----
-;---------------------------------------------------------------------------------
-{{#content.type=application/vnd.agl.service}}
-
-ExecStart=/usr/bin/afb-daemon \
-       --rootdir={{:#metadata.install-dir}} \
-       --workdir={{&#metadata.install-dir}}/{{id}} \
-       {{#required-api}}\
-               {{#value=auto}}\
-                       --ws-client=unix:%t/apis/ws/{{name}} \
-               {{/value=auto}}\
-               {{#value=ws}}\
-                       --ws-client=unix:%t/apis/ws/{{name}} \
-               {{/value=ws}}\
-               {{#value=dbus}}\
-                       --dbus-client={{name}} \
-               {{/value=dbus}}\
-               {{#value=link}}\
-                       --binding=%t/apis/lib/{{name}} \
-               {{/value=link}}\
-               {{#value=cloud}}\
-                       --cloud-client={{name}} \
-               {{/value=cloud}}\
-               {{#value=local}}\
-                       --binding={{:#metadata.install-dir}}/{{name}} \
-               {{/value=local}}\
-       {{/required-api}}\
-       {{#provided-api}}\
-               {{#value=auto}}\
-                       {{^required-permission.urn:AGL:permission::partner:service:no-ws}}\
-                               --ws-server=sd:{{name}} \
-                       {{/required-permission.urn:AGL:permission::partner:service:no-ws}}\
-                       {{^required-permission.urn:AGL:permission::partner:service:no-dbus}}\
-                               --dbus-server={{name}} \
-                       {{/required-permission.urn:AGL:permission::partner:service:no-dbus}}\
-               {{/value=auto}}\
-               {{#value=ws}}\
-                       --ws-server=sd:{{name}} \
-               {{/value=ws}}\
-               {{#value=dbus}}\
-                       --dbus-server={{name}} \
-               {{/value=dbus}}\
-       {{/provided-api}}\
-       --no-httpd
-
-
-{{/content.type=application/vnd.agl.service}}
-
-
 ;---------------------------------------------------------------------------------
 ; auto start
 ;---------------------------------------------------------------------------------
@@ -277,40 +241,7 @@ WantedBy=default.target
 ;---------------------------------------------------------------------------------
 
 {{#provided-api}}
-{{#value=ws}}
-
-%begin systemd-unit
-
-# auto generated by wgtpkg-unit for {{id}} version {{version}} target {{:#target}} of {{idaver}}
-#
-%systemd-unit user
-%systemd-unit socket afm-socket-{{name}}
-
-[Socket]
-SmackLabel=*
-ListenStream=%t/bindings/{{name}}
-FileDescriptorName={{name}}
-
-{{#required-permission.urn:AGL:permission::public:hidden}}\
-Service=afm-service-{{idaver}}{{^#target=main}}@{{:#target}}{{/#target=main}}
-{{/required-permission.urn:AGL:permission::public:hidden}}\
-{{^required-permission.urn:AGL:permission::public:hidden}}\
-Service=afm-appli-{{idaver}}{{^#target=main}}@{{:#target}}{{/#target=main}}
-{{/required-permission.urn:AGL:permission::public:hidden}}\
-
-;---------------------------------------------------------------------------------
-{{#required-permission.urn:AGL:permission::system:run-by-default}}
-%nl
-[Install]
-WantedBy=default.target
-%systemd-unit wanted-by default.target
-{{/required-permission.urn:AGL:permission::system:run-by-default}}
-;---------------------------------------------------------------------------------
-
-%end systemd-unit
-
-{{/value=ws}}
-{{#value=auto}}
+{{#value=ws|auto}}
 
 %begin systemd-unit
 
@@ -342,7 +273,7 @@ WantedBy=default.target
 
 %end systemd-unit
 
-{{/value=auto}}
+{{/value=ws|auto}}
 {{/provided-api}}
 
 {{/targets}}
index 7939ebe..8894667 100644 (file)
@@ -371,13 +371,18 @@ Known types for the type of content are:
    HTML application,
    content.src designates the home page of the application
 
-- ***application/x-executable***:
-   Native application,
-   content.src designates the relative path of the binary
+- ***application/vnd.agl.native***
+   AGL compatible native,
+   content.src designates the relative path of the binary.
 
 - ***application/vnd.agl.service***:
    AGL service, content.src is not used.
 
+- ***application/x-executable***:
+   Native application,
+   content.src designates the relative path of the binary.
+   For such application, only security setup is made.
+
 Adding more types is easy, it just need to edit the configuration
 file ***afm-unit.conf***.
 
@@ -388,7 +393,6 @@ leveraging systemd. The transition to systemd let these types
 out at the moment.
 
 - ***application/vnd.agl.url***
-- ***application/vnd.agl.native***
 - ***text/vnd.qt.qml***, ***application/vnd.agl.qml***
 - ***application/vnd.agl.qml.hybrid***
 - ***application/vnd.agl.html.hybrid***
index cc79505..110f11b 100644 (file)
@@ -28,7 +28,9 @@
 
 #define MAX_DEPTH 256
 
-
+/*
+ * exploration state when instanciating mustache
+ */
 struct expl {
        struct json_object *root;
        int depth;
@@ -110,6 +112,31 @@ static char *first(char **name, int isptr)
        return r;
 }
 
+/*
+ * Returns the unescaped version of the first value
+ * and update 'val' to point the next value if any.
+ */
+static char *value(char **val)
+{
+       char *r, *read, *write, c;
+
+       c = *(read = *val);
+       if (!c)
+               r = NULL;
+       else {
+               r = write = read;
+               while (c && c != '|') {
+                       if (c == '\\' && (read[1] == '|' || read[1] == '\\'))
+                               c = *++read;
+                       *write++ = c;
+                       c = *++read;
+               }
+               *write = 0;
+               *val = read + !!c;
+       }
+       return r;
+}
+
 /*
  * Replace the last occurence of ':' followed by
  * any character not being '*' by ':*', the
@@ -179,7 +206,11 @@ static struct json_object *find(struct expl *e, const char *name)
                        /* check the value if requested */
                        if (v) {
                                i = v[0] == '!';
-                               if (i == !strcmp(&v[i], json_object_get_string(o)))
+                               v += i;
+                               do {
+                                       c = value(&v);
+                               } while (c && strcmp(c, json_object_get_string(o)));
+                               if (i != !c)
                                        o = NULL;
                        }
                        return o;