mirror of
https://github.com/YunoHost-Apps/thelounge_ynh.git
synced 2024-09-03 20:35:54 +02:00
commit
33ee4dedd2
21 changed files with 1041 additions and 588 deletions
55
.github/ISSUE_TEMPLATE.md
vendored
Normal file
55
.github/ISSUE_TEMPLATE.md
vendored
Normal file
|
@ -0,0 +1,55 @@
|
|||
---
|
||||
name: Bug report
|
||||
about: When creating a bug report, please use the following template to provide all the relevant information and help debugging efficiently.
|
||||
|
||||
---
|
||||
|
||||
**How to post a meaningful bug report**
|
||||
1. *Read this whole template first.*
|
||||
2. *Determine if you are on the right place:*
|
||||
- *If you were performing an action on the app from the webadmin or the CLI (install, update, backup, restore, change_url...), you are on the right place!*
|
||||
- *Otherwise, the issue may be due to the app itself. Refer to its documentation or repository for help.*
|
||||
- *When in doubt, post here and we will figure it out together.*
|
||||
3. *Delete the italic comments as you write over them below, and remove this guide.*
|
||||
---
|
||||
|
||||
### Describe the bug
|
||||
|
||||
*A clear and concise description of what the bug is.*
|
||||
|
||||
### Context
|
||||
|
||||
- Hardware: *VPS bought online / Old laptop or computer / Raspberry Pi at home / Internet Cube with VPN / Other ARM board / ...*
|
||||
- YunoHost version: x.x.x
|
||||
- I have access to my server: *Through SSH | through the webadmin | direct access via keyboard / screen | ...*
|
||||
- Are you in a special context or did you perform some particular tweaking on your YunoHost instance?: *no / yes*
|
||||
- If yes, please explain:
|
||||
- Using, or trying to install package version/branch:
|
||||
- If upgrading, current package version: *can be found in the admin, or with `yunohost app info $app_id`*
|
||||
|
||||
### Steps to reproduce
|
||||
|
||||
- *If you performed a command from the CLI, the command itself is enough. For example:*
|
||||
```sh
|
||||
sudo yunohost app install the_app
|
||||
```
|
||||
- *If you used the webadmin, please perform the equivalent command from the CLI first.*
|
||||
- *If the error occurs in your browser, explain what you did:*
|
||||
1. *Go to '...'*
|
||||
2. *Click on '...'*
|
||||
3. *Scroll down to '...'*
|
||||
4. *See error*
|
||||
|
||||
### Expected behavior
|
||||
|
||||
*A clear and concise description of what you expected to happen. You can remove this section if the command above is enough to understand your intent.*
|
||||
|
||||
### Logs
|
||||
|
||||
*When an operation fails, YunoHost provides a simple way to share the logs.*
|
||||
- *In the webadmin, the error message contains a link to the relevant log page. On that page, you will be able to 'Share with Yunopaste'. If you missed it, the logs of previous operations are also available under Tools > Logs.*
|
||||
- *In command line, the command to share the logs is displayed at the end of the operation and looks like `yunohost log display [log name] --share`. If you missed it, you can find the log ID of a previous operation using `yunohost log list`.*
|
||||
|
||||
*After sharing the log, please copypaste directly the link provided by YunoHost (to help readability, no need to copypaste the entire content of the log here, just the link is enough...)*
|
||||
|
||||
*If applicable and useful, add screenshots to help explain your problem.*
|
16
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
16
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
## Problem
|
||||
|
||||
- *Description of why you made this PR*
|
||||
|
||||
## Solution
|
||||
|
||||
- *And how do you fix that problem*
|
||||
|
||||
## PR Status
|
||||
|
||||
- [ ] Code finished and ready to be reviewed/tested
|
||||
- [ ] The fix/enhancement were manually tested (if applicable)
|
||||
|
||||
## Automatic tests
|
||||
|
||||
Automatic tests can be triggered on https://ci-apps-dev.yunohost.org/ *after creating the PR*, by commenting "!testme", "!gogogadgetoci" or "By the power of systemd, I invoke The Great App CI to test this Pull Request!". (N.B. : for this to work you need to be a member of the Yunohost-Apps organization)
|
|
@ -1,7 +0,0 @@
|
|||
test:
|
||||
script:
|
||||
- apt-get update
|
||||
- apt-get install -yy python git
|
||||
- git clone https://github.com/YunoHost/package_linter
|
||||
- pip install report
|
||||
- python package_linter/package_linter.py .
|
|
@ -1,7 +0,0 @@
|
|||
language: python
|
||||
install: ""
|
||||
python:
|
||||
- "3.5"
|
||||
script:
|
||||
- git clone https://github.com/YunoHost/package_linter
|
||||
- python package_linter/package_linter.py .
|
62
README.md
62
README.md
|
@ -1,3 +1,8 @@
|
|||
<!--
|
||||
N.B.: This README was automatically generated by https://github.com/YunoHost/apps/tree/master/tools/README-generator
|
||||
It shall NOT be edited by hand.
|
||||
-->
|
||||
|
||||
# The Lounge for YunoHost
|
||||
|
||||
[![Integration level](https://dash.yunohost.org/integration/thelounge.svg)](https://dash.yunohost.org/appci/app/thelounge) ![](https://ci-apps.yunohost.org/ci/badges/thelounge.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/thelounge.maintain.svg)
|
||||
|
@ -5,56 +10,33 @@
|
|||
|
||||
*[Lire ce readme en français.](./README_fr.md)*
|
||||
|
||||
> *This package allow you to install The Lounge quickly and simply on a YunoHost server.
|
||||
If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.*
|
||||
> *This package allows you to install The Lounge quickly and simply on a YunoHost server.
|
||||
If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.*
|
||||
|
||||
## Overview
|
||||
|
||||
The Lounge is a self-hosted IRC client.
|
||||
Web IRC client
|
||||
|
||||
**Shipped version:** 4.2.0
|
||||
**Shipped version:** 4.2.0~ynh3
|
||||
|
||||
**Demo:** https://demo.thelounge.chat/
|
||||
|
||||
## Screenshots
|
||||
|
||||
![](https://raw.githubusercontent.com/thelounge/thelounge.github.io/master/img/thelounge-screenshot.png)
|
||||
![](./doc/screenshots/thelounge-screenshot.png)
|
||||
|
||||
## Demo
|
||||
## Documentation and resources
|
||||
|
||||
* [Official demo](https://demo.thelounge.chat/)
|
||||
* Official app website: https://example.com
|
||||
* Official user documentation: https://yunohost.org/en/app_thelounge
|
||||
* Official admin documentation: https://thelounge.chat/docs
|
||||
* Upstream app code repository: https://github.com/thelounge/thelounge
|
||||
* YunoHost documentation for this app: https://yunohost.org/app_thelounge
|
||||
* Report a bug: https://github.com/YunoHost-Apps/thelounge_ynh/issues
|
||||
|
||||
## Configuration
|
||||
## Developer info
|
||||
|
||||
How to configure this app: by an admin panel.
|
||||
|
||||
## Documentation
|
||||
|
||||
* Official documentation: https://thelounge.chat/docs
|
||||
* YunoHost documentation: https://yunohost.org/#/app_thelounge
|
||||
|
||||
## YunoHost specific features
|
||||
|
||||
#### Multi-users support
|
||||
|
||||
* Are LDAP supported? **Yes**
|
||||
* Can the app be used by multiple users? **Yes**
|
||||
|
||||
#### Supported architectures
|
||||
|
||||
* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/thelounge%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/thelounge/)
|
||||
* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/thelounge%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/thelounge/)
|
||||
|
||||
## Links
|
||||
|
||||
* Report a bug: https://github.com/YunoHost-Apps/thelounge_ynh/issues
|
||||
* App website: https://thelounge.chat/
|
||||
* Upstream app repository: https://github.com/thelounge/thelounge
|
||||
* YunoHost website: https://yunohost.org/
|
||||
|
||||
---
|
||||
|
||||
## Developers info
|
||||
|
||||
Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/thelounge_ynh/tree/testing).
|
||||
Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/thelounge_ynh/tree/testing).
|
||||
|
||||
To try the testing branch, please proceed like that.
|
||||
```
|
||||
|
@ -62,3 +44,5 @@ sudo yunohost app install https://github.com/YunoHost-Apps/thelounge_ynh/tree/te
|
|||
or
|
||||
sudo yunohost app upgrade thelounge -u https://github.com/YunoHost-Apps/thelounge_ynh/tree/testing --debug
|
||||
```
|
||||
|
||||
**More info regarding app packaging:** https://yunohost.org/packaging_apps
|
55
README_fr.md
55
README_fr.md
|
@ -1,55 +1,34 @@
|
|||
# The Lounge pour YunoHost
|
||||
|
||||
[![Niveau d’intégration](https://dash.yunohost.org/integration/thelounge.svg)](https://dash.yunohost.org/appci/app/thelounge) ![](https://ci-apps.yunohost.org/ci/badges/thelounge.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/thelounge.maintain.svg)
|
||||
[![Niveau d'intégration](https://dash.yunohost.org/integration/thelounge.svg)](https://dash.yunohost.org/appci/app/thelounge) ![](https://ci-apps.yunohost.org/ci/badges/thelounge.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/thelounge.maintain.svg)
|
||||
[![Installer The Lounge avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=thelounge)
|
||||
|
||||
*[Read this readme in english.](./README.md)*
|
||||
*[Lire ce readme en français.](./README_fr.md)*
|
||||
|
||||
> *Ce package vous permet d'installer The Lounge rapidement et simplement sur un serveur YunoHost.
|
||||
Si vous n’avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l’installer et en profiter.*
|
||||
Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.*
|
||||
|
||||
## Vue d’ensemble
|
||||
The Lounge est un client Web IRC auto-hébergé.
|
||||
## Vue d'ensemble
|
||||
|
||||
**Version incluse :** 4.2.0
|
||||
Client Web IRC
|
||||
|
||||
## Captures d’écran
|
||||
**Version incluse :** 4.2.0~ynh3
|
||||
|
||||
![](https://raw.githubusercontent.com/thelounge/thelounge.github.io/master/img/thelounge-screenshot.png)
|
||||
**Démo :** https://demo.thelounge.chat/
|
||||
|
||||
## Démo
|
||||
## Captures d'écran
|
||||
|
||||
* [Démo officielle](https://demo.thelounge.chat/)
|
||||
![](./doc/screenshots/thelounge-screenshot.png)
|
||||
|
||||
## Configuration
|
||||
## Documentations et ressources
|
||||
|
||||
Comment configurer cette application : via le panneau d’administration.
|
||||
|
||||
## Documentation
|
||||
|
||||
* Documentation officielle : https://thelounge.chat/docs
|
||||
* Documentation YunoHost : https://yunohost.org/#/app_thelounge_fr
|
||||
|
||||
## Caractéristiques spécifiques YunoHost
|
||||
|
||||
#### Support multi-utilisateurs
|
||||
|
||||
* L’authentification LDAP est-elle prise en charge ? **Oui**
|
||||
* L’application peut-elle être utilisée par plusieurs utilisateurs ? **Oui**
|
||||
|
||||
#### Architectures supportées
|
||||
|
||||
* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/thelounge%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/thelounge/)
|
||||
* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/thelounge%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/thelounge/)
|
||||
|
||||
## Liens
|
||||
|
||||
* Signaler un bug : https://github.com/YunoHost-Apps/thelounge_ynh/issues
|
||||
* Site de l’application : https://thelounge.chat/
|
||||
* Dépôt de l’application principale : https://github.com/thelounge/thelounge
|
||||
* Site web YunoHost : https://yunohost.org/
|
||||
|
||||
---
|
||||
* Site officiel de l'app : https://example.com
|
||||
* Documentation officielle utilisateur : https://yunohost.org/en/app_thelounge
|
||||
* Documentation officielle de l'admin : https://thelounge.chat/docs
|
||||
* Dépôt de code officiel de l'app : https://github.com/thelounge/thelounge
|
||||
* Documentation YunoHost pour cette app : https://yunohost.org/app_thelounge
|
||||
* Signaler un bug : https://github.com/YunoHost-Apps/thelounge_ynh/issues
|
||||
|
||||
## Informations pour les développeurs
|
||||
|
||||
|
@ -61,3 +40,5 @@ sudo yunohost app install https://github.com/YunoHost-Apps/thelounge_ynh/tree/te
|
|||
ou
|
||||
sudo yunohost app upgrade thelounge -u https://github.com/YunoHost-Apps/thelounge_ynh/tree/testing --debug
|
||||
```
|
||||
|
||||
**Plus d'infos sur le packaging d'applications :** https://yunohost.org/packaging_apps
|
|
@ -1,15 +1,9 @@
|
|||
# See here for more informations
|
||||
# https://github.com/YunoHost/package_check#syntax-check_process-file
|
||||
|
||||
# Move this file from check_process.default to check_process when you have filled it.
|
||||
|
||||
;; Test complet
|
||||
; Manifest
|
||||
domain="domain.tld" (DOMAIN)
|
||||
path="/path" (PATH)
|
||||
is_public=1 (PUBLIC|public=1|private=0)
|
||||
password="pass"
|
||||
port="9000" (PORT)
|
||||
domain="domain.tld"
|
||||
path="/path"
|
||||
is_public=1
|
||||
password="password"
|
||||
; Checks
|
||||
pkg_linter=1
|
||||
setup_sub_dir=1
|
||||
|
@ -18,10 +12,9 @@
|
|||
setup_private=1
|
||||
setup_public=1
|
||||
upgrade=1
|
||||
upgrade=1 from_commit=bd00c8e3ce43563f33fde073cf36b997c348d05c
|
||||
#upgrade=1 from_commit=bd00c8e3ce43563f33fde073cf36b997c348d05c
|
||||
backup_restore=1
|
||||
multi_instance=0
|
||||
port_already_use=0
|
||||
change_url=1
|
||||
;;; Options
|
||||
Email=
|
||||
|
|
453
conf/config-dist.js
Normal file
453
conf/config-dist.js
Normal file
|
@ -0,0 +1,453 @@
|
|||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
//
|
||||
// Set the server mode.
|
||||
// Public servers does not require authentication.
|
||||
//
|
||||
// Set to 'false' to enable users.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
public: false,
|
||||
|
||||
//
|
||||
// IP address or hostname for the web server to listen on.
|
||||
// Setting this to undefined will listen on all interfaces.
|
||||
//
|
||||
// For UNIX domain sockets, use unix:/absolute/path/to/file.sock.
|
||||
//
|
||||
// @type string
|
||||
// @default undefined
|
||||
//
|
||||
host: undefined,
|
||||
|
||||
//
|
||||
// Set the port to listen on.
|
||||
//
|
||||
// @type int
|
||||
// @default 9000
|
||||
//
|
||||
port: __PORT__,
|
||||
|
||||
//
|
||||
// Set the local IP to bind to for outgoing connections. Leave to undefined
|
||||
// to let the operating system pick its preferred one.
|
||||
//
|
||||
// @type string
|
||||
// @default undefined
|
||||
//
|
||||
bind: undefined,
|
||||
|
||||
//
|
||||
// Sets whether the server is behind a reverse proxy and should honor the
|
||||
// X-Forwarded-For header or not.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
reverseProxy: true,
|
||||
|
||||
//
|
||||
// Set the default theme.
|
||||
// Find out how to add new themes at https://thelounge.github.io/docs/plugins/themes.html
|
||||
//
|
||||
// @type string
|
||||
// @default "example"
|
||||
//
|
||||
// theme: "example",
|
||||
|
||||
//
|
||||
// Prefetch URLs
|
||||
//
|
||||
// If enabled, The Lounge will try to load thumbnails and site descriptions from
|
||||
// URLs posted in channels.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
prefetch: true,
|
||||
|
||||
//
|
||||
// Store and proxy prefetched images and thumbnails.
|
||||
// This improves security and privacy by not exposing client IP address,
|
||||
// and always loading images from The Lounge instance and making all assets secure,
|
||||
// which in result fixes mixed content warnings.
|
||||
//
|
||||
// If storage is enabled, The Lounge will fetch and store images and thumbnails
|
||||
// in the `${THELOUNGE_HOME}/storage` folder.
|
||||
//
|
||||
// Images are deleted when they are no longer referenced by any message (controlled by maxHistory),
|
||||
// and the folder is cleaned up on every The Lounge restart.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
prefetchStorage: true,
|
||||
|
||||
//
|
||||
// Prefetch URLs Image Preview size limit
|
||||
//
|
||||
// If prefetch is enabled, The Lounge will only display content under the maximum size.
|
||||
// Specified value is in kilobytes. Default value is 2048 kilobytes.
|
||||
//
|
||||
// @type int
|
||||
// @default 2048
|
||||
//
|
||||
prefetchMaxImageSize: 2048,
|
||||
|
||||
//
|
||||
// Display network
|
||||
//
|
||||
// If set to false network settings will not be shown in the login form.
|
||||
//
|
||||
// @type boolean
|
||||
// @default true
|
||||
//
|
||||
displayNetwork: true,
|
||||
|
||||
//
|
||||
// Lock network
|
||||
//
|
||||
// If set to true, users will not be able to modify host, port and tls
|
||||
// settings and will be limited to the configured network.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
lockNetwork: false,
|
||||
|
||||
//
|
||||
// Hex IP
|
||||
//
|
||||
// If enabled, clients' username will be set to their IP encoded has hex.
|
||||
// This is done to share the real user IP address with the server for host masking purposes.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
useHexIp: false,
|
||||
|
||||
//
|
||||
// WEBIRC support
|
||||
//
|
||||
// If enabled, The Lounge will pass the connecting user's host and IP to the
|
||||
// IRC server. Note that this requires to obtain a password from the IRC network
|
||||
// The Lounge will be connecting to and generally involves a lot of trust from the
|
||||
// network you are connecting to.
|
||||
//
|
||||
// Format (standard): {"irc.example.net": "hunter1", "irc.example.org": "passw0rd"}
|
||||
// Format (function):
|
||||
// {"irc.example.net": function(client, args, trusted) {
|
||||
// // here, we return a webirc object fed directly to `irc-framework`
|
||||
// return {username: "thelounge", password: "hunter1", address: args.ip, hostname: "webirc/"+args.hostname};
|
||||
// }}
|
||||
//
|
||||
// @type string | function(client, args):object(webirc)
|
||||
// @default null
|
||||
webirc: null,
|
||||
|
||||
//
|
||||
// Message logging
|
||||
// Logging is also controlled per user individually (logs variable)
|
||||
// Leave the array empty to disable all logging globally
|
||||
//
|
||||
// text: Text file per network/channel in user folder
|
||||
// sqlite: Messages are stored in SQLite, this allows them to be reloaded on server restart
|
||||
//
|
||||
// @type array
|
||||
// @default ["sqlite", "text"]
|
||||
//
|
||||
messageStorage: ["sqlite"],
|
||||
|
||||
//
|
||||
// Log settings
|
||||
//
|
||||
// Logging has to be enabled per user. If enabled, logs will be stored in
|
||||
// the 'logs/<user>/<network>/' folder.
|
||||
//
|
||||
// @type object
|
||||
// @default {}
|
||||
//
|
||||
logs: {
|
||||
//
|
||||
// Timestamp format
|
||||
//
|
||||
// @type string
|
||||
// @default "YYYY-MM-DD HH:mm:ss"
|
||||
//
|
||||
format: "YYYY-MM-DD HH:mm:ss",
|
||||
|
||||
//
|
||||
// Timezone
|
||||
//
|
||||
// @type string
|
||||
// @default "UTC+00:00"
|
||||
//
|
||||
timezone: "UTC+00:00",
|
||||
},
|
||||
|
||||
//
|
||||
// Maximum number of history lines per channel
|
||||
//
|
||||
// Defines the maximum number of history lines that will be kept in
|
||||
// memory per channel/query, in order to reduce the memory usage of
|
||||
// the server. Setting this to -1 will keep unlimited amount.
|
||||
//
|
||||
// @type integer
|
||||
// @default 10000
|
||||
maxHistory: 10000,
|
||||
|
||||
//
|
||||
// Default values for the 'Connect' form.
|
||||
//
|
||||
// @type object
|
||||
// @default {}
|
||||
//
|
||||
defaults: {
|
||||
//
|
||||
// Name
|
||||
//
|
||||
// @type string
|
||||
// @default "Freenode"
|
||||
//
|
||||
name: "Freenode",
|
||||
|
||||
//
|
||||
// Host
|
||||
//
|
||||
// @type string
|
||||
// @default "chat.freenode.net"
|
||||
//
|
||||
host: "chat.freenode.net",
|
||||
|
||||
//
|
||||
// Port
|
||||
//
|
||||
// @type int
|
||||
// @default 6697
|
||||
//
|
||||
port: 6697,
|
||||
|
||||
//
|
||||
// Password
|
||||
//
|
||||
// @type string
|
||||
// @default ""
|
||||
//
|
||||
password: "",
|
||||
|
||||
//
|
||||
// Enable TLS/SSL
|
||||
//
|
||||
// @type boolean
|
||||
// @default true
|
||||
//
|
||||
tls: true,
|
||||
|
||||
//
|
||||
// Enable certificate verification
|
||||
//
|
||||
// If true, the server certificate is verified against
|
||||
// the list of supplied CAs by your node.js installation.
|
||||
//
|
||||
// @type boolean
|
||||
// @default true
|
||||
//
|
||||
rejectUnauthorized: true,
|
||||
|
||||
//
|
||||
// Nick
|
||||
//
|
||||
// Percent sign (%) will be replaced into a random number from 0 to 9.
|
||||
// For example, Guest%%% will become Guest123 on page load.
|
||||
//
|
||||
// @type string
|
||||
// @default "thelounge%%"
|
||||
//
|
||||
nick: "thelounge%%",
|
||||
|
||||
//
|
||||
// Username
|
||||
//
|
||||
// @type string
|
||||
// @default "thelounge"
|
||||
//
|
||||
username: "thelounge",
|
||||
|
||||
//
|
||||
// Real Name
|
||||
//
|
||||
// @type string
|
||||
// @default "The Lounge User"
|
||||
//
|
||||
realname: "The Lounge User",
|
||||
|
||||
//
|
||||
// Channels
|
||||
// This is a comma-separated list.
|
||||
//
|
||||
// @type string
|
||||
// @default "#thelounge"
|
||||
//
|
||||
join: "#thelounge",
|
||||
},
|
||||
|
||||
//
|
||||
// Set socket.io transports
|
||||
//
|
||||
// @type array
|
||||
// @default ["polling", "websocket"]
|
||||
//
|
||||
transports: ["polling", "websocket"],
|
||||
|
||||
//
|
||||
// Run The Lounge using encrypted HTTP/2.
|
||||
// This will fallback to regular HTTPS if HTTP/2 is not supported.
|
||||
//
|
||||
// @type object
|
||||
// @default {}
|
||||
//
|
||||
https: {
|
||||
//
|
||||
// Enable HTTP/2 / HTTPS support.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
enable: false,
|
||||
|
||||
//
|
||||
// Path to the key.
|
||||
//
|
||||
// @type string
|
||||
// @example "sslcert/key.pem"
|
||||
// @default ""
|
||||
//
|
||||
key: "",
|
||||
|
||||
//
|
||||
// Path to the certificate.
|
||||
//
|
||||
// @type string
|
||||
// @example "sslcert/key-cert.pem"
|
||||
// @default ""
|
||||
//
|
||||
certificate: "",
|
||||
|
||||
//
|
||||
// Path to the CA bundle.
|
||||
//
|
||||
// @type string
|
||||
// @example "sslcert/bundle.pem"
|
||||
// @default ""
|
||||
//
|
||||
ca: "",
|
||||
},
|
||||
|
||||
//
|
||||
// Default quit and part message if none is provided.
|
||||
//
|
||||
// @type string
|
||||
// @default "The Lounge - https://thelounge.chat"
|
||||
//
|
||||
leaveMessage: "The Lounge - https://thelounge.chat",
|
||||
|
||||
//
|
||||
// Run The Lounge with identd support.
|
||||
//
|
||||
// @type object
|
||||
// @default {}
|
||||
//
|
||||
identd: {
|
||||
//
|
||||
// Run the identd daemon on server start.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
enable: false,
|
||||
|
||||
//
|
||||
// Port to listen for ident requests.
|
||||
//
|
||||
// @type int
|
||||
// @default 113
|
||||
//
|
||||
port: 113,
|
||||
},
|
||||
|
||||
//
|
||||
// Enable oidentd support using the specified file
|
||||
//
|
||||
// Example: oidentd: "~/.oidentd.conf",
|
||||
//
|
||||
// @type string
|
||||
// @default null
|
||||
//
|
||||
oidentd: null,
|
||||
|
||||
//
|
||||
// LDAP authentication settings (only available if public=false)
|
||||
// @type object
|
||||
// @default {}
|
||||
//
|
||||
// The authentication process works as follows:
|
||||
//
|
||||
// 1. Lounge connects to the LDAP server with its system credentials
|
||||
// 2. It performs a LDAP search query to find the full DN associated to the
|
||||
// user requesting to log in.
|
||||
// 3. Lounge tries to connect a second time, but this time using the user's
|
||||
// DN and password. Auth is validated iff this connection is successful.
|
||||
//
|
||||
// The search query takes a couple of parameters in `searchDN`:
|
||||
// - a base DN `searchDN/base`. Only children nodes of this DN will be likely
|
||||
// to be returned;
|
||||
// - a search scope `searchDN/scope` (see LDAP documentation);
|
||||
// - the query itself, build as (&(<primaryKey>=<username>) <filter>)
|
||||
// where <username> is the user name provided in the log in request,
|
||||
// <primaryKey> is provided by the config and <fitler> is a filtering complement
|
||||
// also given in the config, to filter for instance only for nodes of type
|
||||
// inetOrgPerson, or whatever LDAP search allows.
|
||||
//
|
||||
// Alternatively, you can specify the `bindDN` parameter. This will make the lounge
|
||||
// ignore searchDN options and assume that the user DN is always:
|
||||
// <bindDN>,<primaryKey>=<username>
|
||||
// where <username> is the user name provided in the log in request, and <bindDN>
|
||||
// and <primaryKey> are provided by the config.
|
||||
//
|
||||
ldap: {
|
||||
//
|
||||
// Enable LDAP user authentication
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
enable: true,
|
||||
|
||||
//
|
||||
// LDAP server URL
|
||||
//
|
||||
// @type string
|
||||
//
|
||||
url: "ldap://127.0.0.1",
|
||||
|
||||
|
||||
//
|
||||
// LDAP base dn, alternative to searchDN
|
||||
//
|
||||
// @type string
|
||||
//
|
||||
baseDN: "ou=users,dc=yunohost,dc=org",
|
||||
|
||||
//
|
||||
// LDAP primary key
|
||||
//
|
||||
// @type string
|
||||
// @default "uid"
|
||||
//
|
||||
primaryKey: "uid"
|
||||
|
||||
}
|
||||
};
|
619
conf/config.js
619
conf/config.js
|
@ -1,416 +1,431 @@
|
|||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
//
|
||||
// Set the server mode.
|
||||
// Public servers does not require authentication.
|
||||
//
|
||||
// Set to 'false' to enable users.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
public: false,
|
||||
// ## Server settings
|
||||
|
||||
// ### `public`
|
||||
//
|
||||
// IP address or hostname for the web server to listen on.
|
||||
// Setting this to undefined will listen on all interfaces.
|
||||
// When set to `true`, The Lounge starts in public mode. When set to `false`,
|
||||
// it starts in private mode.
|
||||
//
|
||||
// For UNIX domain sockets, use unix:/absolute/path/to/file.sock.
|
||||
// - A **public server** does not require authentication. Anyone can connect
|
||||
// to IRC networks in this mode. All IRC connections and channel
|
||||
// scrollbacks are lost when a user leaves the client.
|
||||
// - A **private server** requires users to log in. Their IRC connections are
|
||||
// kept even when they are not using or logged in to the client. All joined
|
||||
// channels and scrollbacks are available when they come back.
|
||||
//
|
||||
// @type string
|
||||
// @default undefined
|
||||
// This value is set to `false` by default.
|
||||
public: true,
|
||||
|
||||
// ### `host`
|
||||
//
|
||||
// IP address or hostname for the web server to listen to. For example, set it
|
||||
// to `"127.0.0.1"` to accept connections from localhost only.
|
||||
//
|
||||
// For UNIX domain sockets, use `"unix:/absolute/path/to/file.sock"`.
|
||||
//
|
||||
// This value is set to `undefined` by default to listen on all interfaces.
|
||||
host: undefined,
|
||||
|
||||
// ### `port`
|
||||
//
|
||||
// Set the port to listen on.
|
||||
//
|
||||
// @type int
|
||||
// @default 9000
|
||||
// Set the port to listen to.
|
||||
//
|
||||
// This value is set to `9000` by default.
|
||||
port: __PORT__,
|
||||
|
||||
// ### `bind`
|
||||
//
|
||||
// Set the local IP to bind to for outgoing connections. Leave to undefined
|
||||
// to let the operating system pick its preferred one.
|
||||
//
|
||||
// @type string
|
||||
// @default undefined
|
||||
// Set the local IP to bind to for outgoing connections.
|
||||
//
|
||||
// This value is set to `undefined` by default to let the operating system
|
||||
// pick its preferred one.
|
||||
bind: undefined,
|
||||
|
||||
// ### `reverseProxy`
|
||||
//
|
||||
// Sets whether the server is behind a reverse proxy and should honor the
|
||||
// X-Forwarded-For header or not.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
// When set to `true`, The Lounge is marked as served behind a reverse proxy
|
||||
// and will honor the `X-Forwarded-For` header.
|
||||
//
|
||||
// This value is set to `false` by default.
|
||||
reverseProxy: true,
|
||||
|
||||
// ### `maxHistory`
|
||||
//
|
||||
// Set the default theme.
|
||||
// Find out how to add new themes at https://thelounge.github.io/docs/plugins/themes.html
|
||||
// Defines the maximum number of history lines that will be kept in memory per
|
||||
// channel/query, in order to reduce the memory usage of the server. Setting
|
||||
// this to `-1` will keep unlimited amount.
|
||||
//
|
||||
// @type string
|
||||
// @default "example"
|
||||
//
|
||||
// theme: "example",
|
||||
// This value is set to `10000` by default.
|
||||
maxHistory: 10000,
|
||||
|
||||
// ### `https`
|
||||
//
|
||||
// Prefetch URLs
|
||||
// These settings are used to run The Lounge's web server using encrypted TLS.
|
||||
//
|
||||
// If enabled, The Lounge will try to load thumbnails and site descriptions from
|
||||
// URLs posted in channels.
|
||||
// If you want more control over the webserver,
|
||||
// [use a reverse proxy instead](https://thelounge.chat/docs/guides/reverse-proxies).
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
// The available keys for the `https` object are:
|
||||
//
|
||||
prefetch: true,
|
||||
// - `enable`: when set to `false`, HTTPS support is disabled
|
||||
// and all other values are ignored.
|
||||
// - `key`: Path to the private key file.
|
||||
// - `certificate`: Path to the certificate.
|
||||
// - `ca`: Path to the CA bundle.
|
||||
//
|
||||
// The value of `enable` is set to `false` to disable HTTPS by default, in
|
||||
// which case the other two string settings are ignored.
|
||||
https: {
|
||||
enable: false,
|
||||
key: "",
|
||||
certificate: "",
|
||||
ca: "",
|
||||
},
|
||||
|
||||
// ## Client settings
|
||||
|
||||
// ### `theme`
|
||||
//
|
||||
// Store and proxy prefetched images and thumbnails.
|
||||
// This improves security and privacy by not exposing client IP address,
|
||||
// and always loading images from The Lounge instance and making all assets secure,
|
||||
// which in result fixes mixed content warnings.
|
||||
// Set the default theme to serve to new users. They will be able to select a
|
||||
// different one in their client settings among those available.
|
||||
//
|
||||
// The Lounge ships with two themes (`default` and `morning`) and can be
|
||||
// extended by installing more themes. Read more about how to manage them
|
||||
// [here](https://thelounge.chat/docs/guides/theme-creation).
|
||||
//
|
||||
// This value needs to be the package name and not the display name. For
|
||||
// example, the value for Morning would be `morning`, and the value for
|
||||
// Solarized would be `thelounge-theme-solarized`.
|
||||
//
|
||||
// This value is set to `"default"` by default.
|
||||
theme: "default",
|
||||
|
||||
// ### `prefetch`
|
||||
//
|
||||
// When set to `true`, The Lounge will load thumbnails and site descriptions
|
||||
// from URLs posted in channels and private messages.
|
||||
//
|
||||
// This value is set to `false` by default.
|
||||
prefetch: false,
|
||||
|
||||
// ### `disableMediaPreview`
|
||||
//
|
||||
// When set to `true`, The Lounge will not preview media (images, video and
|
||||
// audio) hosted on third-party sites. This ensures the client does not
|
||||
// make any requests to external sites. If `prefetchStorage` is enabled,
|
||||
// images proxied via the The Lounge will be previewed.
|
||||
//
|
||||
// This has no effect if `prefetch` is set to `false`.
|
||||
//
|
||||
// This value is set to `false` by default.
|
||||
disableMediaPreview: false,
|
||||
|
||||
// ### `prefetchStorage`
|
||||
|
||||
// When set to `true`, The Lounge will store and proxy prefetched images and
|
||||
// thumbnails on the filesystem rather than directly display the content at
|
||||
// the original URLs.
|
||||
//
|
||||
// This option primarily exists to resolve mixed content warnings by not
|
||||
// loading images from http hosts. This option does not work for video
|
||||
// or audio as The Lounge will only load these from https hosts.
|
||||
//
|
||||
// If storage is enabled, The Lounge will fetch and store images and thumbnails
|
||||
// in the `${THELOUNGE_HOME}/storage` folder.
|
||||
//
|
||||
// Images are deleted when they are no longer referenced by any message (controlled by maxHistory),
|
||||
// and the folder is cleaned up on every The Lounge restart.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
// Images are deleted when they are no longer referenced by any message
|
||||
// (controlled by `maxHistory`), and the folder is cleaned up when The Lounge
|
||||
// restarts.
|
||||
//
|
||||
// This value is set to `false` by default.
|
||||
prefetchStorage: true,
|
||||
|
||||
// ### `prefetchMaxImageSize`
|
||||
//
|
||||
// Prefetch URLs Image Preview size limit
|
||||
//
|
||||
// If prefetch is enabled, The Lounge will only display content under the maximum size.
|
||||
// Specified value is in kilobytes. Default value is 2048 kilobytes.
|
||||
//
|
||||
// @type int
|
||||
// @default 2048
|
||||
// When `prefetch` is enabled, images will only be displayed if their file
|
||||
// size does not exceed this limit.
|
||||
//
|
||||
// This value is set to `2048` kilobytes by default.
|
||||
prefetchMaxImageSize: 2048,
|
||||
|
||||
// ### `fileUpload`
|
||||
//
|
||||
// Lock network
|
||||
// Allow uploading files to the server hosting The Lounge.
|
||||
//
|
||||
// If set to true, users will not be able to modify host, port and tls
|
||||
// settings and will be limited to the configured network.
|
||||
// Files are stored in the `${THELOUNGE_HOME}/uploads` folder, do not expire,
|
||||
// and are not removed by The Lounge. This may cause issues depending on your
|
||||
// hardware, for example in terms of disk usage.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
// The available keys for the `fileUpload` object are:
|
||||
//
|
||||
lockNetwork: false,
|
||||
// - `enable`: When set to `true`, files can be uploaded on the client with a
|
||||
// drag-and-drop or using the upload dialog.
|
||||
// - `maxFileSize`: When file upload is enabled, users sending files above
|
||||
// this limit will be prompted with an error message in their browser. A value of
|
||||
// `-1` disables the file size limit and allows files of any size. **Use at
|
||||
// your own risk.** This value is set to `10240` kilobytes by default.
|
||||
// - `baseUrl`: If you want change the URL where uploaded files are accessed,
|
||||
// you can set this option to `"https://example.com/folder/"` and the final URL
|
||||
// would look like `"https://example.com/folder/aabbccddeeff1234/name.png"`.
|
||||
// If you use this option, you must have a reverse proxy configured,
|
||||
// to correctly proxy the uploads URLs back to The Lounge.
|
||||
// This value is set to `null` by default.
|
||||
fileUpload: {
|
||||
enable: false,
|
||||
maxFileSize: 10240,
|
||||
baseUrl: null,
|
||||
},
|
||||
|
||||
// ### `transports`
|
||||
//
|
||||
// Hex IP
|
||||
// Set `socket.io` transports.
|
||||
//
|
||||
// If enabled, clients' username will be set to their IP encoded has hex.
|
||||
// This is done to share the real user IP address with the server for host masking purposes.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
useHexIp: false,
|
||||
// This value is set to `["polling", "websocket"]` by default.
|
||||
transports: ["polling", "websocket"],
|
||||
|
||||
// ### `leaveMessage`
|
||||
//
|
||||
// WEBIRC support
|
||||
// Set users' default `quit` and `part` messages if they are not providing
|
||||
// one.
|
||||
//
|
||||
// If enabled, The Lounge will pass the connecting user's host and IP to the
|
||||
// IRC server. Note that this requires to obtain a password from the IRC network
|
||||
// The Lounge will be connecting to and generally involves a lot of trust from the
|
||||
// network you are connecting to.
|
||||
//
|
||||
// Format (standard): {"irc.example.net": "hunter1", "irc.example.org": "passw0rd"}
|
||||
// Format (function):
|
||||
// {"irc.example.net": function(client, args, trusted) {
|
||||
// // here, we return a webirc object fed directly to `irc-framework`
|
||||
// return {username: "thelounge", password: "hunter1", address: args.ip, hostname: "webirc/"+args.hostname};
|
||||
// }}
|
||||
//
|
||||
// @type string | function(client, args):object(webirc)
|
||||
// @default null
|
||||
webirc: null,
|
||||
// This value is set to `"The Lounge - https://thelounge.chat"` by
|
||||
// default.
|
||||
leaveMessage: "The Lounge - https://thelounge.chat",
|
||||
|
||||
//
|
||||
// Message logging
|
||||
// Logging is also controlled per user individually (logs variable)
|
||||
// Leave the array empty to disable all logging globally
|
||||
//
|
||||
// text: Text file per network/channel in user folder
|
||||
// sqlite: Messages are stored in SQLite, this allows them to be reloaded on server restart
|
||||
//
|
||||
// @type array
|
||||
// @default ["sqlite", "text"]
|
||||
//
|
||||
messageStorage: ["sqlite"],
|
||||
// ## Default network
|
||||
|
||||
// ### `defaults`
|
||||
//
|
||||
// Maximum number of history lines per channel
|
||||
// Specifies default network information that will be used as placeholder
|
||||
// values in the *Connect* window.
|
||||
//
|
||||
// Defines the maximum number of history lines that will be kept in
|
||||
// memory per channel/query, in order to reduce the memory usage of
|
||||
// the server. Setting this to -1 will keep unlimited amount.
|
||||
// The available keys for the `defaults` object are:
|
||||
//
|
||||
// @type integer
|
||||
// @default 10000
|
||||
maxHistory: 10000,
|
||||
|
||||
// - `name`: Name to display in the channel list of The Lounge. This value is
|
||||
// not forwarded to the IRC network.
|
||||
// - `host`: IP address or hostname of the IRC server.
|
||||
// - `port`: Usually 6667 for unencrypted connections and 6697 for
|
||||
// connections encrypted with TLS.
|
||||
// - `password`: Connection password. If the server supports SASL capability,
|
||||
// then this password will be used in SASL authentication.
|
||||
// - `tls`: Enable TLS connections
|
||||
// - `rejectUnauthorized`: Whether the server certificate should be verified
|
||||
// against the list of supplied Certificate Authorities (CAs) by your
|
||||
// Node.js installation.
|
||||
// - `nick`: Nick name. Percent signs (`%`) will be replaced by random
|
||||
// numbers from 0 to 9. For example, `Guest%%%` may become `Guest123`.
|
||||
// - `username`: User name.
|
||||
// - `realname`: Real name.
|
||||
// - `join`: Comma-separated list of channels to auto-join once connected.
|
||||
//
|
||||
// Default values for the 'Connect' form.
|
||||
//
|
||||
// @type object
|
||||
// @default {}
|
||||
// This value is set to connect to the official channel of The Lounge on
|
||||
// irc.libera.chat by default:
|
||||
//
|
||||
// ```js
|
||||
// defaults: {
|
||||
// name: "Libera.Chat",
|
||||
// host: "irc.libera.chat",
|
||||
// port: 6697,
|
||||
// password: "",
|
||||
// tls: true,
|
||||
// rejectUnauthorized: true,
|
||||
// nick: "thelounge%%",
|
||||
// username: "thelounge",
|
||||
// realname: "The Lounge User",
|
||||
// join: "#thelounge"
|
||||
// }
|
||||
// ```
|
||||
defaults: {
|
||||
//
|
||||
// Name
|
||||
//
|
||||
// @type string
|
||||
// @default "Freenode"
|
||||
//
|
||||
name: "Freenode",
|
||||
|
||||
//
|
||||
// Host
|
||||
//
|
||||
// @type string
|
||||
// @default "chat.freenode.net"
|
||||
//
|
||||
host: "chat.freenode.net",
|
||||
|
||||
//
|
||||
// Port
|
||||
//
|
||||
// @type int
|
||||
// @default 6697
|
||||
//
|
||||
name: "Libera.Chat",
|
||||
host: "irc.libera.chat",
|
||||
port: 6697,
|
||||
|
||||
//
|
||||
// Password
|
||||
//
|
||||
// @type string
|
||||
// @default ""
|
||||
//
|
||||
password: "",
|
||||
|
||||
//
|
||||
// Enable TLS/SSL
|
||||
//
|
||||
// @type boolean
|
||||
// @default true
|
||||
//
|
||||
tls: true,
|
||||
|
||||
//
|
||||
// Enable certificate verification
|
||||
//
|
||||
// If true, the server certificate is verified against
|
||||
// the list of supplied CAs by your node.js installation.
|
||||
//
|
||||
// @type boolean
|
||||
// @default true
|
||||
//
|
||||
rejectUnauthorized: true,
|
||||
|
||||
//
|
||||
// Nick
|
||||
//
|
||||
// Percent sign (%) will be replaced into a random number from 0 to 9.
|
||||
// For example, Guest%%% will become Guest123 on page load.
|
||||
//
|
||||
// @type string
|
||||
// @default "thelounge%%"
|
||||
//
|
||||
nick: "ynhuser|%%%%%",
|
||||
|
||||
//
|
||||
// Username
|
||||
//
|
||||
// @type string
|
||||
// @default "thelounge"
|
||||
//
|
||||
username: "thelounge",
|
||||
|
||||
//
|
||||
// Real Name
|
||||
//
|
||||
// @type string
|
||||
// @default "The Lounge User"
|
||||
//
|
||||
realname: "The Lounge User",
|
||||
|
||||
//
|
||||
// Channels
|
||||
// This is a comma-separated list.
|
||||
//
|
||||
// @type string
|
||||
// @default "#thelounge"
|
||||
//
|
||||
join: "#yunohost",
|
||||
},
|
||||
|
||||
// ### `lockNetwork`
|
||||
//
|
||||
// Set socket.io transports
|
||||
// When set to `true`, users will not be able to modify host, port and TLS
|
||||
// settings and will be limited to the configured network.
|
||||
// These fields will also be hidden from the UI.
|
||||
//
|
||||
// @type array
|
||||
// @default ["polling", "websocket"]
|
||||
//
|
||||
transports: ["polling", "websocket"],
|
||||
// This value is set to `false` by default.
|
||||
lockNetwork: false,
|
||||
|
||||
//
|
||||
// Run The Lounge using encrypted HTTP/2.
|
||||
// This will fallback to regular HTTPS if HTTP/2 is not supported.
|
||||
//
|
||||
// @type object
|
||||
// @default {}
|
||||
//
|
||||
https: {
|
||||
//
|
||||
// Enable HTTP/2 / HTTPS support.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
enable: false,
|
||||
// ## User management
|
||||
|
||||
//
|
||||
// Path to the key.
|
||||
//
|
||||
// @type string
|
||||
// @example "sslcert/key.pem"
|
||||
// @default ""
|
||||
//
|
||||
key: "",
|
||||
// ### `messageStorage`
|
||||
|
||||
//
|
||||
// Path to the certificate.
|
||||
//
|
||||
// @type string
|
||||
// @example "sslcert/key-cert.pem"
|
||||
// @default ""
|
||||
//
|
||||
certificate: "",
|
||||
// The Lounge can log user messages, for example to access them later or to
|
||||
// reload messages on server restart.
|
||||
|
||||
// Set this array with one or multiple values to enable logging:
|
||||
// - `text`: Messages per network and channel will be stored as text files.
|
||||
// **Messages will not be reloaded on restart.**
|
||||
// - `sqlite`: Messages are stored in SQLite database files, one per user.
|
||||
//
|
||||
// Path to the CA bundle.
|
||||
// Logging can be disabled globally by setting this value to an empty array
|
||||
// `[]`. Logging is also controlled per user individually in the `log` key of
|
||||
// their JSON configuration file.
|
||||
//
|
||||
// @type string
|
||||
// @example "sslcert/bundle.pem"
|
||||
// @default ""
|
||||
//
|
||||
ca: "",
|
||||
},
|
||||
// This value is set to `["sqlite", "text"]` by default.
|
||||
messageStorage: ["sqlite"],
|
||||
|
||||
// ### `useHexIp`
|
||||
//
|
||||
// Default quit and part message if none is provided.
|
||||
// When set to `true`, users' IP addresses will be encoded as hex.
|
||||
//
|
||||
// @type string
|
||||
// @default "The Lounge - https://thelounge.chat"
|
||||
// This is done to share the real user IP address with the server for host
|
||||
// masking purposes. This is encoded in the `username` field and only supports
|
||||
// IPv4.
|
||||
//
|
||||
leaveMessage: "The Lounge - https://thelounge.chat",
|
||||
// This value is set to `false` by default.
|
||||
useHexIp: false,
|
||||
|
||||
// ## WEBIRC support
|
||||
//
|
||||
// Run The Lounge with identd support.
|
||||
// When enabled, The Lounge will pass the connecting user's host and IP to the
|
||||
// IRC server. Note that this requires to obtain a password from the IRC
|
||||
// network that The Lounge will be connecting to and generally involves a lot
|
||||
// of trust from the network you are connecting to.
|
||||
//
|
||||
// @type object
|
||||
// @default {}
|
||||
// There are 2 ways to configure the `webirc` setting:
|
||||
//
|
||||
// - **Basic**: an object where keys are IRC hosts and values are passwords.
|
||||
// For example:
|
||||
//
|
||||
// ```json
|
||||
// webirc: {
|
||||
// "irc.example.net": "thisiswebircpassword1",
|
||||
// "irc.example.org": "thisiswebircpassword2",
|
||||
// },
|
||||
// ```
|
||||
//
|
||||
// - **Advanced**: an object where keys are IRC hosts and values are functions
|
||||
// that take two arguments (`webircObj`, `network`) and return an
|
||||
// object to be directly passed to `irc-framework`. `webircObj` contains the
|
||||
// generated object which you can modify. For example:
|
||||
//
|
||||
// ```js
|
||||
// webirc: {
|
||||
// "irc.example.com": (webircObj, network) => {
|
||||
// webircObj.password = "thisiswebircpassword";
|
||||
// webircObj.hostname = `webirc/${webircObj.hostname}`;
|
||||
// return webircObj;
|
||||
// },
|
||||
// },
|
||||
// ```
|
||||
//
|
||||
// This value is set to `null` to disable WEBIRC by default.
|
||||
webirc: null,
|
||||
|
||||
// ## identd and oidentd support
|
||||
|
||||
// ### `identd`
|
||||
//
|
||||
// Run The Lounge with `identd` support.
|
||||
//
|
||||
// The available keys for the `identd` object are:
|
||||
//
|
||||
// - `enable`: When `true`, the identd daemon runs on server start.
|
||||
// - `port`: Port to listen for ident requests.
|
||||
//
|
||||
// The value of `enable` is set to `false` to disable `identd` support by
|
||||
// default, in which case the value of `port` is ignored. The default value of
|
||||
// `port` is 113.
|
||||
identd: {
|
||||
//
|
||||
// Run the identd daemon on server start.
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
enable: false,
|
||||
|
||||
//
|
||||
// Port to listen for ident requests.
|
||||
//
|
||||
// @type int
|
||||
// @default 113
|
||||
//
|
||||
port: 113,
|
||||
},
|
||||
|
||||
// ### `oidentd`
|
||||
//
|
||||
// Enable oidentd support using the specified file
|
||||
//
|
||||
// Example: oidentd: "~/.oidentd.conf",
|
||||
//
|
||||
// @type string
|
||||
// @default null
|
||||
// When this setting is a string, this enables `oidentd` support using the
|
||||
// configuration file located at the given path.
|
||||
//
|
||||
// This is set to `null` by default to disable `oidentd` support.
|
||||
oidentd: null,
|
||||
|
||||
// ## LDAP support
|
||||
|
||||
// These settings enable and configure LDAP authentication.
|
||||
//
|
||||
// LDAP authentication settings (only available if public=false)
|
||||
// @type object
|
||||
// @default {}
|
||||
// They are only being used in private mode. To know more about private mode,
|
||||
// see the `public` setting above.
|
||||
|
||||
//
|
||||
// The authentication process works as follows:
|
||||
//
|
||||
// 1. Lounge connects to the LDAP server with its system credentials
|
||||
// 2. It performs a LDAP search query to find the full DN associated to the
|
||||
// 1. The Lounge connects to the LDAP server with its system credentials.
|
||||
// 2. It performs an LDAP search query to find the full DN associated to the
|
||||
// user requesting to log in.
|
||||
// 3. Lounge tries to connect a second time, but this time using the user's
|
||||
// DN and password. Auth is validated iff this connection is successful.
|
||||
// 3. The Lounge tries to connect a second time, but this time using the
|
||||
// user's DN and password. Authentication is validated if and only if this
|
||||
// connection is successful.
|
||||
//
|
||||
// The search query takes a couple of parameters in `searchDN`:
|
||||
//
|
||||
// - a base DN `searchDN/base`. Only children nodes of this DN will be likely
|
||||
// to be returned;
|
||||
// be returned;
|
||||
// - a search scope `searchDN/scope` (see LDAP documentation);
|
||||
// - the query itself, build as (&(<primaryKey>=<username>) <filter>)
|
||||
// where <username> is the user name provided in the log in request,
|
||||
// <primaryKey> is provided by the config and <fitler> is a filtering complement
|
||||
// also given in the config, to filter for instance only for nodes of type
|
||||
// inetOrgPerson, or whatever LDAP search allows.
|
||||
// - the query itself, built as `(&(<primaryKey>=<username>) <filter>)`
|
||||
// where `<username>` is the user name provided in the log in request,
|
||||
// `<primaryKey>` is provided by the config and `<filter>` is a filtering
|
||||
// complement also given in the config, to filter for instance only for
|
||||
// nodes of type `inetOrgPerson`, or whatever LDAP search allows.
|
||||
//
|
||||
// Alternatively, you can specify the `bindDN` parameter. This will make the lounge
|
||||
// ignore searchDN options and assume that the user DN is always:
|
||||
// <bindDN>,<primaryKey>=<username>
|
||||
// where <username> is the user name provided in the log in request, and <bindDN>
|
||||
// and <primaryKey> are provided by the config.
|
||||
// Alternatively, you can specify the `bindDN` parameter. This will make The
|
||||
// Lounge ignore `searchDN` options and assume that the user DN is always
|
||||
// `<bindDN>,<primaryKey>=<username>`, where `<username>` is the user name
|
||||
// provided in the log in request, and `<bindDN>` and `<primaryKey>` are
|
||||
// provided by the configuration.
|
||||
//
|
||||
// The available keys for the `ldap` object are:
|
||||
ldap: {
|
||||
//
|
||||
// Enable LDAP user authentication
|
||||
//
|
||||
// @type boolean
|
||||
// @default false
|
||||
//
|
||||
enable: true,
|
||||
// - `enable`: when set to `false`, LDAP support is disabled and all other
|
||||
// values are ignored.
|
||||
enable: false,
|
||||
|
||||
//
|
||||
// LDAP server URL
|
||||
//
|
||||
// @type string
|
||||
//
|
||||
url: "ldap://127.0.0.1",
|
||||
// - `url`: A url of the form `ldaps://<ip>:<port>`.
|
||||
// For plain connections, use the `ldap` scheme.
|
||||
url: "ldap://127.0.0.1:389",
|
||||
|
||||
// - `primaryKey`: LDAP primary key. It is set to `"uid"` by default.
|
||||
primaryKey: "uid",
|
||||
|
||||
//
|
||||
// LDAP base dn, alternative to searchDN
|
||||
//
|
||||
// @type string
|
||||
//
|
||||
// - `baseDN`: LDAP base DN, alternative to `searchDN`. For example, set it
|
||||
// to `"ou=accounts,dc=example,dc=com"`.
|
||||
// When unset, the LDAP auth logic with use `searchDN` instead to locate users.
|
||||
baseDN: "ou=users,dc=yunohost,dc=org",
|
||||
},
|
||||
|
||||
//
|
||||
// LDAP primary key
|
||||
//
|
||||
// @type string
|
||||
// @default "uid"
|
||||
//
|
||||
primaryKey: "uid"
|
||||
// ## Debugging settings
|
||||
|
||||
}
|
||||
// The `debug` object contains several settings to enable debugging in The
|
||||
// Lounge. Use them to learn more about an issue you are noticing but be aware
|
||||
// this may produce more logging or may affect connection performance so it is
|
||||
// not recommended to use them by default.
|
||||
//
|
||||
// All values in the `debug` object are set to `false`.
|
||||
debug: {
|
||||
// ### `debug.ircFramework`
|
||||
//
|
||||
// When set to true, this enables extra debugging output provided by
|
||||
// [`irc-framework`](https://github.com/kiwiirc/irc-framework), the
|
||||
// underlying IRC library for Node.js used by The Lounge.
|
||||
ircFramework: false,
|
||||
|
||||
// ### `debug.raw`
|
||||
//
|
||||
// When set to `true`, this enables logging of raw IRC messages into each
|
||||
// server window, displayed on the client.
|
||||
raw: false,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -6,12 +6,15 @@ After=network.target
|
|||
Type=simple
|
||||
User=__APP__
|
||||
Group=__APP__
|
||||
WorkingDirectory=__FINALPATH__
|
||||
WorkingDirectory=__FINALPATH__/
|
||||
Environment="PATH=__ENV_PATH__"
|
||||
Environment="THELOUNGE_HOME=/home/yunohost.app/__APP__/"
|
||||
Environment="NODE_ENV=production"
|
||||
ExecStart=/usr/bin/yarn start
|
||||
Restart=always
|
||||
Restart=on-failure
|
||||
RestartSec=5
|
||||
StartLimitInterval=60s
|
||||
StartLimitBurst=3
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
WantedBy=multi-user.target
|
||||
|
|
0
doc/DISCLAIMER.md
Normal file
0
doc/DISCLAIMER.md
Normal file
BIN
doc/screenshots/thelounge-screenshot.png
Normal file
BIN
doc/screenshots/thelounge-screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 36 KiB |
|
@ -8,6 +8,14 @@
|
|||
},
|
||||
"version": "4.2.0~ynh3",
|
||||
"url": "https://thelounge.chat/",
|
||||
"upstream": {
|
||||
"license": "MIT",
|
||||
"website": "https://example.com",
|
||||
"demo": "https://demo.thelounge.chat/",
|
||||
"admindoc": "https://thelounge.chat/docs",
|
||||
"userdoc": "https://yunohost.org/en/app_thelounge",
|
||||
"code": "https://github.com/thelounge/thelounge"
|
||||
},
|
||||
"license": "MIT",
|
||||
"maintainer": {
|
||||
"name": "rafi59",
|
||||
|
@ -19,41 +27,28 @@
|
|||
"email": "beudbeud@beudibox.fr"
|
||||
},
|
||||
"requirements": {
|
||||
"yunohost": ">= 3.8.1"
|
||||
"yunohost": ">= 4.2.4"
|
||||
},
|
||||
"multi_instance": false,
|
||||
"services": [
|
||||
"nginx",
|
||||
"mysql"
|
||||
"nginx"
|
||||
],
|
||||
"arguments": {
|
||||
"install" : [
|
||||
{
|
||||
"name": "domain",
|
||||
"type": "domain",
|
||||
"ask": {
|
||||
"en": "Choose a domain name for The Lounge",
|
||||
"fr": "Choisissez un nom de domaine pour The Lounge"
|
||||
},
|
||||
"example": "example.com"
|
||||
},
|
||||
{
|
||||
"name": "path",
|
||||
"type": "path",
|
||||
"ask": {
|
||||
"en": "Choose a path for The Lounge",
|
||||
"fr": "Choisissez un chemin pour The Lounge"
|
||||
},
|
||||
"example": "/irc",
|
||||
"default": "/irc"
|
||||
},
|
||||
{
|
||||
"name": "is_public",
|
||||
"type": "boolean",
|
||||
"ask": {
|
||||
"en": "Is it a public application?",
|
||||
"fr": "Est-ce une application publique ?"
|
||||
},
|
||||
"default": true
|
||||
}
|
||||
]
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
## Problem
|
||||
- *Description of why you made this PR*
|
||||
|
||||
## Solution
|
||||
- *And how do you fix that problem*
|
||||
|
||||
## PR Status
|
||||
- [ ] Code finished.
|
||||
- [ ] Tested with Package_check.
|
||||
- [ ] Fix or enhancement tested.
|
||||
- [ ] Upgrade from last version tested.
|
||||
- [ ] Can be reviewed and tested.
|
||||
|
||||
## Package_check results
|
||||
---
|
||||
*If you have access to [App Continuous Integration for packagers](https://yunohost.org/#/packaging_apps_ci) you can provide a link to the package_check results like below, replacing '-NUM-' in this link by the PR number and USERNAME by your username on the ci-apps-dev. Or you provide a screenshot or a pastebin of the results*
|
||||
|
||||
[![Build Status](https://ci-apps-dev.yunohost.org/jenkins/job/thelounge_ynh%20PR-NUM-%20(USERNAME)/badge/icon)](https://ci-apps-dev.yunohost.org/jenkins/job/thelounge_ynh%20PR-NUM-%20(USERNAME)/)
|
|
@ -23,8 +23,8 @@ ynh_print_info --message="Loading installation settings..."
|
|||
app=$YNH_APP_INSTANCE_NAME
|
||||
|
||||
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||
config_path=$(ynh_app_setting_get --app=$app --key=config_path)
|
||||
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
||||
datadir=$(ynh_app_setting_get --app=$app --key=datadir)
|
||||
|
||||
#=================================================
|
||||
# DECLARE DATA AND CONF FILES TO BACKUP
|
||||
|
@ -53,7 +53,7 @@ ynh_backup --src_path="/etc/systemd/system/$app.service"
|
|||
# BACKUP CONFIG
|
||||
#=================================================
|
||||
|
||||
ynh_backup --src_path="$config_path"
|
||||
ynh_backup --src_path="$datadir"
|
||||
|
||||
#=================================================
|
||||
# END OF SCRIPT
|
||||
|
|
|
@ -30,6 +30,23 @@ ynh_script_progression --message="Loading installation settings..."
|
|||
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||
port=$(ynh_app_setting_get --app=$app --key=port)
|
||||
|
||||
#=================================================
|
||||
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
|
||||
#=================================================
|
||||
ynh_script_progression --message="Backing up the app before changing its URL (may take a while)..."
|
||||
|
||||
# Backup the current version of the app
|
||||
ynh_backup_before_upgrade
|
||||
ynh_clean_setup () {
|
||||
# Remove the new domain config file, the remove script won't do it as it doesn't know yet its location.
|
||||
ynh_secure_remove --file="/etc/nginx/conf.d/$new_domain.d/$app.conf"
|
||||
|
||||
# Restore it if the upgrade fails
|
||||
ynh_restore_upgradebackup
|
||||
}
|
||||
# Exit if an error occurs during the execution of the script
|
||||
ynh_abort_if_errors
|
||||
|
||||
#=================================================
|
||||
# CHECK WHICH PARTS SHOULD BE CHANGED
|
||||
#=================================================
|
||||
|
@ -92,7 +109,7 @@ fi
|
|||
ynh_script_progression --message="Starting a systemd service..."
|
||||
|
||||
# Start a systemd service
|
||||
ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="Available at http"
|
||||
ynh_systemd_action --service_name=$app --action=start --log_path=systemd --line_match="Available at http"
|
||||
|
||||
#=================================================
|
||||
# RELOAD NGINX
|
||||
|
|
|
@ -13,9 +13,6 @@ source /usr/share/yunohost/helpers
|
|||
# MANAGE SCRIPT FAILURE
|
||||
#=================================================
|
||||
|
||||
ynh_clean_setup () {
|
||||
ynh_clean_check_starting
|
||||
}
|
||||
# Exit if an error occurs during the execution of the script
|
||||
ynh_abort_if_errors
|
||||
|
||||
|
@ -26,6 +23,7 @@ ynh_abort_if_errors
|
|||
domain=$YNH_APP_ARG_DOMAIN
|
||||
path_url=$YNH_APP_ARG_PATH
|
||||
is_public=$YNH_APP_ARG_IS_PUBLIC
|
||||
|
||||
app=$YNH_APP_INSTANCE_NAME
|
||||
|
||||
#=================================================
|
||||
|
@ -47,7 +45,6 @@ ynh_script_progression --message="Storing installation settings..."
|
|||
|
||||
ynh_app_setting_set --app=$app --key=domain --value=$domain
|
||||
ynh_app_setting_set --app=$app --key=path --value=$path_url
|
||||
ynh_app_setting_set --app=$app --key=is_public --value=$is_public
|
||||
ynh_app_setting_set --app=$app --key=config_path --value=$config_path
|
||||
|
||||
#=================================================
|
||||
|
@ -72,6 +69,14 @@ ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version
|
|||
# Install Yarn
|
||||
ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg"
|
||||
|
||||
#=================================================
|
||||
# CREATE DEDICATED USER
|
||||
#=================================================
|
||||
ynh_script_progression --message="Configuring system user..."
|
||||
|
||||
# Create a system user
|
||||
ynh_system_user_create --username=$app --home_dir="$final_path"
|
||||
|
||||
#=================================================
|
||||
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||
#=================================================
|
||||
|
@ -81,6 +86,10 @@ ynh_app_setting_set --app=$app --key=final_path --value=$final_path
|
|||
# Download, check integrity, uncompress and patch the source from app.src
|
||||
ynh_setup_source --dest_dir=$final_path
|
||||
|
||||
chmod 750 "$final_path"
|
||||
chmod -R o-rwx "$final_path"
|
||||
chown -R $app:www-data "$final_path"
|
||||
|
||||
#=================================================
|
||||
# NGINX CONFIGURATION
|
||||
#=================================================
|
||||
|
@ -90,12 +99,18 @@ ynh_script_progression --message="Configuring NGINX web server..."
|
|||
ynh_add_nginx_config
|
||||
|
||||
#=================================================
|
||||
# CREATE DEDICATED USER
|
||||
# CREATE DATA DIRECTORY
|
||||
#=================================================
|
||||
ynh_script_progression --message="Configuring system user..."
|
||||
ynh_script_progression --message="Creating a data directory..."
|
||||
|
||||
# Create a system user
|
||||
ynh_system_user_create --username=$app
|
||||
datadir=/home/yunohost.app/$app
|
||||
ynh_app_setting_set --app=$app --key=datadir --value=$datadir
|
||||
|
||||
mkdir -p $datadir
|
||||
|
||||
chmod 750 "$datadir"
|
||||
chmod -R o-rwx "$datadir"
|
||||
chown -R $app:www-data "$datadir"
|
||||
|
||||
#=================================================
|
||||
# SPECIFIC SETUP
|
||||
|
@ -104,14 +119,7 @@ ynh_system_user_create --username=$app
|
|||
#=================================================
|
||||
ynh_script_progression --message="Modifying a config file..."
|
||||
|
||||
mkdir -p $config_path
|
||||
|
||||
# Main config File
|
||||
ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="../conf/config.js"
|
||||
|
||||
cp -a ../conf/config.js "$config_path"
|
||||
|
||||
ynh_store_file_checksum "$config_path/config.js"
|
||||
ynh_add_config --template="../conf/config.js" --destination="$datadir/config.js"
|
||||
|
||||
#=================================================
|
||||
# INSTALL THE LOUNGE
|
||||
|
@ -120,7 +128,8 @@ ynh_script_progression --message="Installing The Lounge..."
|
|||
|
||||
pushd $final_path
|
||||
ynh_use_nodejs
|
||||
yarn install
|
||||
ynh_exec_warn_less NODE_ENV=production yarn install
|
||||
yarn add webpack webpack-dev-server --dev
|
||||
ynh_exec_warn_less NODE_ENV=production yarn build
|
||||
popd
|
||||
|
||||
|
@ -129,24 +138,11 @@ popd
|
|||
#=================================================
|
||||
ynh_script_progression --message="Configuring a systemd service..."
|
||||
|
||||
ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../conf/systemd.service"
|
||||
ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file="../conf/systemd.service"
|
||||
ynh_replace_string --match_string="__ENV_PATH__" --replace_string="$PATH" --target_file="../conf/systemd.service"
|
||||
ynh_replace_string --match_string="__NODE__" --replace_string="$nodejs_path" --target_file="../conf/systemd.service"
|
||||
|
||||
ynh_add_systemd_config
|
||||
|
||||
#=================================================
|
||||
# GENERIC FINALIZATION
|
||||
#=================================================
|
||||
# SECURE FILES AND DIRECTORIES
|
||||
#=================================================
|
||||
ynh_script_progression --message="Securing files and directories..."
|
||||
|
||||
# Set permissions to app files
|
||||
chown -R $app: $final_path
|
||||
chown -R $app: $config_path
|
||||
|
||||
#=================================================
|
||||
# INTEGRATE SERVICE IN YUNOHOST
|
||||
#=================================================
|
||||
|
@ -160,15 +156,18 @@ yunohost service add $app --description="Client Web IRC" --log="/var/log/$app/$a
|
|||
ynh_script_progression --message="Starting a systemd service..."
|
||||
|
||||
# Start a systemd service
|
||||
ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="Available at http"
|
||||
ynh_systemd_action --service_name=$app --action=start --log_path=systemd
|
||||
|
||||
#=================================================
|
||||
# SETUP SSOWAT
|
||||
#=================================================
|
||||
ynh_script_progression --message="Configuring SSOwat..."
|
||||
ynh_script_progression --message="Configuring permissions..."
|
||||
|
||||
# Make app public if necessary or protect it
|
||||
[ $is_public -eq 0 ] || ynh_permission_update --permission "main" --add "visitors"
|
||||
# Make app public if necessary
|
||||
if [ $is_public -eq 1 ]
|
||||
then
|
||||
ynh_permission_update --permission="main" --add="visitors"
|
||||
fi
|
||||
|
||||
#=================================================
|
||||
# RELOAD NGINX
|
||||
|
|
|
@ -19,7 +19,7 @@ app=$YNH_APP_INSTANCE_NAME
|
|||
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
||||
port=$(ynh_app_setting_get --app=$app --key=port)
|
||||
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||
config_path=$(ynh_app_setting_get --app=$app --key=config_path)
|
||||
datadir=$(ynh_app_setting_get --app=$app --key=datadir)
|
||||
|
||||
#=================================================
|
||||
# STANDARD REMOVE
|
||||
|
@ -73,7 +73,7 @@ ynh_remove_nginx_config
|
|||
#=================================================
|
||||
ynh_script_progression --message="Removing the config file..."
|
||||
|
||||
ynh_secure_remove --file="$config_path"
|
||||
ynh_secure_remove --file="$datadir"
|
||||
|
||||
#=================================================
|
||||
# GENERIC FINALIZATION
|
||||
|
|
|
@ -29,15 +29,13 @@ app=$YNH_APP_INSTANCE_NAME
|
|||
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
||||
path_url=$(ynh_app_setting_get --app=$app --key=path)
|
||||
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||
config_path=$(ynh_app_setting_get --app=$app --key=config_path)
|
||||
datadir=$(ynh_app_setting_get --app=$app --key=datadir)
|
||||
|
||||
#=================================================
|
||||
# CHECK IF THE APP CAN BE RESTORED
|
||||
#=================================================
|
||||
ynh_script_progression --message="Validating restoration parameters..."
|
||||
|
||||
ynh_webpath_available --domain=$domain --path_url=$path_url \
|
||||
|| ynh_die --message="Path not available: ${domain}${path_url}"
|
||||
test ! -d $final_path \
|
||||
|| ynh_die --message="There is already a directory: $final_path "
|
||||
|
||||
|
@ -50,6 +48,14 @@ ynh_script_progression --message="Restoring the NGINX configuration..."
|
|||
|
||||
ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
|
||||
|
||||
#=================================================
|
||||
# CREATE DEDICATED USER
|
||||
#=================================================
|
||||
ynh_script_progression --message="Recreating the dedicated system user..."
|
||||
|
||||
# Create a dedicated user (if not existing)
|
||||
ynh_system_user_create --username=$app --home_dir="$final_path"
|
||||
|
||||
#=================================================
|
||||
# RESTORE THE APP MAIN DIR
|
||||
#=================================================
|
||||
|
@ -57,29 +63,22 @@ ynh_script_progression --message="Restoring $app main directory..."
|
|||
|
||||
ynh_restore_file --origin_path="$final_path"
|
||||
|
||||
chmod 750 "$final_path"
|
||||
chmod -R o-rwx "$final_path"
|
||||
chown -R $app:www-data "$final_path"
|
||||
|
||||
#=================================================
|
||||
# RESTORE THE CONFIG
|
||||
#=================================================
|
||||
ynh_script_progression --message="Restoring the config path..."
|
||||
|
||||
ynh_restore_file --origin_path="$config_path"
|
||||
ynh_restore_file --origin_path="$datadir" --not_mandatory
|
||||
|
||||
#=================================================
|
||||
# RECREATE THE DEDICATED USER
|
||||
#=================================================
|
||||
ynh_script_progression --message="Recreating the dedicated system user..."
|
||||
mkdir -p $datadir
|
||||
|
||||
# Create the dedicated user (if not existing)
|
||||
ynh_system_user_create --username=$app
|
||||
|
||||
#=================================================
|
||||
# RESTORE USER RIGHTS
|
||||
#=================================================
|
||||
ynh_script_progression --message="Restoring user rights..."
|
||||
|
||||
# Restore permissions to app files
|
||||
chown -R $app: $final_path
|
||||
chown -R $app: $config_path
|
||||
chmod 750 "$datadir"
|
||||
chmod -R o-rwx "$datadir"
|
||||
chown -R $app:www-data "$datadir"
|
||||
|
||||
#=================================================
|
||||
# SPECIFIC RESTORATION
|
||||
|
@ -114,7 +113,7 @@ yunohost service add $app --description="Client Web IRC" --log="/var/log/$app/$a
|
|||
#=================================================
|
||||
ynh_script_progression --message="Starting a systemd service..."
|
||||
|
||||
ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="Available at http"
|
||||
ynh_systemd_action --service_name=$app --action=start --log_path=systemd
|
||||
|
||||
#=================================================
|
||||
# GENERIC FINALIZATION
|
||||
|
|
117
scripts/upgrade
117
scripts/upgrade
|
@ -18,9 +18,8 @@ app=$YNH_APP_INSTANCE_NAME
|
|||
|
||||
domain=$(ynh_app_setting_get --app=$app --key=domain)
|
||||
path_url=$(ynh_app_setting_get --app=$app --key=path)
|
||||
is_public=$(ynh_app_setting_get --app=$app --key=is_public)
|
||||
final_path=$(ynh_app_setting_get --app=$app --key=final_path)
|
||||
config_path=$(ynh_app_setting_get --app=$app --key=config_path)
|
||||
datadir=$(ynh_app_setting_get --app=$app --key=datadir)
|
||||
port=$(ynh_app_setting_get --app=$app --key=port)
|
||||
|
||||
#=================================================
|
||||
|
@ -30,36 +29,10 @@ ynh_script_progression --message="Checking version..."
|
|||
|
||||
upgrade_type=$(ynh_check_app_version_changed)
|
||||
|
||||
#=================================================
|
||||
# ENSURE DOWNWARD COMPATIBILITY
|
||||
#=================================================
|
||||
ynh_script_progression --message="Ensuring downward compatibility..."
|
||||
|
||||
# Fix is_public as a boolean value
|
||||
if [ "$is_public" = "Yes" ]; then
|
||||
ynh_app_setting_set --app=$app --key=is_public --value=1
|
||||
is_public=1
|
||||
elif [ "$is_public" = "No" ]; then
|
||||
ynh_app_setting_set --app=$app --key=is_public --value=0
|
||||
is_public=0
|
||||
fi
|
||||
|
||||
# If final_path doesn't exist, create it
|
||||
if [ -z "$final_path" ]; then
|
||||
final_path=/var/www/$app
|
||||
ynh_app_setting_set --app=$app --key=final_path --value=$final_path
|
||||
fi
|
||||
|
||||
# If config_path doesn't exist, create it
|
||||
if [ -z "$config_path" ]; then
|
||||
config_path=/home/yunohost.app/$app
|
||||
ynh_app_setting_set --app=$app --key=config_path --value=$config_path
|
||||
fi
|
||||
|
||||
#=================================================
|
||||
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
|
||||
#=================================================
|
||||
ynh_script_progression --message="Backing up $app before upgrading (may take a while)..."
|
||||
ynh_script_progression --message="Backing up the app before upgrading (may take a while)..."
|
||||
|
||||
# Backup the current version of the app
|
||||
ynh_backup_before_upgrade
|
||||
|
@ -71,6 +44,31 @@ ynh_clean_setup () {
|
|||
# Exit if an error occurs during the execution of the script
|
||||
ynh_abort_if_errors
|
||||
|
||||
#=================================================
|
||||
# ENSURE DOWNWARD COMPATIBILITY
|
||||
#=================================================
|
||||
ynh_script_progression --message="Ensuring downward compatibility..."
|
||||
|
||||
# If final_path doesn't exist, create it
|
||||
if [ -z "$final_path" ]; then
|
||||
final_path=/var/www/$app
|
||||
ynh_app_setting_set --app=$app --key=final_path --value=$final_path
|
||||
fi
|
||||
|
||||
# If datadir doesn't exist, create it
|
||||
if [ -z "$datadir" ]; then
|
||||
datadir=/home/yunohost.app/$app
|
||||
mkdir -p /home/yunohost.app/$app
|
||||
ynh_app_setting_set --app=$app --key=datadir --value=$datadir
|
||||
fi
|
||||
|
||||
# Cleaning legacy permissions
|
||||
if ynh_legacy_permissions_exists; then
|
||||
ynh_legacy_permissions_delete_all
|
||||
|
||||
ynh_app_setting_delete --app=$app --key=is_public
|
||||
fi
|
||||
|
||||
#=================================================
|
||||
# STANDARD UPGRADE STEPS
|
||||
#=================================================
|
||||
|
@ -78,7 +76,15 @@ ynh_abort_if_errors
|
|||
#=================================================
|
||||
ynh_script_progression --message="Stopping a systemd service..."
|
||||
|
||||
ynh_systemd_action --service_name=$app --action="stop" --log_path="systemd"
|
||||
ynh_systemd_action --service_name=$app --action=stop --log_path=systemd
|
||||
|
||||
#=================================================
|
||||
# CREATE DEDICATED USER
|
||||
#=================================================
|
||||
ynh_script_progression --message="Making sure dedicated system user exists..."
|
||||
|
||||
# Create a dedicated user (if not existing)
|
||||
ynh_system_user_create --username=$app --home_dir="$final_path"
|
||||
|
||||
#=================================================
|
||||
# DOWNLOAD, CHECK AND UNPACK SOURCE
|
||||
|
@ -88,12 +94,16 @@ if [ "$upgrade_type" == "UPGRADE_APP" ]
|
|||
then
|
||||
ynh_script_progression --message="Upgrading source files..."
|
||||
|
||||
ynh_secure_remove --file=$final_path
|
||||
|
||||
ynh_secure_remove --file="$final_path"
|
||||
# Download, check integrity, uncompress and patch the source from app.src
|
||||
ynh_setup_source --dest_dir="$final_path"
|
||||
ynh_setup_source --dest_dir=$final_path
|
||||
fi
|
||||
|
||||
chmod 750 "$final_path"
|
||||
chmod -R o-rwx "$final_path"
|
||||
chown -R $app:www-data "$final_path"
|
||||
chown -R $app:www-data $datadir
|
||||
|
||||
#=================================================
|
||||
# NGINX CONFIGURATION
|
||||
#=================================================
|
||||
|
@ -113,14 +123,6 @@ ynh_exec_warn_less ynh_install_nodejs --nodejs_version=$nodejs_version
|
|||
# Install Yarn
|
||||
ynh_install_extra_app_dependencies --repo="deb https://dl.yarnpkg.com/debian/ stable main" --package="yarn" --key="https://dl.yarnpkg.com/debian/pubkey.gpg"
|
||||
|
||||
#=================================================
|
||||
# CREATE DEDICATED USER
|
||||
#=================================================
|
||||
ynh_script_progression --message="Making sure dedicated system user exists..."
|
||||
|
||||
# Create a dedicated user (if not existing)
|
||||
ynh_system_user_create --username=$app
|
||||
|
||||
#=================================================
|
||||
# SPECIFIC UPGRADE
|
||||
#=================================================
|
||||
|
@ -129,49 +131,22 @@ ynh_system_user_create --username=$app
|
|||
|
||||
if [ "$upgrade_type" == "UPGRADE_APP" ]
|
||||
then
|
||||
ynh_script_progression --message="Upgrading the lounge..."
|
||||
pushd $final_path
|
||||
ynh_use_nodejs
|
||||
yarn install
|
||||
ynh_exec_warn_less NODE_ENV=production yarn install
|
||||
yarn add webpack webpack-dev-server --dev
|
||||
ynh_exec_warn_less NODE_ENV=production yarn build
|
||||
popd
|
||||
fi
|
||||
|
||||
#=================================================
|
||||
# MODIFY A CONFIG FILE
|
||||
#=================================================
|
||||
ynh_script_progression --message="Modifying a config file..."
|
||||
|
||||
ynh_backup_if_checksum_is_different --file="$config_path"
|
||||
# Main config File
|
||||
ynh_replace_string --match_string="__PORT__" --replace_string="$port" --target_file="../conf/config.js"
|
||||
|
||||
cp -a ../conf/config.js "$config_path"
|
||||
ynh_store_file_checksum "$config_path/config.js"
|
||||
|
||||
#=================================================
|
||||
# SETUP SYSTEMD
|
||||
#=================================================
|
||||
ynh_script_progression --message="Upgrading systemd configuration..."
|
||||
|
||||
ynh_replace_string --match_string="__APP__" --replace_string="$app" --target_file="../conf/systemd.service"
|
||||
ynh_replace_string --match_string="__FINALPATH__" --replace_string="$final_path" --target_file="../conf/systemd.service"
|
||||
ynh_replace_string --match_string="__ENV_PATH__" --replace_string="$PATH" --target_file="../conf/systemd.service"
|
||||
ynh_replace_string --match_string="__NODE__" --replace_string="$nodejs_path" --target_file="../conf/systemd.service"
|
||||
|
||||
ynh_add_systemd_config
|
||||
|
||||
#=================================================
|
||||
# GENERIC FINALIZATION
|
||||
#=================================================
|
||||
# SECURE FILES AND DIRECTORIES
|
||||
#=================================================
|
||||
ynh_script_progression --message="Securing files and directories..."
|
||||
|
||||
# Set permissions on app files
|
||||
chown -R $app: $final_path
|
||||
chown -R $app: $config_path
|
||||
|
||||
#=================================================
|
||||
# GENERIC FINALIZATION
|
||||
#=================================================
|
||||
|
@ -186,7 +161,7 @@ yunohost service add $app --description="Client Web IRC" --log="/var/log/$app/$a
|
|||
#=================================================
|
||||
ynh_script_progression --message="Starting a systemd service..."
|
||||
|
||||
ynh_systemd_action --service_name=$app --action="start" --log_path="systemd" --line_match="Available at http"
|
||||
ynh_systemd_action --service_name=$app --action=start --log_path=systemd
|
||||
|
||||
#=================================================
|
||||
# RELOAD NGINX
|
||||
|
|
Loading…
Reference in a new issue