📦 chore(devcontainer.json): add devcontainer configuration file for development environment setup

📦 chore(setup.sh): add setup script to install pre-commit and configure it
📄 docs(README.md): update repository name and add description of custom Home Assistant addons
📄 docs(kresus/DOCS.md): add documentation for Kresus addon
🐳 feat(kresus): add Dockerfile and build.yaml for Kresus addon
🔧 chore(kresus): add configuration files for Kresus addon
🔧 chore(kresus): add apparmor profile for Kresus addon
🔧 chore(kresus): add changelog and docs for Kresus addon
🔧 chore(kresus): add icon and logo for Kresus addon
🔧 chore(kresus): add license file for Kresus addon
🔧 chore(kresus): add README and requirements file for Kresus addon
🔧 chore(kresus): add service scripts for Kresus addon
🔧 chore(kresus): add translations for Kresus addon
🔧 chore(repository.yaml): add repository information for MrRaph_'s custom Home Assistant addons
This commit is contained in:
MrRaph_
2024-03-06 11:20:07 +01:00
parent 6792d6f9fe
commit ddeb64cef5
20 changed files with 805 additions and 1 deletions

View File

@@ -0,0 +1,29 @@
{
"containerEnv": {
"WORKSPACE_DIRECTORY": "${containerWorkspaceFolder}"
},
"extensions": [
"timonwong.shellcheck",
"esbenp.prettier-vscode"
],
"image": "ghcr.io/home-assistant/devcontainer:addons",
"name": "Example Home Assistant add-on repository",
"postStartCommand": ".devcontainer/setup.sh",
"runArgs": [
"-e",
"GIT_EDITOR=code --wait",
"--privileged"
],
"settings": {
"editor.formatOnPaste": false,
"editor.formatOnSave": true,
"editor.formatOnType": true,
"files.trimTrailingWhitespace": true,
"terminal.integrated.defaultProfile.linux": "zsh",
"terminal.integrated.profiles.linux": {
"zsh": {
"path": "/usr/bin/zsh"
}
}
}
}

5
.devcontainer/setup.sh Executable file
View File

