git subrepo clone https://github.com/mailcow/mailcow-dockerized.git mailcow/src/mailcow-dockerized

subrepo: subdir:   "mailcow/src/mailcow-dockerized"
  merged:   "a832becb"
upstream: origin:   "https://github.com/mailcow/mailcow-dockerized.git"
  branch:   "master"
  commit:   "a832becb"
git-subrepo: version:  "0.4.3"
  origin:   "???"
  commit:   "???"
Change-Id: If5be2d621a211e164c9b6577adaa7884449f16b5
diff --git a/mailcow/src/mailcow-dockerized/data/web/inc/ajax/container_ctrl.php b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/container_ctrl.php
new file mode 100644
index 0000000..f0e220f
--- /dev/null
+++ b/mailcow/src/mailcow-dockerized/data/web/inc/ajax/container_ctrl.php
@@ -0,0 +1,52 @@
+<?php

+require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';

+if (!isset($_SESSION['mailcow_cc_role']) || $_SESSION['mailcow_cc_role'] != 'admin') {

+	exit();

+}

+

+if (preg_match('/^[a-z\-]{0,}-mailcow/', $_GET['service'])) {

+  if ($_GET['action'] == "start") {

+    header('Content-Type: text/html; charset=utf-8');

+    $retry = 0;

+    while (docker('info', $_GET['service'])['State']['Running'] != 1 && $retry <= 3) {

+      $response = docker('post', $_GET['service'], 'start');

+      $response = json_decode($response, true);

+      $last_response = ($response['type'] == "success") ? '<b><span class="pull-right text-success">OK</span></b>' : '<b><span class="pull-right text-danger">Error: ' . $response['msg'] . '</span></b>';

+      if ($response['type'] == "success") {

+        break;

+      }

+      usleep(1500000);

+      $retry++;

+    }

+    echo (!isset($last_response)) ? '<b><span class="pull-right text-warning">Already running</span></b>' : $last_response;

+  }

+  if ($_GET['action'] == "stop") {

+    header('Content-Type: text/html; charset=utf-8');

+    $retry = 0;

+    while (docker('info', $_GET['service'])['State']['Running'] == 1 && $retry <= 3) {

+      $response = docker('post', $_GET['service'], 'stop');

+      $response = json_decode($response, true);

+      $last_response = ($response['type'] == "success") ? '<b><span class="pull-right text-success">OK</span></b>' : '<b><span class="pull-right text-danger">Error: ' . $response['msg'] . '</span></b>';

+      if ($response['type'] == "success") {

+        break;

+      }

+      usleep(1500000);

+      $retry++;

+    }

+    echo (!isset($last_response)) ? '<b><span class="pull-right text-warning">Not running</span></b>' : $last_response;

+  }

+  if ($_GET['action'] == "restart") {

+    header('Content-Type: text/html; charset=utf-8');

+    $response = docker('post', $_GET['service'], 'restart');

+    $response = json_decode($response, true);

+    $last_response = ($response['type'] == "success") ? '<b><span class="pull-right text-success">OK</span></b>' : '<b><span class="pull-right text-danger">Error: ' . $response['msg'] . '</span></b>';

+    echo (!isset($last_response)) ? '<b><span class="pull-right text-warning">Cannot restart container</span></b>' : $last_response;

+  }

+  if ($_GET['action'] == "logs") {

+    $lines = (empty($_GET['lines']) || !is_numeric($_GET['lines'])) ? 1000 : $_GET['lines'];

+    header('Content-Type: text/plain; charset=utf-8');

+    print_r(preg_split('/\n/', docker('logs', $_GET['service'], $lines)));

+  }

+}

+

+?>