diff --git a/internal/dis/component/server/admin/html/instance.html b/internal/dis/component/server/admin/html/instance.html
index 76a33a5..24d3f18 100644
--- a/internal/dis/component/server/admin/html/instance.html
+++ b/internal/dis/component/server/admin/html/instance.html
@@ -90,6 +90,14 @@
{{ .Instance.System.PHP }}
+
OPCache Development Config
diff --git a/internal/dis/component/server/admin/html/instance_system.html b/internal/dis/component/server/admin/html/instance_system.html
index 6b72e61..a4b631a 100644
--- a/internal/dis/component/server/admin/html/instance_system.html
+++ b/internal/dis/component/server/admin/html/instance_system.html
@@ -37,6 +37,20 @@
Changing the PHP version is possible at any time.
+
+
+
+ IIP Image Server
+
+
+ Run an IIPImage server inside this instance.
+
+ This can be used for streaming 2D images inside this WissKI, see the WissKI Documentation for more details.
+ Please be aware that any installation or configuration steps are performed automatically by the distillery.
+
+ This option can be changed at any time.
+
+
diff --git a/internal/dis/component/server/assets/assets_dist.go b/internal/dis/component/server/assets/assets_dist.go
index 174514a..2f80c39 100644
--- a/internal/dis/component/server/assets/assets_dist.go
+++ b/internal/dis/component/server/assets/assets_dist.go
@@ -30,12 +30,12 @@ var AssetsAdmin = Assets{
// AssetsAdminProvision contains assets for the 'AdminProvision' entrypoint.
var AssetsAdminProvision = Assets{
- Scripts: ``,
+ Scripts: ``,
Styles: ` `,
}
// AssetsAdminRebuild contains assets for the 'AdminRebuild' entrypoint.
var AssetsAdminRebuild = Assets{
- Scripts: ``,
+ Scripts: ``,
Styles: ` `,
}
diff --git a/internal/dis/component/server/assets/dist/AdminProvision.5bc6b324.js b/internal/dis/component/server/assets/dist/AdminProvision.65c71f50.js
similarity index 55%
rename from internal/dis/component/server/assets/dist/AdminProvision.5bc6b324.js
rename to internal/dis/component/server/assets/dist/AdminProvision.65c71f50.js
index 8542508..5b45640 100644
--- a/internal/dis/component/server/assets/dist/AdminProvision.5bc6b324.js
+++ b/internal/dis/component/server/assets/dist/AdminProvision.65c71f50.js
@@ -1 +1 @@
-var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},t={},n={},o=e.parcelRequireafa4;null==o&&((o=function(e){if(e in t)return t[e].exports;if(e in n){var o=n[e];delete n[e];var r={id:e,exports:{}};return t[e]=r,o.call(r.exports,r,r.exports),r.exports}var l=Error("Cannot find module '"+e+"'");throw l.code="MODULE_NOT_FOUND",l}).register=function(e,t){n[e]=t},e.parcelRequireafa4=o),o("8xGhL");var r=o("12vpF");async function l(e){return await new Promise((t,n)=>{(0,r.createModal)("provision",[JSON.stringify(e)],{bufferSize:0,onClose:(o,r)=>{if(!o){n(Error(r??"unspecified error"));return}t(e.Slug)}})})}const i=document.getElementById("system"),a=document.getElementById("slug"),u=document.getElementById("php"),c=document.getElementById("opcacheDevelopment"),d=document.getElementById("contentsecuritypolicy");i.addEventListener("submit",e=>{e.preventDefault();let t=document.querySelector('input[name="flavor"]:checked'),n=t instanceof HTMLInputElement?t.value:"";l({Slug:a.value,Flavor:n,System:{PHP:u.value,OpCacheDevelopment:c.checked,ContentSecurityPolicy:d.value}}).then(e=>{location.href="/admin/instance/"+e}).catch(e=>{console.error(e),location.reload()})}),i.querySelector("fieldset")?.removeAttribute("disabled");
\ No newline at end of file
+var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},t={},n={},o=e.parcelRequireafa4;null==o&&((o=function(e){if(e in t)return t[e].exports;if(e in n){var o=n[e];delete n[e];var r={id:e,exports:{}};return t[e]=r,o.call(r.exports,r,r.exports),r.exports}var l=Error("Cannot find module '"+e+"'");throw l.code="MODULE_NOT_FOUND",l}).register=function(e,t){n[e]=t},e.parcelRequireafa4=o),o("8xGhL");var r=o("12vpF");async function l(e){return await new Promise((t,n)=>{(0,r.createModal)("provision",[JSON.stringify(e)],{bufferSize:0,onClose:(o,r)=>{if(!o){n(Error(r??"unspecified error"));return}t(e.Slug)}})})}const i=document.getElementById("system"),a=document.getElementById("slug"),c=document.getElementById("php"),d=document.getElementById("opcacheDevelopment"),u=document.getElementById("contentsecuritypolicy"),s=document.getElementById("iipserver");i.addEventListener("submit",e=>{e.preventDefault();let t=document.querySelector('input[name="flavor"]:checked'),n=t instanceof HTMLInputElement?t.value:"";l({Slug:a.value,Flavor:n,System:{PHP:c.value,IIPServer:s.checked,OpCacheDevelopment:d.checked,ContentSecurityPolicy:u.value}}).then(e=>{location.href="/admin/instance/"+e}).catch(e=>{console.error(e),location.reload()})}),i.querySelector("fieldset")?.removeAttribute("disabled");
\ No newline at end of file
diff --git a/internal/dis/component/server/assets/dist/AdminProvision.53660f24.js b/internal/dis/component/server/assets/dist/AdminProvision.d01fac9b.js
similarity index 54%
rename from internal/dis/component/server/assets/dist/AdminProvision.53660f24.js
rename to internal/dis/component/server/assets/dist/AdminProvision.d01fac9b.js
index d5d40dd..e67118b 100644
--- a/internal/dis/component/server/assets/dist/AdminProvision.53660f24.js
+++ b/internal/dis/component/server/assets/dist/AdminProvision.d01fac9b.js
@@ -1 +1 @@
-!function(){var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},t={},n={},o=e.parcelRequireafa4;null==o&&((o=function(e){if(e in t)return t[e].exports;if(e in n){var o=n[e];delete n[e];var r={id:e,exports:{}};return t[e]=r,o.call(r.exports,r,r.exports),r.exports}var l=Error("Cannot find module '"+e+"'");throw l.code="MODULE_NOT_FOUND",l}).register=function(e,t){n[e]=t},e.parcelRequireafa4=o),o("dK5Bi");var r=o("8vh0V");async function l(e){return await new Promise((t,n)=>{(0,r.createModal)("provision",[JSON.stringify(e)],{bufferSize:0,onClose:(o,r)=>{if(!o){n(Error(r??"unspecified error"));return}t(e.Slug)}})})}let i=document.getElementById("system"),a=document.getElementById("slug"),u=document.getElementById("php"),c=document.getElementById("opcacheDevelopment"),d=document.getElementById("contentsecuritypolicy");i.addEventListener("submit",e=>{e.preventDefault();let t=document.querySelector('input[name="flavor"]:checked'),n=t instanceof HTMLInputElement?t.value:"";l({Slug:a.value,Flavor:n,System:{PHP:u.value,OpCacheDevelopment:c.checked,ContentSecurityPolicy:d.value}}).then(e=>{location.href="/admin/instance/"+e}).catch(e=>{console.error(e),location.reload()})}),i.querySelector("fieldset")?.removeAttribute("disabled")}();
\ No newline at end of file
+!function(){var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},t={},n={},o=e.parcelRequireafa4;null==o&&((o=function(e){if(e in t)return t[e].exports;if(e in n){var o=n[e];delete n[e];var r={id:e,exports:{}};return t[e]=r,o.call(r.exports,r,r.exports),r.exports}var l=Error("Cannot find module '"+e+"'");throw l.code="MODULE_NOT_FOUND",l}).register=function(e,t){n[e]=t},e.parcelRequireafa4=o),o("dK5Bi");var r=o("8vh0V");async function l(e){return await new Promise((t,n)=>{(0,r.createModal)("provision",[JSON.stringify(e)],{bufferSize:0,onClose:(o,r)=>{if(!o){n(Error(r??"unspecified error"));return}t(e.Slug)}})})}let i=document.getElementById("system"),a=document.getElementById("slug"),c=document.getElementById("php"),d=document.getElementById("opcacheDevelopment"),u=document.getElementById("contentsecuritypolicy"),f=document.getElementById("iipserver");i.addEventListener("submit",e=>{e.preventDefault();let t=document.querySelector('input[name="flavor"]:checked'),n=t instanceof HTMLInputElement?t.value:"";l({Slug:a.value,Flavor:n,System:{PHP:c.value,IIPServer:f.checked,OpCacheDevelopment:d.checked,ContentSecurityPolicy:u.value}}).then(e=>{location.href="/admin/instance/"+e}).catch(e=>{console.error(e),location.reload()})}),i.querySelector("fieldset")?.removeAttribute("disabled")}();
\ No newline at end of file
diff --git a/internal/dis/component/server/assets/dist/AdminRebuild.0be08ae3.js b/internal/dis/component/server/assets/dist/AdminRebuild.0be08ae3.js
new file mode 100644
index 0000000..b01c8e6
--- /dev/null
+++ b/internal/dis/component/server/assets/dist/AdminRebuild.0be08ae3.js
@@ -0,0 +1 @@
+!function(){var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},t={},n={},r=e.parcelRequireafa4;null==r&&((r=function(e){if(e in t)return t[e].exports;if(e in n){var r=n[e];delete n[e];var o={id:e,exports:{}};return t[e]=o,r.call(o.exports,o,o.exports),o.exports}var i=Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}).register=function(e,t){n[e]=t},e.parcelRequireafa4=r),r("dK5Bi");var o=r("8vh0V");async function i(e,t){return await new Promise((n,r)=>{(0,o.createModal)("rebuild",[e,JSON.stringify(t)],{bufferSize:0,onClose:(t,o)=>{if(!t){r(Error(o??"unspecified error"));return}n(e)}})})}let l=document.getElementById("system"),d=document.getElementById("slug"),a=document.getElementById("php"),c=document.getElementById("opcacheDevelopment"),u=document.getElementById("contentsecuritypolicy"),f=document.getElementById("iipserver");l.addEventListener("submit",e=>{e.preventDefault(),i(d.value,{PHP:a.value,IIPServer:f.checked,OpCacheDevelopment:c.checked,ContentSecurityPolicy:u.value}).then(e=>{location.href="/admin/instance/"+e}).catch(e=>{console.error(e),location.reload()})}),l.querySelector("fieldset")?.removeAttribute("disabled")}();
\ No newline at end of file
diff --git a/internal/dis/component/server/assets/dist/AdminRebuild.d7ba1ab0.js b/internal/dis/component/server/assets/dist/AdminRebuild.d7ba1ab0.js
new file mode 100644
index 0000000..e9008ab
--- /dev/null
+++ b/internal/dis/component/server/assets/dist/AdminRebuild.d7ba1ab0.js
@@ -0,0 +1 @@
+var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},t={},n={},r=e.parcelRequireafa4;null==r&&((r=function(e){if(e in t)return t[e].exports;if(e in n){var r=n[e];delete n[e];var o={id:e,exports:{}};return t[e]=o,r.call(o.exports,o,o.exports),o.exports}var i=Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}).register=function(e,t){n[e]=t},e.parcelRequireafa4=r),r("8xGhL");var o=r("12vpF");async function i(e,t){return await new Promise((n,r)=>{(0,o.createModal)("rebuild",[e,JSON.stringify(t)],{bufferSize:0,onClose:(t,o)=>{if(!t){r(Error(o??"unspecified error"));return}n(e)}})})}const l=document.getElementById("system"),d=document.getElementById("slug"),a=document.getElementById("php"),c=document.getElementById("opcacheDevelopment"),u=document.getElementById("contentsecuritypolicy"),s=document.getElementById("iipserver");l.addEventListener("submit",e=>{e.preventDefault(),i(d.value,{PHP:a.value,IIPServer:s.checked,OpCacheDevelopment:c.checked,ContentSecurityPolicy:u.value}).then(e=>{location.href="/admin/instance/"+e}).catch(e=>{console.error(e),location.reload()})}),l.querySelector("fieldset")?.removeAttribute("disabled");
\ No newline at end of file
diff --git a/internal/dis/component/server/assets/dist/AdminRebuild.ddc01020.js b/internal/dis/component/server/assets/dist/AdminRebuild.ddc01020.js
deleted file mode 100644
index c376553..0000000
--- a/internal/dis/component/server/assets/dist/AdminRebuild.ddc01020.js
+++ /dev/null
@@ -1 +0,0 @@
-var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},t={},n={},o=e.parcelRequireafa4;null==o&&((o=function(e){if(e in t)return t[e].exports;if(e in n){var o=n[e];delete n[e];var r={id:e,exports:{}};return t[e]=r,o.call(r.exports,r,r.exports),r.exports}var i=Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}).register=function(e,t){n[e]=t},e.parcelRequireafa4=o),o("8xGhL");var r=o("12vpF");async function i(e,t){return await new Promise((n,o)=>{(0,r.createModal)("rebuild",[e,JSON.stringify(t)],{bufferSize:0,onClose:(t,r)=>{if(!t){o(Error(r??"unspecified error"));return}n(e)}})})}const l=document.getElementById("system"),a=document.getElementById("slug"),d=document.getElementById("php"),c=document.getElementById("opcacheDevelopment"),u=document.getElementById("contentsecuritypolicy");l.addEventListener("submit",e=>{e.preventDefault(),i(a.value,{PHP:d.value,OpCacheDevelopment:c.checked,ContentSecurityPolicy:u.value}).then(e=>{location.href="/admin/instance/"+e}).catch(e=>{console.error(e),location.reload()})}),l.querySelector("fieldset")?.removeAttribute("disabled");
\ No newline at end of file
diff --git a/internal/dis/component/server/assets/dist/AdminRebuild.e4ce4c16.js b/internal/dis/component/server/assets/dist/AdminRebuild.e4ce4c16.js
deleted file mode 100644
index 964d49e..0000000
--- a/internal/dis/component/server/assets/dist/AdminRebuild.e4ce4c16.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(){var e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{},t={},n={},o=e.parcelRequireafa4;null==o&&((o=function(e){if(e in t)return t[e].exports;if(e in n){var o=n[e];delete n[e];var r={id:e,exports:{}};return t[e]=r,o.call(r.exports,r,r.exports),r.exports}var i=Error("Cannot find module '"+e+"'");throw i.code="MODULE_NOT_FOUND",i}).register=function(e,t){n[e]=t},e.parcelRequireafa4=o),o("dK5Bi");var r=o("8vh0V");async function i(e,t){return await new Promise((n,o)=>{(0,r.createModal)("rebuild",[e,JSON.stringify(t)],{bufferSize:0,onClose:(t,r)=>{if(!t){o(Error(r??"unspecified error"));return}n(e)}})})}let l=document.getElementById("system"),d=document.getElementById("slug"),a=document.getElementById("php"),u=document.getElementById("opcacheDevelopment"),c=document.getElementById("contentsecuritypolicy");l.addEventListener("submit",e=>{e.preventDefault(),i(d.value,{PHP:a.value,OpCacheDevelopment:u.checked,ContentSecurityPolicy:c.value}).then(e=>{location.href="/admin/instance/"+e}).catch(e=>{console.error(e),location.reload()})}),l.querySelector("fieldset")?.removeAttribute("disabled")}();
\ No newline at end of file
diff --git a/internal/dis/component/server/assets/src/entry/AdminProvision/index.ts b/internal/dis/component/server/assets/src/entry/AdminProvision/index.ts
index 0088ee5..a9ca5b0 100644
--- a/internal/dis/component/server/assets/src/entry/AdminProvision/index.ts
+++ b/internal/dis/component/server/assets/src/entry/AdminProvision/index.ts
@@ -8,6 +8,7 @@ const slug = document.getElementById('slug') as HTMLInputElement
const php = document.getElementById('php') as HTMLSelectElement
const opcacheDevelopment = document.getElementById('opcacheDevelopment') as HTMLInputElement
const contentSecurityPolicy = document.getElementById('contentsecuritypolicy') as HTMLInputElement
+const iipserver = document.getElementById('iipserver') as HTMLInputElement
// add an event handler to open the modal form!
system.addEventListener('submit', (evt) => {
@@ -19,7 +20,7 @@ system.addEventListener('submit', (evt) => {
Provision({
Slug: slug.value,
Flavor: flavor,
- System: { PHP: php.value, OpCacheDevelopment: opcacheDevelopment.checked, ContentSecurityPolicy: contentSecurityPolicy.value }
+ System: { PHP: php.value, IIPServer: iipserver.checked, OpCacheDevelopment: opcacheDevelopment.checked, ContentSecurityPolicy: contentSecurityPolicy.value }
})
.then(slug => {
location.href = '/admin/instance/' + slug
diff --git a/internal/dis/component/server/assets/src/entry/AdminRebuild/index.ts b/internal/dis/component/server/assets/src/entry/AdminRebuild/index.ts
index 111091d..5c66e80 100644
--- a/internal/dis/component/server/assets/src/entry/AdminRebuild/index.ts
+++ b/internal/dis/component/server/assets/src/entry/AdminRebuild/index.ts
@@ -8,12 +8,13 @@ const slug = document.getElementById('slug') as HTMLInputElement
const php = document.getElementById('php') as HTMLSelectElement
const opcacheDevelopment = document.getElementById('opcacheDevelopment') as HTMLInputElement
const contentSecurityPolicy = document.getElementById('contentsecuritypolicy') as HTMLInputElement
+const iipserver = document.getElementById('iipserver') as HTMLInputElement
// add an event handler to open the modal form!
system.addEventListener('submit', (evt) => {
evt.preventDefault()
- Rebuild(slug.value, { PHP: php.value, OpCacheDevelopment: opcacheDevelopment.checked, ContentSecurityPolicy: contentSecurityPolicy.value })
+ Rebuild(slug.value, { PHP: php.value, IIPServer: iipserver.checked, OpCacheDevelopment: opcacheDevelopment.checked, ContentSecurityPolicy: contentSecurityPolicy.value })
.then(slug => {
location.href = '/admin/instance/' + slug
})
diff --git a/internal/dis/component/server/assets/src/lib/remote/api.ts b/internal/dis/component/server/assets/src/lib/remote/api.ts
index ceddf9b..396ef90 100644
--- a/internal/dis/component/server/assets/src/lib/remote/api.ts
+++ b/internal/dis/component/server/assets/src/lib/remote/api.ts
@@ -12,6 +12,7 @@ interface ProvisionFlags {
interface System {
PHP: string
+ IIPServer: boolean
OpCacheDevelopment: boolean
ContentSecurityPolicy: string
}
diff --git a/internal/models/instances_system.go b/internal/models/instances_system.go
index a9affe3..afa7171 100644
--- a/internal/models/instances_system.go
+++ b/internal/models/instances_system.go
@@ -4,8 +4,9 @@ package models
// It is embedded into the instances struct by gorm.
type System struct {
// NOTE(twiesing): Any changes here should be reflected in instance_{provision,rebuild}.html and remote/api.ts.
- PHP string `gorm:"column:php;not null"` // php version to use
- OpCacheDevelopment bool `gorm:"column:opcache_devel;not null"` // opcache development
+ PHP string `gorm:"column:php;not null"` // php version to use
+ IIPServer bool `gorm:"column:iipimage;not null;default:false"` // should we enable the IIPServer?
+ OpCacheDevelopment bool `gorm:"column:opcache_devel;not null"` // opcache development
ContentSecurityPolicy string `gorm:"column:csp;not null"` // content security policy for the system
}
diff --git a/utils/wsclient/client/calls.ts b/utils/wsclient/client/calls.ts
index 923af71..e954889 100644
--- a/utils/wsclient/client/calls.ts
+++ b/utils/wsclient/client/calls.ts
@@ -11,6 +11,7 @@ export function Backup(): WebSocketCall {
type ProvisionParams = {
Slug: string;
Flavor?: "Drupal 10" | "Drupal 9",
+ IIPServer?: string,
System: SystemParams
}