nomad

HCL and Docker files for Nomad deployments
git clone https://git.in0rdr.ch/nomad.git
Log | Files | Refs | Pull requests |Archive

commit e4146310f154cf4629482106bb0d2793ed665571
parent dc26ebe7a487f05ae841dea77b9f989e39eab781
Author: Andreas Gruhler <agruhl@gmx.ch>
Date:   Thu, 14 Aug 2025 00:01:10 +0200

fix(thelounge): config file path

Diffstat:
Mhcl/default/thelounge/templates/config.js.tmpl | 1022++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mhcl/default/thelounge/thelounge.nomad | 2+-
2 files changed, 512 insertions(+), 512 deletions(-)

diff --git a/hcl/default/thelounge/templates/config.js.tmpl b/hcl/default/thelounge/templates/config.js.tmpl @@ -3,515 +3,515 @@ "use strict"; module.exports = { - // ## Server settings - - // ### `public` - // - // When set to `true`, The Lounge starts in public mode. When set to `false`, - // it starts in private mode. - // - // - 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. - // - // This value is set to `false` by default. - public: false, - - // ### `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: "0.0.0.0", - - // ### `port` - // - // Set the port to listen to. - // - // This value is set to `9000` by default. - port: {{ env "NOMAD_PORT_http" }}, - - // ### `bind` - // - // 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` - // - // 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` - // - // 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. - // - // This value is set to `10000` by default. - maxHistory: 10000, - - // ### `https` - // - // These settings are used to run The Lounge's web server using encrypted TLS. - // - // If you want more control over the webserver, - // [use a reverse proxy instead](https://thelounge.chat/docs/guides/reverse-proxies). - // - // The available keys for the `https` object are: - // - // - `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` - // - // 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 when The Lounge - // restarts. - // - // This value is set to `false` by default. - prefetchStorage: false, - - // ### `prefetchMaxImageSize` - // - // 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, - - // ### prefetchMaxSearchSize - // - // This value sets the maximum response size allowed when finding the Open - // Graph tags for link previews. The entire response is temporarily stored - // in memory and for some sites like YouTube this can easily exceed 300 - // kilobytes. - // - // This value is set to `50` kilobytes by default. - prefetchMaxSearchSize: 50, - - // ### `prefetchTimeout` - // - // When `prefetch` is enabled, this value sets the number of milliseconds - // before The Lounge gives up attempting to fetch a link. This can be useful - // if you've increased the `prefetchMaxImageSize`. - // - // Take caution, however, that an inordinately large value may lead to - // performance issues or even a denial of service, since The Lounge will not - // be able to clean up outgoing connections as quickly. Usually the default - // value is appropriate, so only change it if necessary. - // - // This value is set to `5000` milliseconds by default. - prefetchTimeout: 5000, - - // ### `fileUpload` - // - // Allow uploading files to the server hosting The Lounge. - // - // 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. - // - // The available keys for the `fileUpload` object are: - // - // - `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 to 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` - // - // Set `socket.io` transports. - // - // This value is set to `["polling", "websocket"]` by default. - transports: ["polling", "websocket"], - - // ### `leaveMessage` - // - // Set users' default `quit` and `part` messages if they are not providing - // one. - // - // This value is set to `"The Lounge - https://thelounge.chat"` by - // default. - leaveMessage: "The Lounge - https://thelounge.chat", - - // ## Default network - - // ### `defaults` - // - // Specifies default network information that will be used as placeholder - // values in the *Connect* window. - // - // The available keys for the `defaults` object are: - // - // - `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 displayed by some clients. Defaults to the nick if set to "" - // - `leaveMessage`: Network specific leave message (overrides global leaveMessage) - // - `join`: Comma-separated list of channels to auto-join once connected. - // - // This value is set to connect to the official channel of The Lounge on - // 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: "Soju", - host: "oc.in0rdr.ch", - port: 6697, - password: "", - tls: true, - rejectUnauthorized: true, - nick: "thelounge%%", - username: "thelounge", - realname: "", - leaveMessage: "", - join: "" - }, - - // ### `lockNetwork` - // - // 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. - // - // This value is set to `false` by default. - lockNetwork: false, - - // ## User management - - // ### `messageStorage` - - // 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. - // - // 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. - // - // This value is set to `["sqlite", "text"]` by default. - messageStorage: ["sqlite", "text"], - - // ### `storagePolicy` - - // When the sqlite storage is in use, control the maximum storage duration. - // A background task will periodically clean up messages older than the limit. - - // The available keys for the `storagePolicy` object are: - // - // - `enabled`: If this is false, the cleaning task is not running. - // - `maxAgeDays`: Maximum age of an entry in days. - // - `deletionPolicy`: Controls what types of messages are being deleted. - // Valid options are: - // - `statusOnly`: Only delete message types which are status related (e.g. away, back, join, parts, mode, ctcp...) - // but keep actual messages from nicks. This keeps the DB size down while retaining "precious" messages. - // - `everything`: Delete everything, including messages from irc nicks - storagePolicy: { - enabled: false, - maxAgeDays: 7, - deletionPolicy: "statusOnly", - }, - - // ### `useHexIp` - // - // When set to `true`, users' IP addresses will be encoded as hex. - // - // 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. - // - // This value is set to `false` by default. - useHexIp: false, - - // ## WEBIRC 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. - // - // 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: { - enable: false, - port: 113, - }, - - // ### `oidentd` - // - // 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. - // - // 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. 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. 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 likely - // be returned; - // - a search scope `searchDN/scope` (see LDAP documentation); - // - 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 configuration. - // - // The available keys for the `ldap` object are: - ldap: { - // - `enable`: when set to `false`, LDAP support is disabled and all other - // values are ignored. - enable: false, - - // - `url`: A url of the form `ldaps://<ip>:<port>`. - // For plain connections, use the `ldap` scheme. - url: "ldaps://example.com", - - // - `tlsOptions`: LDAP connection TLS options (only used if scheme is - // `ldaps://`). It is an object whose values are Node.js' `tls.connect()` - // options. It is set to `{}` by default. - // For example, this option can be used in order to force the use of IPv6: - // ```js - // { - // host: 'my::ip::v6', - // servername: 'example.com' - // } - // ``` - tlsOptions: {}, - - // - `primaryKey`: LDAP primary key. It is set to `"uid"` by default. - primaryKey: "uid", - - // - `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. - - // - `searchDN`: LDAP search DN settings. This defines the procedure by - // which The Lounge first looks for the user DN before authenticating them. - // It is ignored if `baseDN` is specified. It is an object with the - // following keys: - searchDN: { - // - `rootDN`: This bind DN is used to query the server for the DN of - // the user. This is supposed to be a system user that has access in - // read-only to the DNs of the people that are allowed to log in. - // It is set to `"cn=thelounge,ou=system-users,dc=example,dc=com"` by - // default. - rootDN: "cn=thelounge,ou=system-users,dc=example,dc=com", - - // - `rootPassword`: Password of The Lounge LDAP system user. - rootPassword: "1234", - - // - `filter`: it is set to `"(&(objectClass=person)(memberOf=ou=accounts,dc=example,dc=com))"` - // by default. - filter: "(&(objectClass=person)(memberOf=ou=accounts,dc=example,dc=com))", - - // - `base`: LDAP search base (search only within this node). It is set - // to `"dc=example,dc=com"` by default. - base: "dc=example,dc=com", - - // - `scope`: LDAP search scope. It is set to `"sub"` by default. - scope: "sub", - }, - }, - - // ## 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, - }, + // ## Server settings + + // ### `public` + // + // When set to `true`, The Lounge starts in public mode. When set to `false`, + // it starts in private mode. + // + // - 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. + // + // This value is set to `false` by default. + public: false, + + // ### `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: "0.0.0.0", + + // ### `port` + // + // Set the port to listen to. + // + // This value is set to `9000` by default. + port: {{ env "NOMAD_PORT_http" }}, + + // ### `bind` + // + // 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` + // + // 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` + // + // 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. + // + // This value is set to `10000` by default. + maxHistory: 10000, + + // ### `https` + // + // These settings are used to run The Lounge's web server using encrypted TLS. + // + // If you want more control over the webserver, + // [use a reverse proxy instead](https://thelounge.chat/docs/guides/reverse-proxies). + // + // The available keys for the `https` object are: + // + // - `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` + // + // 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 when The Lounge + // restarts. + // + // This value is set to `false` by default. + prefetchStorage: false, + + // ### `prefetchMaxImageSize` + // + // 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, + + // ### prefetchMaxSearchSize + // + // This value sets the maximum response size allowed when finding the Open + // Graph tags for link previews. The entire response is temporarily stored + // in memory and for some sites like YouTube this can easily exceed 300 + // kilobytes. + // + // This value is set to `50` kilobytes by default. + prefetchMaxSearchSize: 50, + + // ### `prefetchTimeout` + // + // When `prefetch` is enabled, this value sets the number of milliseconds + // before The Lounge gives up attempting to fetch a link. This can be useful + // if you've increased the `prefetchMaxImageSize`. + // + // Take caution, however, that an inordinately large value may lead to + // performance issues or even a denial of service, since The Lounge will not + // be able to clean up outgoing connections as quickly. Usually the default + // value is appropriate, so only change it if necessary. + // + // This value is set to `5000` milliseconds by default. + prefetchTimeout: 5000, + + // ### `fileUpload` + // + // Allow uploading files to the server hosting The Lounge. + // + // 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. + // + // The available keys for the `fileUpload` object are: + // + // - `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 to 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` + // + // Set `socket.io` transports. + // + // This value is set to `["polling", "websocket"]` by default. + transports: ["polling", "websocket"], + + // ### `leaveMessage` + // + // Set users' default `quit` and `part` messages if they are not providing + // one. + // + // This value is set to `"The Lounge - https://thelounge.chat"` by + // default. + leaveMessage: "The Lounge - https://thelounge.chat", + + // ## Default network + + // ### `defaults` + // + // Specifies default network information that will be used as placeholder + // values in the *Connect* window. + // + // The available keys for the `defaults` object are: + // + // - `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 displayed by some clients. Defaults to the nick if set to "" + // - `leaveMessage`: Network specific leave message (overrides global leaveMessage) + // - `join`: Comma-separated list of channels to auto-join once connected. + // + // This value is set to connect to the official channel of The Lounge on + // 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: "Soju", + host: "oc.in0rdr.ch", + port: 6697, + password: "", + tls: true, + rejectUnauthorized: true, + nick: "thelounge%%", + username: "thelounge", + realname: "", + leaveMessage: "", + join: "" + }, + + // ### `lockNetwork` + // + // 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. + // + // This value is set to `false` by default. + lockNetwork: false, + + // ## User management + + // ### `messageStorage` + + // 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. + // + // 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. + // + // This value is set to `["sqlite", "text"]` by default. + messageStorage: ["sqlite", "text"], + + // ### `storagePolicy` + + // When the sqlite storage is in use, control the maximum storage duration. + // A background task will periodically clean up messages older than the limit. + + // The available keys for the `storagePolicy` object are: + // + // - `enabled`: If this is false, the cleaning task is not running. + // - `maxAgeDays`: Maximum age of an entry in days. + // - `deletionPolicy`: Controls what types of messages are being deleted. + // Valid options are: + // - `statusOnly`: Only delete message types which are status related (e.g. away, back, join, parts, mode, ctcp...) + // but keep actual messages from nicks. This keeps the DB size down while retaining "precious" messages. + // - `everything`: Delete everything, including messages from irc nicks + storagePolicy: { + enabled: false, + maxAgeDays: 7, + deletionPolicy: "statusOnly", + }, + + // ### `useHexIp` + // + // When set to `true`, users' IP addresses will be encoded as hex. + // + // 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. + // + // This value is set to `false` by default. + useHexIp: false, + + // ## WEBIRC 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. + // + // 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: { + enable: false, + port: 113, + }, + + // ### `oidentd` + // + // 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. + // + // 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. 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. 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 likely + // be returned; + // - a search scope `searchDN/scope` (see LDAP documentation); + // - 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 configuration. + // + // The available keys for the `ldap` object are: + ldap: { + // - `enable`: when set to `false`, LDAP support is disabled and all other + // values are ignored. + enable: false, + + // - `url`: A url of the form `ldaps://<ip>:<port>`. + // For plain connections, use the `ldap` scheme. + url: "ldaps://example.com", + + // - `tlsOptions`: LDAP connection TLS options (only used if scheme is + // `ldaps://`). It is an object whose values are Node.js' `tls.connect()` + // options. It is set to `{}` by default. + // For example, this option can be used in order to force the use of IPv6: + // ```js + // { + // host: 'my::ip::v6', + // servername: 'example.com' + // } + // ``` + tlsOptions: {}, + + // - `primaryKey`: LDAP primary key. It is set to `"uid"` by default. + primaryKey: "uid", + + // - `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. + + // - `searchDN`: LDAP search DN settings. This defines the procedure by + // which The Lounge first looks for the user DN before authenticating them. + // It is ignored if `baseDN` is specified. It is an object with the + // following keys: + searchDN: { + // - `rootDN`: This bind DN is used to query the server for the DN of + // the user. This is supposed to be a system user that has access in + // read-only to the DNs of the people that are allowed to log in. + // It is set to `"cn=thelounge,ou=system-users,dc=example,dc=com"` by + // default. + rootDN: "cn=thelounge,ou=system-users,dc=example,dc=com", + + // - `rootPassword`: Password of The Lounge LDAP system user. + rootPassword: "1234", + + // - `filter`: it is set to `"(&(objectClass=person)(memberOf=ou=accounts,dc=example,dc=com))"` + // by default. + filter: "(&(objectClass=person)(memberOf=ou=accounts,dc=example,dc=com))", + + // - `base`: LDAP search base (search only within this node). It is set + // to `"dc=example,dc=com"` by default. + base: "dc=example,dc=com", + + // - `scope`: LDAP search scope. It is set to `"sub"` by default. + scope: "sub", + }, + }, + + // ## 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, + }, }; diff --git a/hcl/default/thelounge/thelounge.nomad b/hcl/default/thelounge/thelounge.nomad @@ -69,7 +69,7 @@ job "thelounge" { ports = ["http"] volumes = [ # mount the templated config from the task directory to the container - "local/config.js:/etc/thelounge/config.js", + "local/config.js:/var/opt/thelounge/config.js", ] }