Quellcode durchsuchen

fmt: Added pre-commit, fixed a few lint errors, npn updated webui

jamesread vor 2 Jahren
Ursprung
Commit
11dad79794

+ 1 - 1
.github/ISSUE_TEMPLATE/support_request.md

@@ -39,7 +39,7 @@ If possible, please copy and paste your OliveTin logs from when the error happen
 **Screenshot of WebDeveloper console logs**
 
 If you know how, and if you think it's relevant, a screenshot of the
-WebDeveloper console from when you clicked a button is often really helpful. 
+WebDeveloper console from when you clicked a button is often really helpful.
 
 **Anything else?**
 

+ 4 - 4
.github/PULL_REQUEST_TEMPLATE.md

@@ -4,7 +4,7 @@ First of all, thank you for considering to raise a pull request!
 
 Don’t be afraid to ask for advice before working on a contribution. If you’re thinking about a bigger change, especially that might affect the core working or architecture, it’s almost essential to talk and ask about what you’re planning might affect things.  Some of the larger future plans may not be documented well so it’s difficult to understand how your change might affect the general direction and roadmap of this project without asking.
 
-The preferred way to communicate is probably via Discord or GitHub issues. 
+The preferred way to communicate is probably via Discord or GitHub issues.
 
 Helpful information to understand the project can be found here: [CONTRIBUTING](https://github.com/OliveTin/OliveTin/blob/main/CONTRIBUTING.adoc)
 
@@ -13,10 +13,10 @@ Helpful information to understand the project can be found here: [CONTRIBUTING](
 # Checklist
 Please put a X in the boxes as evidence of reading through the checklist.
 
-- [ ] I have forked the project, and raised this PR on a feature branch. 
+- [ ] I have forked the project, and raised this PR on a feature branch.
 - [ ] `make githooks` has been run, and my git commit message was accepted by the git hook.
 - [ ] `make daemon-compile` runs without any issues.
 - [ ] `make daemon-codestyle` runs without any issues.
 - [ ] `make daemon-unittests` runs without any issues.
-- [ ] `make webui-codestyle` runs without any issues. 
-- [ ] I understand and accept the [AGPL-3.0 license](LICENSE) and [code of conduct](CODE_OF_CONDUCT.md), and my contributions fall under these. 
+- [ ] `make webui-codestyle` runs without any issues.
+- [ ] I understand and accept the [AGPL-3.0 license](LICENSE) and [code of conduct](CODE_OF_CONDUCT.md), and my contributions fall under these.

+ 7 - 8
.goreleaser.yml

@@ -18,7 +18,7 @@ builds:
 
     goarm:
       - 5 # For old RPIs
-      - 6 
+      - 6
       - 7
 
     main: cmd/OliveTin/main.go
@@ -62,10 +62,10 @@ changelog:
       - '^refactor:'
 
 archives:
-  - 
+  -
     format: tar.gz
 
-    files: 
+    files:
       - config.yaml
       - LICENSE
       - README.md
@@ -225,15 +225,14 @@ release:
     ## Container images ([on Docker Hub](https://hub.docker.com/r/jamesread/olivetin/tags?page=1&ordering=last_updated))
 
     - `docker pull docker.io/jamesread/olivetin:{{ .Version }}`
-    
+
     ## Upgrade warnings, or breaking changes
-   
-    - No such issues between the last release and this version. 
+
+    - No such issues between the last release and this version.
 
     ## Useful links
 
     - [Which download do I need?](https://docs.olivetin.app/choose-package.html)
     - [Ask for help and chat with others users in the Discord community](https://discord.gg/jhYWWpNJ3v)
-    
+
     Thanks for your interest in OliveTin!
-  

+ 10 - 0
.pre-commit-config.yaml

@@ -0,0 +1,10 @@
+# See https://pre-commit.com for more information
+# See https://pre-commit.com/hooks.html for more hooks
+repos:
+-   repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v3.2.0
+    hooks:
+    -   id: trailing-whitespace
+    -   id: end-of-file-fixer
+    -   id: check-yaml
+    -   id: check-added-large-files

+ 11 - 11
CONTRIBUTING.adoc

@@ -7,9 +7,9 @@ of multiple projects, your time and interest in contributing is most welcome.
 If you're not sure where to get started, raise an issue in the project.
 
 Ideas may be discussed, purely on their merits and issues. Our Code of Conduct
-(CoC) is straightforward - it's important that contributors feel comfortable in 
-discussion throughout the whole process. This project respects the 
-link:https://www.kernel.org/doc/html/latest/process/code-of-conduct.html[Linux Kernel code of conduct]. 
+(CoC) is straightforward - it's important that contributors feel comfortable in
+discussion throughout the whole process. This project respects the
+link:https://www.kernel.org/doc/html/latest/process/code-of-conduct.html[Linux Kernel code of conduct].
 
 == If you're not sure, ask!
 
@@ -18,19 +18,19 @@ contribution. If you're thinking about a bigger change, especially that might
 affect the core working or architecture, it's almost essential to talk and ask
 about what you're planning might affect things. Some of the larger future plans may not be
 documented well so it's difficult to understand how your change might affect
-the general direction and roadmap of this project without asking. 
+the general direction and roadmap of this project without asking.
 
-The preferred way to communicate is probably via Discord or GitHub issues. 
+The preferred way to communicate is probably via Discord or GitHub issues.
 
-=== Dev environment setup and clean build - Fedora 
+=== Dev environment setup and clean build - Fedora
 
 ```
-dnf install git go protobuf-compiler make -y 
+dnf install git go protobuf-compiler make -y
 git clone https://github.com/OliveTin/OliveTin.git
 cd OliveTin
 
-# `make grpc` will also run `make go-tools`, which installs "buf". This binary 
-# will be put in your GOPATH/bin/, which should be on your path. buf is used to 
+# `make grpc` will also run `make go-tools`, which installs "buf". This binary
+# will be put in your GOPATH/bin/, which should be on your path. buf is used to
 # generate the protobuf / grpc stubs.
 make grpc
 make
@@ -39,10 +39,10 @@ make
 
 === Getting started to contribute;
 
-The project layout is reasonably straightforward; 
+The project layout is reasonably straightforward;
 
 * See the `Makefile` for common targets. This project was originally created on top of Fedora, but it should be usable on Debian/your faveourite distro with minor changes (if any).
-* The API is defined in protobuf+grpc - you will need to `make grpc`. 
+* The API is defined in protobuf+grpc - you will need to `make grpc`.
 * The Go daemon is built from the `cmd` and `internal` directories mostly.
 * The webui is just a single page application with a bit of Javascript in the `webui` directory. This can happily be hosted on another webserver.
 

+ 3 - 3
Dockerfile

@@ -4,16 +4,16 @@ LABEL org.opencontainers.image.source https://github.com/OliveTin/OliveTin
 LABEL org.opencontainers.image.title=OliveTin
 
 RUN mkdir -p /config /var/www/olivetin \
-    && microdnf install -y --nodocs --noplugins --setopt=keepcache=0 --setopt=install_weak_deps=0 \ 
+    && microdnf install -y --nodocs --noplugins --setopt=keepcache=0 --setopt=install_weak_deps=0 \
 		iputils \
 		openssh-clients \
 		shadow-utils \
 		docker \
 	&& microdnf clean all
 
-RUN useradd --system --create-home olivetin -u 1000 
+RUN useradd --system --create-home olivetin -u 1000
 
-EXPOSE 1337/tcp 
+EXPOSE 1337/tcp
 
 VOLUME /config
 

+ 4 - 4
Dockerfile.arm64

@@ -5,14 +5,14 @@ LABEL org.opencontainers.image.title=OliveTin
 
 RUN mkdir -p /config /var/www/olivetin \
     && \
-    microdnf install -y --nodocs --noplugins --setopt=keepcache=0 --setopt=install_weak_deps=0 \ 
+    microdnf install -y --nodocs --noplugins --setopt=keepcache=0 --setopt=install_weak_deps=0 \
 		iputils \
 		shadow-utils \
-		openssh-clients 
+		openssh-clients
 
-RUN useradd --system --create-home olivetin -u 1000 
+RUN useradd --system --create-home olivetin -u 1000
 
-EXPOSE 1337/tcp 
+EXPOSE 1337/tcp
 
 VOLUME /config
 

+ 5 - 5
Dockerfile.armv7

@@ -5,14 +5,14 @@ LABEL org.opencontainers.image.title=OliveTin
 
 RUN mkdir -p /config /var/www/olivetin \
     && \
-    microdnf install -y --nodocs --noplugins --setopt=keepcache=0 --setopt=install_weak_deps=0 \ 
+    microdnf install -y --nodocs --noplugins --setopt=keepcache=0 --setopt=install_weak_deps=0 \
 		iputils \
-		shadow-utils \ 
-		openssh-clients 
+		shadow-utils \
+		openssh-clients
 
-RUN useradd --system --create-home olivetin -u 1000 
+RUN useradd --system --create-home olivetin -u 1000
 
-EXPOSE 1337/tcp 
+EXPOSE 1337/tcp
 
 VOLUME /config
 

+ 4 - 4
Jenkinsfile

@@ -14,7 +14,7 @@ pipeline {
 				sh 'make go-tools'
             }
         }
-        
+
         stage('Compile') {
             steps {
 				withEnv(["PATH+GO=/root/go/bin/"]) {
@@ -25,9 +25,9 @@ pipeline {
 				}
             }
         }
-        
+
         stage ('Post-Compile') {
-            parallel { 
+            parallel {
                 stage('Codestyle') {
                     steps {
 						withEnv(["PATH+GO=/root/go/bin/"]) {
@@ -45,6 +45,6 @@ pipeline {
                 }
             }
         }
-        
+
     }
 }

+ 7 - 7
Makefile

@@ -1,9 +1,9 @@
 compile: daemon-compile-x64-lin
 
-daemon-compile-armhf: 
+daemon-compile-armhf:
 	GOARCH=arm GOARM=6 go build -o OliveTin.armhf github.com/OliveTin/OliveTin/cmd/OliveTin
 
-daemon-compile-x64-lin: 
+daemon-compile-x64-lin:
 	GOOS=linux go build -o OliveTin github.com/OliveTin/OliveTin/cmd/OliveTin
 
 daemon-compile-x64-win:
@@ -14,7 +14,7 @@ daemon-compile: daemon-compile-armhf daemon-compile-x64-lin daemon-compile-x64-w
 daemon-codestyle:
 	go fmt ./...
 	go vet ./...
-	gocyclo -over 4 cmd internal 
+	gocyclo -over 4 cmd internal
 	gocritic check ./...
 
 daemon-unittests:
@@ -24,7 +24,7 @@ daemon-unittests:
 
 githooks:
 	cp -v .githooks/* .git/hooks/
-	
+
 go-tools:
 	go install "github.com/bufbuild/buf/cmd/buf"
 	go install "github.com/fzipp/gocyclo/cmd/gocyclo"
@@ -37,7 +37,7 @@ go-tools:
 grpc: go-tools
 	buf generate
 
-dist: protoc 
+dist: protoc
 
 protoc:
 	protoc --go_out=. --go-grpc_out=. --grpc-gateway_out=. -I .:/usr/include/ OliveTin.proto
@@ -54,7 +54,7 @@ podman-container:
 integration-tests-docker-image:
 	docker rm -f olivetin && docker rmi -f olivetin
 	docker build -t olivetin:latest .
-	docker create --name olivetin -p 1337:1337 -v `pwd`/integration-tests/configs/:/config/ olivetin 
+	docker create --name olivetin -p 1337:1337 -v `pwd`/integration-tests/configs/:/config/ olivetin
 
 devrun: compile
 	killall OliveTin || true
@@ -70,4 +70,4 @@ webui-codestyle:
 clean:
 	rm -rf dist OliveTin OliveTin.armhf OliveTin.exe reports gen
 
-.PHONY: grpc 
+.PHONY: grpc

+ 14 - 15
README.md

@@ -2,7 +2,7 @@
 
 <img alt = "project logo" src = "https://github.com/OliveTin/OliveTin/blob/main/webui/OliveTinLogo.png" align = "right" width = "160px" />
 
-OliveTin gives **safe** and **simple** access to predefined shell commands from a web interface. 
+OliveTin gives **safe** and **simple** access to predefined shell commands from a web interface.
 
 [![Discord](https://img.shields.io/discord/846737624960860180?label=Discord%20Server)](https://discord.gg/jhYWWpNJ3v)
 [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/awesome-selfhosted/awesome-selfhosted#automation)
@@ -11,7 +11,7 @@ OliveTin gives **safe** and **simple** access to predefined shell commands from
 [![Go Report Card](https://goreportcard.com/badge/github.com/Olivetin/OliveTin)](https://goreportcard.com/report/github.com/OliveTin/OliveTin)
 [![Build Snapshot](https://github.com/OliveTin/OliveTin/actions/workflows/build-snapshot.yml/badge.svg)](https://github.com/OliveTin/OliveTin/actions/workflows/build-snapshot.yml)
 
-## Use cases 
+## Use cases
 
 **Safely** give access to commands, for less technical people;
 
@@ -34,10 +34,10 @@ OliveTin gives **safe** and **simple** access to predefined shell commands from
 ## Features
 
 * **Responsive, touch-friendly UI** - great for tablets and mobile
-* **Super simple config in YAML** - because if it's not YAML now-a-days, it's not "cloud native" :-) 
+* **Super simple config in YAML** - because if it's not YAML now-a-days, it's not "cloud native" :-)
 * **Dark mode** - for those of you that roll that way.
-* **Accessible** - passes all the accessibility checks in Firefox, and issues with accessibility are taken seriously.  
-* **Container** - available for quickly testing and getting it up and running, great for the selfhosted community. 
+* **Accessible** - passes all the accessibility checks in Firefox, and issues with accessibility are taken seriously.
+* **Container** - available for quickly testing and getting it up and running, great for the selfhosted community.
 * **Integrate with anything** - OliveTin just runs Linux shell commands, so theoretially you could integrate with a bunch of stuff just by using curl, ping, etc. However, writing your own shell scripts is a great way to extend OliveTin.
 * **Lightweight on resources** - uses only a few MB of RAM and barely any CPU. Written in Go, with a web interface written as a modern, responsive, Single Page App that uses the REST/gRPC API.
 * **Good amount of unit tests and style checks** - helps potential contributors be consistent, and helps with maintainability.
@@ -48,17 +48,17 @@ Desktop web browser;
 
 ![Desktop screenshot](media/screenshotDesktop.png)
 
-Desktop web browser (dark mode); 
+Desktop web browser (dark mode);
 
 ![Desktop screenshot](media/screenshotDesktopDark.png)
 
-Mobile screen size (responsive layout); 
+Mobile screen size (responsive layout);
 
 ![Mobile screenshot](media/screenshotMobile.png)
 
 ## Documentation
 
-All documentation can be found at http://docs.olivetin.app . This includes installation and usage guide, etc. 
+All documentation can be found at http://docs.olivetin.app . This includes installation and usage guide, etc.
 
 ### Quickstart reference for `config.yaml`
 
@@ -75,19 +75,19 @@ Put this `config.yaml` in `/etc/OliveTin/` if you're running a standard service,
 
 ```yaml
 # Listen on all addresses available, port 1337
-listenAddressSingleHTTPFrontend: 0.0.0.0:1337 
+listenAddressSingleHTTPFrontend: 0.0.0.0:1337
 
 # Choose from INFO (default), WARN and DEBUG
 logLevel: "INFO"
 
 # Actions (buttons) to show up on the WebUI:
-actions: 
-  # Docs: https://docs.olivetin.app/action-container-control.html 
+actions:
+  # Docs: https://docs.olivetin.app/action-container-control.html
 - title: Restart Plex
   icon: restart
   shell: docker restart plex
-  
-  # This will send 1 ping 
+
+  # This will send 1 ping
   # Docs: https://docs.olivetin.app/action-ping.html
 - title: Ping host
   shell: ping {{ host }} -c {{ count }}
@@ -102,7 +102,7 @@ actions:
       title: Count
       type: int
       default: 1
-  
+
   # Restart http on host "webserver1"
   # Docs: https://docs.olivetin.app/action-ssh.html
 - title: restart httpd
@@ -111,4 +111,3 @@ actions:
 ```
 
 A full example config can be found at in this repository - [config.yaml](https://github.com/OliveTin/OliveTin/blob/main/config.yaml).
-

+ 2 - 2
SECURITY.md

@@ -2,7 +2,7 @@
 
 ## Supported Versions
 
-Currently, only the `main` branch is "supported". 
+Currently, only the `main` branch is "supported".
 
 | Version | Supported          |
 | ------- | ------------------ |
@@ -10,4 +10,4 @@ Currently, only the `main` branch is "supported".
 
 ## Reporting a Vulnerability
 
-Please email `contact@jread.com` for responsible disclosure. Accepted issues will be made public once patched, and you will be given credit. 
+Please email `contact@jread.com` for responsible disclosure. Accepted issues will be made public once patched, and you will be given credit.

+ 0 - 1
buf.gen.yaml

@@ -17,4 +17,3 @@ plugins:
 
 #  - name: openapiv2
 #    out: reports/openapiv2
-

+ 1 - 1
buf.yaml

@@ -1,5 +1,5 @@
 version: v1
-deps: 
+deps:
   - buf.build/googleapis/googleapis
 lint:
   use:

+ 9 - 10
config.yaml

@@ -1,15 +1,15 @@
-# There is a built-in micro proxy that will host the webui and REST API all on 
-# one port (this is called the "Single HTTP Frontend") and means you just need 
-# one open port in the container/firewalls/etc. 
+# There is a built-in micro proxy that will host the webui and REST API all on
+# one port (this is called the "Single HTTP Frontend") and means you just need
+# one open port in the container/firewalls/etc.
 #
 # Listen on all addresses available, port 1337
-listenAddressSingleHTTPFrontend: 0.0.0.0:1337 
+listenAddressSingleHTTPFrontend: 0.0.0.0:1337
 
 # Choose from INFO (default), WARN and DEBUG
 logLevel: "INFO"
 
 # Actions (buttons) to show up on the WebUI:
-actions:   
+actions:
   # This will run a simple script that you create.
 - title: Run backup script
   shell: /opt/backupScript.sh
@@ -32,15 +32,15 @@ actions:
       type: int
       default: 1
       description: How many times to do you want to ping?
-  
+
   # Restart lightdm on host "server1"
   # Docs: https://docs.olivetin.app/action-ping.html
 - title: restart httpd
   icon: restart
   shell: ssh root@server1 'service httpd restart'
 
-  # OliveTin can run long-running jobs like Ansible playbooks. 
-  # 
+  # OliveTin can run long-running jobs like Ansible playbooks.
+  #
   # For such jobs, you will need to install ansible-playbook on the host where
   # you are running OliveTin, or in the container.
   #
@@ -51,7 +51,7 @@ actions:
   timeout: 120
 
   # OliveTin can control containers - docker is just a command line app.
-  # 
+  #
   # However, if you are running in a container you will need to do some setup,
   # see the docs below.
   #
@@ -76,4 +76,3 @@ actions:
   shell: sleep 5
   timeout: 5
   icon: "&#x1F62A"
-

+ 1 - 1
integration-tests/Makefile

@@ -1,6 +1,6 @@
 cypress:
 	npm install
 	./cypressRun.sh "general"
-	./cypressRun.sh "hiddenNav"		
+	./cypressRun.sh "hiddenNav"
 
 .PHONY: cypress container

+ 1 - 1
integration-tests/README.md

@@ -1 +1 @@
-# OliveTin-integration-tests
+# OliveTin-integration-tests

+ 1 - 1
integration-tests/Vagrantfile

@@ -2,7 +2,7 @@
 # (eg, snapshot builds on GitHub)
 
 
-Vagrant.configure("2") do |config| 
+Vagrant.configure("2") do |config|
   config.vm.box = "generic/centos8"
   config.vm.provision "shell", inline: "mkdir /etc/OliveTin && chmod o+w /etc/OliveTin/", privileged: true
   config.vm.provision "file", source: "configs/config.general.yaml/.", destination: "/etc/OliveTin/config.yaml"

+ 5 - 6
integration-tests/configs/config.general.yaml

@@ -1,17 +1,17 @@
 #
 # Integration Test Config: General
-# 
+#
 
-listenAddressSingleHTTPFrontend: 0.0.0.0:1337 
+listenAddressSingleHTTPFrontend: 0.0.0.0:1337
 
 logLevel: "DEBUG"
-checkForUpdates: false 
+checkForUpdates: false
 
-actions:   
+actions:
 - title: Ping Google.com
   shell: ping google.com -c 1
   icon: ping
-  
+
 - title: restart lightdm
   icon: poop
   shell: ssh root@overseer 'service lightdm restart'
@@ -32,4 +32,3 @@ actions:
 - title: Restart Plex
   icon: smile
   shell: docker restart plex
-

+ 3 - 3
integration-tests/configs/config.hiddenFooter.yaml

@@ -1,12 +1,12 @@
 #
 # Integration Test Config: General
-# 
+#
 
 showFooter: false
-checkForUpdates: false 
+checkForUpdates: false
 
 # Actions (buttons) to show up on the WebUI:
-actions:   
+actions:
 - title: Ping example.com
   shell: ping example.com -c 1
   icon: ping

+ 4 - 4
integration-tests/configs/config.hiddenNav.yaml

@@ -1,14 +1,14 @@
 #
 # Integration Test Config: General
-# 
+#
 
-listenAddressSingleHTTPFrontend: 0.0.0.0:1337 
+listenAddressSingleHTTPFrontend: 0.0.0.0:1337
 
 showNavigation: false
-checkForUpdates: false 
+checkForUpdates: false
 
 # Actions (buttons) to show up on the WebUI:
-actions:   
+actions:
 - title: Ping example.com
   shell: ping example.com -c 1
   icon: ping

+ 0 - 2
integration-tests/cypress/integration/general/defaultHomepageRender.spec.js

@@ -17,5 +17,3 @@ describe('Homepage rendering', () => {
     })
   })
 });
-
-

+ 0 - 2
integration-tests/cypress/integration/hiddenFooter/hiddenFooter.spec.js

@@ -10,5 +10,3 @@ describe('Hidden Footer', () => {
     })
   })
 });
-
-

+ 0 - 2
integration-tests/cypress/integration/hiddenNav/hiddenNav.spec.js

@@ -14,5 +14,3 @@ describe('Hidden Nav', () => {
     })
   })
 });
-
-

+ 0 - 1
integration-tests/cypress/support/commands.js

@@ -23,4 +23,3 @@
 //
 // -- This will overwrite an existing command --
 // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
-

+ 0 - 1
integration-tests/cypressRun.sh

@@ -8,4 +8,3 @@ cp -f ./configs/config.$1.yaml ./configs/config.yaml
 docker start olivetin
 NO_COLOR=1 ./node_modules/.bin/cypress run --headless -s cypress/integration/$1/*  || true
 docker kill olivetin
-

+ 1 - 1
var/initscript/OliveTin

@@ -48,7 +48,7 @@ stop()
 
 status() {
 	PID=$(pidof OliveTin)
-	RETVAL=$? 
+	RETVAL=$?
 
 	if [ $RETVAL -eq 1 ] ; then
 		echo "OliveTin is stopped"

+ 1 - 1
var/openrc/OliveTin

@@ -4,4 +4,4 @@ name=$RC_SVCNAME
 description="OliveTin"
 command="/usr/local/bin/OliveTin"
 pidfile="/run/${RC_SVCNAME}.pid"
-command_background=true
+command_background=true

+ 7 - 7
webui/index.html

@@ -63,10 +63,10 @@
 
 		<footer title = "footer">
 			<p><img title = "application icon" src = "OliveTinLogo.png" height = "1em" class = "logo" /> OliveTin</p>
-			<p>	
-				<a href = "https://docs.olivetin.app" target = "_new">Documentation</a> | 
-				<a href = "https://github.com/OliveTin/OliveTin/issues/new/choose" target = "_new">Raise an issue on GitHub</a> | 
-				<span id = "currentVersion">Version: ?</p>  
+			<p>
+				<a href = "https://docs.olivetin.app" target = "_new">Documentation</a> |
+				<a href = "https://github.com/OliveTin/OliveTin/issues/new/choose" target = "_new">Raise an issue on GitHub</a> |
+				<span id = "currentVersion">Version: ?</p>
 				<a id = "available-version" href = "http://olivetin.app" target = "_blank" hidden>?</a>
 			</p>
 		</footer>
@@ -98,11 +98,11 @@
 
 		<template id = "tplLogRow">
 			<tr class = "log-row">
-				<td class = "timestamp">?</td> 
+				<td class = "timestamp">?</td>
 				<td>
 					<span class = "icon" role = "icon"></span>
 					<span class = "content">?</span>
-	
+
 					<details>
 						<summary>stdout</summary>
 						<pre class = "stdout">
@@ -124,7 +124,7 @@
 		</template>
 
 		<script type = "text/javascript">
-			/** 
+			/**
 			This is the bootstrap code, which relies on very simple, old javascript
 		  	to at least display a helpful error message if we can't use OliveTin.
 			*/

+ 18 - 18
webui/package-lock.json

@@ -1053,9 +1053,9 @@
       }
     },
     "node_modules/eslint-plugin-node/node_modules/semver": {
-      "version": "6.3.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-      "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+      "version": "6.3.1",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+      "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
       "dev": true,
       "bin": {
         "semver": "bin/semver.js"
@@ -2639,9 +2639,9 @@
       }
     },
     "node_modules/read-pkg/node_modules/semver": {
-      "version": "5.7.1",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+      "version": "5.7.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+      "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
       "dev": true,
       "bin": {
         "semver": "bin/semver"
@@ -2796,9 +2796,9 @@
       }
     },
     "node_modules/semver": {
-      "version": "7.3.8",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
-      "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
       "dev": true,
       "dependencies": {
         "lru-cache": "^6.0.0"
@@ -4155,9 +4155,9 @@
           "dev": true
         },
         "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
-          "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+          "version": "6.3.1",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+          "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
           "dev": true
         }
       }
@@ -5281,9 +5281,9 @@
           }
         },
         "semver": {
-          "version": "5.7.1",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
-          "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+          "version": "5.7.2",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+          "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
           "dev": true
         },
         "type-fest": {
@@ -5399,9 +5399,9 @@
       }
     },
     "semver": {
-      "version": "7.3.8",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
-      "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+      "version": "7.5.4",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+      "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
       "dev": true,
       "requires": {
         "lru-cache": "^6.0.0"