kivi.js: Helfsfunktion zum Formatieren eines JS-Calls als CURL-Aufruf
authorMoritz Bunkus <m.bunkus@linet.de>
Thu, 28 Oct 2021 08:40:21 +0000 (10:40 +0200)
committerMoritz Bunkus <m.bunkus@linet.de>
Wed, 10 Nov 2021 15:06:57 +0000 (16:06 +0100)
Nützlich, wenn man mehrfach von der Kommandozeile aus eine
Controller-Funktion aufrufen will, ohne jedes Mal zur Maus greifen zu
müssen. Aufruf grob so:

var data = $('#form').serializeArray();
data.push({ name: 'action', value: 'Order/frobnicate' });
console.log(kivi.call_as_curl({ data: data }));

js/kivi.js

index c6245c8..7fb2501 100644 (file)
@@ -676,6 +676,29 @@ namespace("kivi", function(ns) {
     $input.prop('selectionStart', position);
     $input.prop('selectionEnd',   position);
   };
+
+  ns._shell_escape = function(str) {
+    if (str.match(/^[a-zA-Z0-9.,_=+/-]+$/))
+      return str;
+
+    return "'" + str.replace(/'/, "'\\''") + "'";
+  };
+
+  ns.call_as_curl = function(params) {
+    params      = params || {};
+    var uri     = document.documentURI.replace(/\?.*/, '');
+    var command = ['curl', '--user', kivi.myconfig.login + ':SECRET', '--request', params.method || 'POST']
+
+    $(params.data || []).each(function(idx, elt) {
+      command = command.concat([ '--form-string', elt.name + '=' + (elt.value || '') ]);
+    });
+
+    command.push(uri);
+
+    return $.map(command, function(elt, idx) {
+      return kivi._shell_escape(elt);
+    }).join(' ');
+  };
 });
 
 kivi = namespace('kivi');