o9AOaw>u
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
L^h^w_g;#$9cgOc?
literal 0
HcmV?d00001
diff --git a/guac-custom-theme-builder/META-INF/MANIFEST.MF b/guac-custom-theme-builder/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..84bd8bc
--- /dev/null
+++ b/guac-custom-theme-builder/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Name: branding
+Specification-Title: Custom Guacamole Theme CSS
+Specification-Version: 1.0
+Implementation-Title: Custom Guacamole Theme CSS
+Implementation-Version: 1.0
+
+
diff --git a/guac-custom-theme-builder/README.MD b/guac-custom-theme-builder/README.MD
new file mode 100644
index 0000000..081ad80
--- /dev/null
+++ b/guac-custom-theme-builder/README.MD
@@ -0,0 +1,23 @@
+
+## Custom branding & theme instructions ##
+
+1. Install the Java JDK: `sudo apt update && sudo apt -y install default-jdk`
+3. Modify `custom-theme.css` ,`guac-manifest.json`, `en.json` & `META-INF` as desired & add your logos to the images directory. (Logos must be .png files.)
+4. To commit your changes, run the below commands from within the custom-theme-builder directory, then refresh your browser to re-login to Guacamole:
+```
+# Run within the custom-theme-builder directory
+jar cfmv branding.jar META-INF/MANIFEST.MF guac-manifest.json css images translations META-INF
+sudo mv branding.jar /etc/guacamole/extensions
+sudo chmod 664 /etc/guacamole/extensions/branding.jar
+TOMCAT=$(ls /etc/ | grep tomcat)
+sudo systemctl restart guacd && sudo systemctl restart ${TOMCAT}
+```
+
+## Theme customisation hints: ##
+ - Do not change any of the theme's directory structure or file names. File contents can be carefully edited according to the following constraints:
+ - `MANIFEST.MF`: All values in here can be updated. Be aware that the "Name:" value MUST use same value in front of the the .jar creation command shown above in the 1st line e.g. `Name: branding` expects branding.jar
+ - `guac-manifest.json`: The "name:" value in here can be changed to anything. The "namespace:" value MUST match the namespace image path line found in `custom-theme.css`, eg.`background-image: url('app/ext/custom-namespace/images/logo.png');`
+ - It is preferable to give css a range of logo sizes as shown in the template. The "smallIcon" value in `guac-manifest.json` is used for browser tab favicons. As such this file can be kept to < 80x80 pixels. The example used is 64x64 pixels.
+ - Within `custom-theme.css`, you may need to experiment with the the height and width values under `.login-ui .login-dialog .logo` to scale your particular logo neatly within the dialog box. Another option is to make the login dialog box larger. Under `.login-ui .login-dialog`, experiment with adding a `max-width: 4in;` or similar. There's a ton of css options available and this template is just starting point, Google is your friend!
+ - An easy way to debug and preview potential style changes is to tweak various values by setting your browser to developer mode.
+ - Your changes may occasionally appear not to update, if so clear your browser cache before doing any further debugging.
diff --git a/guac-custom-theme-builder/css/custom-theme.css b/guac-custom-theme-builder/css/custom-theme.css
new file mode 100644
index 0000000..2e5f12e
--- /dev/null
+++ b/guac-custom-theme-builder/css/custom-theme.css
@@ -0,0 +1,245 @@
+/* Colour codes used */
+/* Guacamole grassy green: #88bf5b */
+/* Warning red #ff2233 */
+/* Main background charcoal #3f3f3f */
+/* Input fields dark charcoal #2b2b2b */
+/* Login dialog background black #000000 */
+/* All text: #ececec */
+
+
+/* General Style */
+body {
+ color: #ececec;
+ background-color: #3f3f3f;
+}
+pre {
+ color: #ececec;
+ background-color: #2b2b2b;
+ border: 1px solid #000000;
+}
+
+a[href]:visited {
+ color: #88bf5b;
+}
+a[href] {
+ color: #88bf5b;
+}
+
+div.location,
+input[type=text],
+input[type=email],
+input[type=number],
+input[type=password],
+textarea {
+ background-color: #2b2b2b;
+ color: #ececec;
+}
+
+
+/* Login */
+div.login-ui {
+ color: #ececec;
+ background-color: #3f3f3f;
+}
+.login-ui .login-fields .labeled-field input:focus {
+ background-color: #3f3f3f;
+ color: #ececec;
+}
+
+.login-ui .login-fields .labeled-field {
+ background-color: #3f3f3f;
+ color: #ececec;
+}
+
+.login-ui .login-dialog .logo {
+ background-image: url('app/ext/custom-namespace/images/logo.png');
+ width: 7em;
+ height: 7em;
+ -webkit-background-size: 7em auto;
+
+}
+
+.login-ui .login-dialog {
+ background-color: #000000;
+ color: #ececec;
+}
+
+.login-ui .login-dialog .version .app-name {
+ font-weight: 300;
+ text-transform: none;
+ text-align: center;
+ font-size: 2.25em;
+ color: #ececec;
+ font-family: arial black, sans-serif;
+}
+
+div.logged-out-modal .ng-scope {
+ color: #ececec;
+ background-color: #000000;
+}
+
+div.logged-out-modal .ng-scope button {
+ color: #ececec;
+ background-color: #3f3f3f;
+ border: 1px solid #ececec;
+}
+
+div.modal-contents {
+ color: #ececec;
+ background-color: #3f3f3f;
+}
+
+.logged-out-modal guac-modal {
+ color: #ececec;
+ background-color: #3f3f3f;
+}
+
+div.notification.ng.scope {
+ border: 1px solid #ececec;
+}
+
+.notification.error {
+ background-color: #ff2233;
+}
+
+.client-status-modal .notification.error {
+ background-color: #ff2233;
+}
+
+button.danger {
+ background: #ff2233;
+ }
+
+.login-ui.error p.login-error {
+ color: #ececec;
+ background-color: #ff2233;
+}
+
+
+/* Home */
+.recent-connections .connection:hover {
+ background-color: #88bf5b;
+}
+
+.menu-dropdown .menu-contents {
+ background-color: #2b2b2b;
+}
+.menu-dropdown .menu-contents li a {
+ color: #ececec;
+}
+.menu-dropdown .menu-contents li a:hover {
+ background-color: #88bf5b;
+}
+
+.list-item.selected {
+ background: #88bf5b
+}
+.list-item:not(.selected) .caption:hover {
+ background-color: #88bf5b;
+}
+.list-item .name {
+ color: #ececec;
+}
+
+.settings.connections .connection-list .new-sharing-profile {
+ opacity: .6;
+}
+
+.notification {
+ color: #ececec;
+ background-color: #2b2b2b;
+}
+
+
+/* Menus */
+.menu {
+ color: #ececec;
+ background-color: #3f3f3f;
+}
+
+.clipboard,
+.clipboard-service-target {
+ background-color: #2b2b2b;
+ color: #88bf5b;
+}
+
+.menu-dropdown .menu-contents li a.danger {
+ color: #ececec;
+ font-weight: 700;
+ background-color: #ff2233;
+}
+
+/* Connections */
+#connection-warning {
+ background-color: #3f3f3f;
+}
+
+.transfer-manager {
+ background-color: #2b2b2b;
+}
+.transfer.error {
+ background-color: #ff2233;
+}
+
+
+/* Settings */
+.page-tabs .page-list li a[href],
+.section-tabs li a {
+ color: #ececec;
+}
+.page-tabs .page-list li a[href]:hover,
+.section-tabs li a:hover {
+ background-color: #88bf5b;
+}
+.page-tabs .page-list li a[href]:visited {
+ color: #ececec;
+}
+
+.settings table.session-list tr.session:hover {
+ background-color: #88bf5b;
+}
+
+.location-chooser .dropdown {
+ background-color: #2b2b2b;
+}
+
+.settings.connectionHistory a.history-session-recording {
+ color: #88bf5b;
+}
+
+.settings.connectionHistory a.history-session-recording:after {
+ opacity: .0;
+}
+
+.user a,
+.user-group a,
+.connection a,
+.connection-group a {
+ color: #ececec;
+}
+.user a:hover,
+.user-group a:hover,
+.connection a:hover,
+.connection-group a:hover {
+ color: #ececec;
+}
+.user a:visited,
+.user-group a:visited,
+.connection a:visited,
+.connection-group a:visited {
+ color: #ececec;
+}
+
+.manage-user .notice.read-only {
+ color: #ececec;
+ background-color: #2b2b2b;
+}
+
+#filesystem-menu .header.breadcrumbs .breadcrumb:hover {
+ background-color: #88bf5b;
+}
+
+#guac-menu #zoom-out:hover,
+#guac-menu #zoom-in:hover {
+ background-color: #88bf5b;
+}
diff --git a/guac-custom-theme-builder/guac-manifest.json b/guac-custom-theme-builder/guac-manifest.json
new file mode 100644
index 0000000..29bbd48
--- /dev/null
+++ b/guac-custom-theme-builder/guac-manifest.json
@@ -0,0 +1,22 @@
+{
+
+ "guacamoleVersion" : "*",
+ "name" : "Custom Guacamole Theme",
+ "namespace" : "custom-namespace",
+ "smallIcon" : "images/logo-64.png",
+ "largeIcon" : "images/logo-144.png",
+ "translations" : [
+ "translations/en.json"
+ ],
+
+ "css" : [
+ "css/custom-theme.css"
+ ],
+
+ "resources" : {
+ "images/logo.png" : "image/png",
+ "images/logo-64.png" : "image/png",
+ "images/logo-144.png" : "image/png"
+ }
+}
+
diff --git a/guac-custom-theme-builder/images/logo-144.png b/guac-custom-theme-builder/images/logo-144.png
new file mode 100644
index 0000000000000000000000000000000000000000..8ed87ca29b56b299ad8042502fa061ce85d13508
GIT binary patch
literal 5342
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
literal 0
HcmV?d00001
diff --git a/guac-custom-theme-builder/images/logo-64.png b/guac-custom-theme-builder/images/logo-64.png
new file mode 100644
index 0000000000000000000000000000000000000000..2583ec045f709eef3e5896e2f4a27384d0da7b62
GIT binary patch
literal 1927
zcmV;22YC32P)Px+K}keGRCr$9TTP4Gii}Bbhebf4m`3wCmi
z!Z>zapbLP>9R>xA?*WZ-#s@osCiVrp`H=|bq?T=0no>U^rbPyk#z!qg#}Pe
zFrv#QzV`sgZKHZH?g0RFf^z_l-TYYa=>kv>9E9P-09Xrxl{3COGsGZxXJLHzxnTvt
zj2MvZ$_YEr1-$=H5G-i&>Top%G%tF4k->s)nvk}v>6J8Skp;?kMa9SjAbE{7
zG#G7+?AYdV7m}y+6A8eIT0s{8cG^K_xSJt5)Zw~>dqjN2ciV531Az5zQ1neKO@yQ+
z$t1$+^MGFsJ}(&nyWOBhpDPUDK?mS5lCF7(VtmSV0c#8BNzOPPoUFA!)#;KI$mB73
zf?&j-^XL59oVH-1;9DpQs6sb8^_Ov^@|(YFc1@s@o%+5C;ul%M$aR3cy6Y?r_WbiE
z{IOxmUAm(dE4o$HTSC&;djRly=->i`sgDkgZhU0)dj{~;q#GO){EPa&%!kwxQ&U{l
zDv1dwbRq8vsU^mka|(cO;ebyx-1aYtyuIYD0tcsP0b~t;ECg=AZ4*1&*P5NNvxxk7
znt4+I5Ou%W6VzD_=P=o*1nVMfrWIjT~z5byeKaIDqw&H=*Vq+mTa
z7AW%E(@{PmBrRXRv2f)6)lqgmD_E|BgAt+y#G1&d
zNR8NO-%MbwdjNFXT~j=;i4(F5AizJ2!!p&ZN09w~qB{SLpl>dE&r`>SbO`Vva5xQW
z7O-KWiv@WKmDZx?1L9NUxjBCnfc@;d^M~ZZ1`t0>@<>0#W59oOxNeWf7)>AS)4@&R~Z+M+F9u2l%rr1&f%%uZB;7t04=fN4ugY0O>;}Vk
zUDxY9x=xf00MnhZtsMDP>llzL2pWvT6s*o(I<#r!*658;IFbd#t+TL#Z7q7t#JAP)
zZXv?02{(8kOAq@PU=jKq&Z^_J`L#=z&87P5z;WLXf34KcA3nb#SfvIm1yo@z%_VOJ
zIUG?z5DJIyMM_K)xd%XBOH6-l)Hs`ht+Reo737H5+uC*0uMC}^tJdmVh*-`&2X
z{T5Hwb1U0Q&_a8?Nt+KjWos}`BaP<(eocQ#09O&=
zZ{R@RNyZb|#{g0mLWu6MrmDW>=J&$SAm3C}T03cms1M@4s8*Gn`
z$`Ic#s-QeR{pvnxbrRxO1VIXOO=V~J4MLfq#srnxHKwLb+ZE2Drvs41$?#o1M%R(Zm0Oy%0_>h<-iZyBe3%mMQwu&Pphp5_MUY|7T^E{{TcgZ`kj66;c2I
N002ovPDHLkV1m+!b{YTx
literal 0
HcmV?d00001
diff --git a/guac-custom-theme-builder/images/logo.png b/guac-custom-theme-builder/images/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..1854ba1e7ddd245ac4674a01d2a59053fcb0802a
GIT binary patch
literal 10191
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