{{/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}}\
--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 ----
{{/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
;---------------------------------------------------------------------------------
;---------------------------------------------------------------------------------
{{#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
%end systemd-unit
-{{/value=auto}}
+{{/value=ws|auto}}
{{/provided-api}}
{{/targets}}
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***.
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***
#define MAX_DEPTH 256
-
+/*
+ * exploration state when instanciating mustache
+ */
struct expl {
struct json_object *root;
int depth;
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
/* 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;