@@ -0,0 +1,5 @@
#!/bin/bash
# Install pre-commit
sudo apt install -y pre-commit
pre-commit install

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 MrRaph_
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1 +1,7 @@
# hassio-addons
# MrRaph_'s custom Home Assistant addons
This repository defines a few custom addons for Home Assistant. Notably:
- [Kresus](./kresus): sets-up a [Kresus](https://kresus.org/) instance which is a personal finances management software.
These addons are published under [MIT license](./LICENSE).

37
kresus/CHANGELOG.md Normal file
View File

@@ -0,0 +1,37 @@
## 0.6.2
- Update woob dependencies install method
## 0.6.1
- Remove support for i386 architecture
## 0.6.0
- Bump Kresus to 0.19.0
## 0.5.1
- Fix AppArmor profile
## 0.5.0
- Attempt using `alpine:edge` as base image
## 0.4.2
- Fix AppArmor profile
## 0.4.1
- Reinstall py3-lxml by default
## 0.4.0
- Remove python dependencies from Dockerfile to prevent
incompatibility with woob requirements
## 0.3.0
- Use `s6-setuidgid` instead of `su-exec`
- Set AppArmor in complain mode

54
kresus/DOCS.md Normal file
View File

@@ -0,0 +1,54 @@
# Home Assistant Custom Add-on: Kresus
[Kresus](https://kresus.org/) is an open-source self-hostable Personal Finance Manager.
It automatically retrieves your daily bank transactions, lets you categorize them and manage your monthly budgets.
It relies on [woob](https://gitlab.com/woob/woob) to fetch data from your bank website.
## Installation
Kresus requires a PostgreSQL database to store data.
If you do not already have a PostgreSQL database installed, you may consider the [PostgreSQL addon](https://github.com/ezlo-picori/hassio-addons/tree/main/postgres).
The installation of Kresus add-on is quite straightforward and do not differ from the standard installation process for Home-Assistant add-ons:
1. Click the Home Assistant My button below to open the add-on on your Home
Assistant instance.
[![Open this add-on in your Home Assistant instance.][addon-badge]][addon]
1. Click the "Install" button to install the add-on.
1. Start the "Kresus" add-on.
1. Check the logs of the "Kresus" add-on to see if everything
went well. A working installation should indicate `Server is ready, let's start the show!`
1. Click the "OPEN WEB UI" button to open Kresus UI.
## Configuration
The only configuration configurations required are the database connection options.
If you used the [PostgreSQL add-on](https://github.com/ezlo-picori/hassio-addons/tree/main/postgres) configured with following options:
```yaml
databases:
- kresus_db
logins:
- password: CHANGEME_kr3sus-p@ssword_CHANGEME
username: kresus_user
rights:
- database: kresus_db
username: kresus_user
```
then you may configure kresus with these options:
```yaml
postgres_hostname: homeassistant.local
postgres_port: 5432
postgres_user: kresus_user
postgres_password: CHANGEME_kr3sus-p@ssword_CHANGEME
postgres_database: kresus_db
```
## Authors & contributors
The original setup of this repository is by [Ezlo Picori](https://github.com/ezlo-picori).

108
kresus/Dockerfile Normal file
View File

@@ -0,0 +1,108 @@
ARG BUILD_FROM
FROM $BUILD_FROM
# Default ENV
ENV \
LANG="C.UTF-8" \
S6_BEHAVIOUR_IF_STAGE2_FAILS=2 \
S6_CMD_WAIT_FOR_SERVICES_MAXTIME=0 \
S6_CMD_WAIT_FOR_SERVICES=1 \
S6_SERVICES_READYTIME=50
# Set shell
SHELL ["/bin/ash", "-o", "pipefail", "-c"]
# Build Args
ARG \
BASHIO_VERSION \
TEMPIO_VERSION \
S6_OVERLAY_VERSION \
JEMALLOC_VERSION \
QEMU_CPU
# Base system
WORKDIR /usr/src
ARG BUILD_ARCH
RUN \
set -x \
&& apk add --no-cache \
bash \
bind-tools \
ca-certificates \
curl \
jq \
tzdata \
xz \
\
&& apk add --no-cache --virtual .build-deps \
build-base \
autoconf \
git \
\
&& if [ "${BUILD_ARCH}" = "armv7" ]; then \
export S6_ARCH="arm"; \
elif [ "${BUILD_ARCH}" = "i386" ]; then \
export S6_ARCH="i686"; \
elif [ "${BUILD_ARCH}" = "amd64" ]; then \
export S6_ARCH="x86_64"; \
else \
export S6_ARCH="${BUILD_ARCH}"; \
fi \
\
&& curl -L -f -s "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-${S6_ARCH}.tar.xz" \
| tar Jxvf - -C / \
&& curl -L -f -s "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz" \
| tar Jxvf - -C / \
&& curl -L -f -s "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-arch.tar.xz" \
| tar Jxvf - -C / \
&& curl -L -f -s "https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-symlinks-noarch.tar.xz" \
| tar Jxvf - -C / \
&& mkdir -p /etc/fix-attrs.d \
&& mkdir -p /etc/services.d \
\
&& git clone "https://github.com/jemalloc/jemalloc" /usr/src/jemalloc \
&& cd /usr/src/jemalloc \
&& git checkout ${JEMALLOC_VERSION} \
&& ./autogen.sh \
&& make -j "$(nproc)" \
&& make install \
\
&& mkdir -p /usr/src/bashio \
&& curl -L -f -s "https://github.com/hassio-addons/bashio/archive/v${BASHIO_VERSION}.tar.gz" \
| tar -xzf - --strip 1 -C /usr/src/bashio \
&& mv /usr/src/bashio/lib /usr/lib/bashio \
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
\
&& curl -L -f -s -o /usr/bin/tempio \
"https://github.com/home-assistant/tempio/releases/download/${TEMPIO_VERSION}/tempio_${BUILD_ARCH}" \
&& chmod a+x /usr/bin/tempio \
\
&& apk del .build-deps \
&& rm -rf /usr/src/*
# S6-Overlay
WORKDIR /
ENTRYPOINT ["/init"]
# Copy root filesystem
COPY rootfs /
# Setup base
RUN apk add --no-cache \
gcc g++ gpgv jpeg-dev pwgen python3-dev py3-lxml py3-pip \
py3-wheel make nodejs npm zlib-dev && \
pip install -r /requirements.txt && \
npm install --omit=dev -g kresus@0.19.0 && \
addgroup kresus && \
adduser -G kresus -D -H kresus && \
mkdir -p /woob && \
chown kresus:kresus /woob && \
chown -R kresus:kresus /etc/kresus && \
chmod 0400 /etc/kresus/config.ini && \
chmod 0755 /etc/kresus
ENV KRESUS_DIR="/data/kresus"
ENV KRESUS_USER="kresus"
WORKDIR /

25
kresus/README.md Normal file
View File

@@ -0,0 +1,25 @@
# Home Assistant Add-on: Kresus
Open source personal accounting solution.
![Supports aarch64 Architecture][aarch64-shield]
![Supports amd64 Architecture][amd64-shield]
![Supports armhf Architecture][armhf-shield]
![Supports armv7 Architecture][armv7-shield]
![Supports i386 Architecture][i386-shield]
## About
[Kresus][kresus] is a free solution for personal accounting management.
It automatically retrieves your daily bank transactions, lets you categorize them
and manage your monthly budgets.
![Kresus Preview][screenshot]
[aarch64-shield]: https://img.shields.io/badge/aarch64-yes-green.svg
[amd64-shield]: https://img.shields.io/badge/amd64-yes-green.svg
[armhf-shield]: https://img.shields.io/badge/armhf-yes-green.svg
[armv7-shield]: https://img.shields.io/badge/armv7-yes-green.svg
[i386-shield]: https://img.shields.io/badge/i386-no-red.svg
[screenshot]: https://kresus.org/images/pages/view-all-accounts.png
[kresus]: https://kresus.org/

72
kresus/apparmor.txt Normal file
View File

@@ -0,0 +1,72 @@
include <tunables/global>
profile kresus flags=(attach_disconnected,mediate_deleted) {
#include <abstractions/base>
# Capabilities
file,
signal (send) set=(kill,term,int,hup,cont),
capability chown,
capability fowner,
capability kill,
# S6-Overlay
/init ix,
/bin/** ix,
/usr/bin/** ix,
/run/{s6,s6-rc*,service}/** ix,
/package/** ix,
/command/** ix,
/etc/services.d/** rwix,
/etc/cont-init.d/** rwix,
/etc/cont-finish.d/** rwix,
/run/{,**} rwk,
/dev/tty rw,
# Access to options.json and other files within your addon
/data/options.json r,
/data/kresus/{,**} rw,
/package/admin/s6-2.11.2.0/command/s6-applyuidgid cx -> s6setuidgid,
profile s6setuidgid flags=(attach_disconnected,mediate_deleted) {
#include <abstractions/base>
capability setuid,
capability setgid,
signal (receive) set=("cont","kill","term"),
# Generic accesses
/package/admin/s6-2.11.2.0/command/s6-applyuidgid rm,
/bin/{bash,busybox} ix,
/dev/{null,tty} rw,
/etc/{group,hosts,os-release,passwd,resolv.conf,ssl/**} r,
/package/admin/** rmix,
/run/s6/container_environment** r,
/tmp/.bashio/{,**} rw,
/usr/bin/{curl,jq,ssl_client} rix,
/usr/lib/bashio/bashio ix,
/lib/** rmix,
/tmp/pip-install-** rw,
# Kresus specific accesses
/data/kresus_salt r,
/data/kresus/{,**} rw,
/etc/kresus/config.ini r,
/woob/ r,
/woob/** lrw,
/woob/.py-deps/** lrwix,
/usr/bin/{,**} r,
/usr/bin/git ix,
/usr/bin/gpgv ix,
/usr/bin/node ix,
/usr/bin/python3.11 ix,
/usr/bin/pip3 rix,
/usr/libexec/git-core/** ix,
/usr/libexec/kresus/** rix,
/usr/local/lib/node_modules/** rm,
/usr/local/lib/node_modules/kresus/bin/kresus.js rix,
/usr/share/** r,
}
}

18
kresus/build.yaml Normal file
View File

@@ -0,0 +1,18 @@
build_from:
aarch64: "arm64v8/alpine:edge"
armv7: "arm32v7/alpine:edge"
armhf: "arm32v6/alpine:edge"
amd64: "alpine:edge"
labels:
org.opencontainers.image.title: "Home Assistant Add-on: Kresus"
org.opencontainers.image.description: "Kresus addon"
org.opencontainers.image.source: "https://github.com/ezlo-picori/hassio-addons"
org.opencontainers.image.licenses: "MIT License"
io.hass.base.name: alpine
codenotary:
signer: ezlo@protonmail.com
args:
BASHIO_VERSION: 0.14.3
TEMPIO_VERSION: 2021.09.0
S6_OVERLAY_VERSION: 3.1.3.0
JEMALLOC_VERSION: 5.3.0

33
kresus/config.yaml Normal file
View File

@@ -0,0 +1,33 @@
name: Kresus
version: "0.6.2"
slug: kresus
codenotary: ezlo@protonmail.com
url: "https://github.com/ezlo-picori/hassio-addons/tree/main/kresus"
description: Open source personal accounting management
arch:
- armhf
- armv7
- aarch64
- amd64
image: "ghcr.io/ezlo-picori/haos-addon-kresus-{arch}"
init: false
options:
postgres_hostname: homeassistant.local
postgres_port: 5432
postgres_user: kresus
postgres_password: null
postgres_database: kresus
panel_icon: mdi:piggy-bank-outline
ports:
9876/tcp: 9876
ports_description:
9876/tcp: "The port to access kresus web server."
schema:
postgres_hostname: str
postgres_port: int
postgres_user: str
postgres_password: password
postgres_database: str
http_basicauth: str?
startup: system
timeout: 20

BIN
kresus/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
kresus/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

@@ -0,0 +1,270 @@
; Hi there! This is the configuration file for
; Kresus. Please make sure to read all the options before setting up
; Kresus for the first time.
;
[kresus]
; This is where Kresus stores additional data, as the latest bank
; scrapping modules. It should be writeable by the user which launches
; the Kresus executable.
; Can be removed; defaults to HOME_DIR/.kresus.
; Overriden by the KRESUS_DIR environment variable, if it's set.
; Example:
; datadir=/home/ben/.kresus
datadir=
; A user id obtained from using the "kresus create-user" command.
; This allows sharing a single database with several users. If your
; instance is only planned to host a single user, you can keep it
; disabled, and Kresus will know how to automatically generate a new
; user.
; Overriden by the KRESUS_USER_ID environment variable, if it's set.
; Example:
; userid=1
userid=
; This is the port that Kresus will run on. It is recommended not
; to expose it on port 80 directly but to use a reverse-proxy
; configuration like Nginx, Caddy or Apache.
; Can be removed; defaults to 9876.
; Overriden by the PORT environment variable, if it's set.
; Example:
; port=9876
port=
; The host on which the Kresus server will listen to.
; Can be removed; defaults to 127.0.0.1.
; Overriden by the HOST environment variable, if it's set.
; Example:
; host=127.0.0.1
host=
; The executable version of Python that is going to get used when
; interacting with Python scripts. This can be python or python3.
; Can be removed; defaults to python3.
; Overriden by the KRESUS_PYTHON_EXEC environment variable, if it's set.
; Example:
; python_exec=python3
python_exec=
; The directory prefix in the URL, if Kresus is to be served from a
; subdirectory. For instance, if your website is hosted at example.com
; and the url prefix is "money", then Kresus will be reachable at
; example.com/money. By default, it's '', meaning that Kresus has its own
; subdomain.
; Can be removed; defaults to "".
; Overriden by the KRESUS_URL_PREFIX environment variable, if it's set.
; Example:
; url_prefix=/money
url_prefix=
; A salt value used in encryption algorithms (used for instance to
; encrypt/decrypt exports). It should be a random string value with
; at least 16 characters if you decide to provide it.
; Overriden by the KRESUS_SALT environment variable, if it's set.
; Example:
; salt=gj4J89fkjf4h29aDi0f{}fu4389sejk`9osk`
salt=
; Set this to true if you want to use this instance only in demo
; mode, and to never allow users to link their personal accounts.
;
; WARNING! Switching this on and off may trigger data loss. Note that it
; is still possible to try Kresus in demo mode, even if this is not set
; to true. Setting this to true will *force* demo mode, and prevent users
; from leaving this mode.
; Can be removed; defaults to false.
; Overriden by the KRESUS_FORCE_DEMO_MODE environment variable, if it's set.
; Example:
; force_demo_mode=true
force_demo_mode=
; If set to a string, will enable HTTP Basic Auth, by splitting the
; string on a colon, i.e. "<username>:<passwd>"
; Overriden by the KRESUS_AUTH environment variable, if it's set.
; Example:
; auth=foo:bar
auth=
[woob]
; The directory in which Woob core is stored. If empty, indicates
; that woob is already in the PYTHON_PATH (e.g. installed at the global
; level)
; Overriden by the KRESUS_WOOB_DIR environment variable, if it's set.
; Example:
; srcdir=/home/ben/code/woob
srcdir=
; Path to a file containing a valid Woob's source list directory.
; If empty (the default), indicates that Kresus will generate its own
; source list file and will store it in
; KRESUS_DIR/woob-data/sources.list.
; Overriden by the KRESUS_WOOB_SOURCES_LIST environment variable, if it's set.
; Example:
; sources_list=/home/ben/code/woob/sources.list
sources_list=
[email]
; The transport method you want to use. Can be either:
; * "sendmail": relies on sendmail executable to be available on your
; system and only sendmail-specific parameters are used,
;
; * "smtp": you should provide proper SMTP credentials to use, in the
; dedicated configuration entries.
;
; If empty, no emails will be sent by Kresus.
; Overriden by the KRESUS_EMAIL_TRANSPORT environment variable, if it's set.
; Example:
; transport=smtp
transport=
; The path to the sendmail executable to use. If empty, indicates
; that the default sendmail executable will be used.
; Overriden by the KRESUS_EMAIL_SENDMAIL_BIN environment variable, if it's set.
; Example:
; sendmail_bin=/usr/bin/sendmail
sendmail_bin=
; The email address from which email alerts will be sent. Make sure
; that your domain DNS is correctly configured and that you've done
; what's needed to prevent email alerts from landing in the spam folder.
; Overriden by the KRESUS_EMAIL_FROM environment variable, if it's set.
; Example:
; from=kresus@domain.tld
from=
; The network address (ipv4, ipv6 or FQDN) of the SMTP server.
; Overriden by the KRESUS_EMAIL_HOST environment variable, if it's set.
; Example:
; host=mail.domain.tld
host=
; The port to which the SMTP server listens. Default values tend to
; be: 25 (server to server), or 587 (clients to server), or 465
; (nonstandard).
; Overriden by the KRESUS_EMAIL_PORT environment variable, if it's set.
; Example:
; port=465
port=
; The username used during authentication to the SMTP server. If
; empty, indicates an anonymous connection will be used.
; Overriden by the KRESUS_EMAIL_USER environment variable, if it's set.
; Example:
; user=login
user=
; The password used during authentication to the SMTP server. If
; empty, indicates no password will be used.
; Overriden by the KRESUS_EMAIL_PASSWORD environment variable, if it's set.
; Example:
; password=hunter2
password=
; If set to true, will force using a TLS connection. By default,
; emails are sent with STARTTLS, i.e. using TLS if available.
; Can be removed; defaults to false.
; Overriden by the KRESUS_EMAIL_FORCE_TLS environment variable, if it's set.
; Example:
; force_tls=false
force_tls=
; If set to false, will allow self-signed TLS certificates.
; Can be removed; defaults to true.
; Overriden by the KRESUS_EMAIL_REJECT_UNAUTHORIZED_TLS environment variable, if it's set.
; Example:
; reject_unauthorized_tls=true
reject_unauthorized_tls=
[notifications]
; The baseurl from which apprise-api will be called for
; notifications to be sent.
; See https://github.com/caronc/apprise-api#installation for
; installation
; Overriden by the KRESUS_APPRISE_API_BASE_URL environment variable, if it's set.
; Example:
; appriseApiBaseUrl=http://localhost:8000/
appriseApiBaseUrl=
[logs]
; The path to the log file to use. If empty, defaults to kresus.log
; in datadir.
; Overriden by the KRESUS_LOG_FILE environment variable, if it's set.
; Example:
; log_file=/var/log/kresus.log
log_file=
[db]
; Database type supported by Kresus, to choose among:
; - postgres
; - sqlite
;
; It must be set by the user. PostgreSQL is recommended and strongly supported; your experience with other databases might vary.
;
; Note using sqlite is *strongly discouraged* because it can't properly handle certain kinds of database migrations. It is only intended for development purposes.
; Overriden by the KRESUS_DB_TYPE environment variable, if it's set.
; Example:
; type=sqlite
type=
; Logging level for the SQL queries. Possible values are:
;
; - all: will log every SQL query, including queries causing errors.
; - error (default value): will only log SQL queries resulting in errors. This is useful for debugging purposes.
; - none: nothing will be logged.
; Can be removed; defaults to error.
; Overriden by the KRESUS_DB_LOG environment variable, if it's set.
; Example:
; log=error
log=
; Path to the sqlite database file. Make sure that the user running
; Kresus has the right permissions to write into this file. Required only for
; sqlite.
; Overriden by the KRESUS_DB_SQLITE_PATH environment variable, if it's set.
; Example:
; sqlite_path=/tmp/dev.sqlite
sqlite_path=
; Path to a directory containing a Unix socket to connect to the
; database, or host address of the database server. Required for postgres.
;
; If using a Unix socket, the socket file's name will be inferred from the
; standard postgres name and the port number.
; Can be removed; defaults to localhost for postgres.
; Overriden by the KRESUS_DB_HOST environment variable, if it's set.
; Example:
; host=localhost
host=
; Port of the database server. Required for postgres, even when
; using a Unix socket (the port is used to compute the socket's file name).
; Can be removed; defaults to 5432 for postgres.
; Overriden by the KRESUS_DB_PORT environment variable, if it's set.
; Example:
; port=5432
port=
; Username to connect to the database server. Required for postgres.
; Overriden by the KRESUS_DB_USERNAME environment variable, if it's set.
; Example:
; username=benjamin
username=
; Password to connect to the database server. Required for postgres.
; Overriden by the KRESUS_DB_PASSWORD environment variable, if it's set.
; Example:
; password=hunter2
password=
; Database name to use. Required for postgres.
; Can be removed; defaults to kresus.
; Overriden by the KRESUS_DB_NAME environment variable, if it's set.
; Example:
; name=kresus
name=

View File

@@ -0,0 +1,15 @@
#!/usr/bin/env bashio
# ==============================================================================
# Take down the S6 supervision tree when example fails
# s6-overlay docs: https://github.com/just-containers/s6-overlay
# ==============================================================================
declare APP_EXIT_CODE=${1}
if [[ "${APP_EXIT_CODE}" -ne 0 ]] && [[ "${APP_EXIT_CODE}" -ne 256 ]]; then
bashio::log.warning "Halt add-on with exit code ${APP_EXIT_CODE}"
echo "${APP_EXIT_CODE}" > /run/s6-linux-init-container-results/exitcode
exec /run/s6/basedir/bin/halt
fi
bashio::log.info "Service restart after closing"

View File

@@ -0,0 +1,25 @@
#!/usr/bin/with-contenv bashio
# ==============================================================================
# Init data directory
# ==============================================================================
if ! bashio::fs.directory_exists "${KRESUS_DIR}"; then
bashio::log.info "Create data directory \"${KRESUS_DIR}\""
mkdir "${KRESUS_DIR}"
chown "${KRESUS_USER}:${KRESUS_USER}" "${KRESUS_DIR}"
chmod 0700 "${KRESUS_DIR}"
fi
# ==============================================================================
# Generate Kresus salt once
# ==============================================================================
if ! bashio::fs.file_exists "/data/kresus_salt"; then
pwgen 32 1 > /data/kresus_salt
chown "${KRESUS_USER}:${KRESUS_USER}" /data/kresus_salt
chmod 400 /data/kresus_salt
fi
# ==============================================================================
# Start service as unprivileged user
# ==============================================================================
exec s6-setuidgid "${KRESUS_USER}" /usr/libexec/kresus/start.sh

View File

@@ -0,0 +1 @@
python-jose

View File

@@ -0,0 +1,55 @@
#!/usr/bin/with-contenv bashio
WOOB_DIR="/woob"
KRESUS_INI_FILE="/etc/kresus/config.ini"
# ==============================================================================
# Pull latest Woob version
# ==============================================================================
cd "${WOOB_DIR}" || bashio::exit.nok
bashio::log.info "Clear woob install"
rm -rf {,.[!.],..?}*
bashio::log.info "Add clean woob install"
wget -qO- https://gitlab.com/woob/woob/-/archive/master/woob-master.tar.gz | tar xz --strip-components=1
bashio::log.info "Updating Woob dependencies..."
pip3 install --no-cache-dir --prefix .py-deps .
PYTHONPATH=$(python3 -c "import sys, os; print(os.sep.join(['$(pwd)', '.py-deps', 'lib', f'python{sys.version_info.major}.{sys.version_info.minor}', 'site-packages']))")
export PYTHONPATH
bashio::log.info "Done updating Woob dependencies."
# ==============================================================================
# Set-up environment variables
# ==============================================================================
# Basic Kresus options
export PORT=9876
export HOST=0.0.0.0
export KRESUS_PYTHON_EXEC=python3
export KRESUS_WOOB_DIR="${WOOB_DIR}"
KRESUS_SALT="$(cat /data/kresus_salt)"
export KRESUS_SALT
# Kresus Basic auth
if bashio::config.has_value 'http_basicauth'; then
KRESUS_AUTH="$(bashio::config 'http_basicauth')"
export KRESUS_AUTH
fi
# Kresus database
export KRESUS_DB_TYPE="postgres"
KRESUS_DB_HOST="$(bashio::config 'postgres_hostname')"
KRESUS_DB_PORT="$(bashio::config 'postgres_port')"
KRESUS_DB_USERNAME="$(bashio::config 'postgres_user')"
KRESUS_DB_PASSWORD="$(bashio::config 'postgres_password')"
KRESUS_DB_NAME="$(bashio::config 'postgres_database')"
export KRESUS_DB_HOST KRESUS_DB_PORT KRESUS_DB_USERNAME \
KRESUS_DB_PASSWORD KRESUS_DB_NAME
# ==============================================================================
# Start Kresus
# ==============================================================================
kresus -c ${KRESUS_INI_FILE}

View File

@@ -0,0 +1,27 @@
configuration:
postgres_hostname:
name: "DB hostname"
description: >-
Hostname of the PostgreSQL database.
postgres_port:
name: "DB port"
description: >-
Port of the PostgreSQL database.
postgres_user:
name: "DB user"
description: >-
User to connect to the database.
postgres_password:
name: "DB password"
description: >-
Password of the database user.
postgres_database:
name: "DB database"
description: >-
Name of the kresus database.
http_basicauth:
name: "Authentication"
description: >-
Logins for HTTP basic auth authentication ("login:passwd" format, optional).
network:
9876/tcp: Port to access kresus web server.

3
repository.yaml Normal file
View File

@@ -0,0 +1,3 @@
name: MrRaph_'s custom Home Assistant addons
url: "https://github.com/MrRaph/hassio-addons"
maintainer: MrRaph_