{ env, etherpad-lite, etherpad-lite-modules, writeText, pkgs }:
let
listenPort = env.listenPort;
sessionkey = writeText "SESSIONKEY.txt" env.session_key;
apikey = writeText "APIKEY.txt" env.api_key;
keys = [
{
dest = "webapps/tools-etherpad-apikey";
permissions = "0400";
text = env.api_key;
}
{
dest = "webapps/tools-etherpad-sessionkey";
permissions = "0400";
text = env.session_key;
}
{
dest = "webapps/tools-etherpad";
permissions = "0400";
text =
# Make sure we’re not rebuilding whole libreoffice just because of a
# dependency
let libreoffice = (import <nixpkgs> { overlays = []; }).libreoffice-fresh;
in
''
{
"title": "Etherpad",
"favicon": "favicon.ico",
"ip": "127.0.0.1",
"port" : ${env.listenPort},
"showSettingsInAdminPage" : false,
"dbType" : "postgres",
"dbSettings" : {
"user" : "${env.postgresql.user}",
"host" : "${env.postgresql.socket}",
"password": "${env.postgresql.password}",
"database": "${env.postgresql.database}",
"charset" : "utf8mb4"
},
"defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http:\/\/etherpad.org\n",
"padOptions": {
"noColors": false,
"showControls": true,
"showChat": true,
"showLineNumbers": true,
"useMonospaceFont": false,
"userName": false,
"userColor": false,
"rtl": false,
"alwaysShowChat": false,
"chatAndUsers": false,
"lang": "en-gb"
},
"suppressErrorsInPadText" : false,
"requireSession" : false,
"editOnly" : false,
"sessionNoPassword" : false,
"minify" : true,
"maxAge" : 21600,
"abiword" : null,
"soffice" : "${libreoffice}/bin/soffice",
"tidyHtml" : "${pkgs.html-tidy}/bin/tidy",
"allowUnknownFileEnds" : true,
"requireAuthentication" : false,
"requireAuthorization" : false,
"trustProxy" : false,
"disableIPlogging" : false,
"automaticReconnectionTimeout" : 0,
"scrollWhenFocusLineIsOutOfViewport": {
"percentage": {
"editionAboveViewport": 0,
"editionBelowViewport": 0
},
"duration": 0,
"scrollWhenCaretIsInTheLastLineOfViewport": false,
"percentageToScrollWhenUserPressesArrowUp": 0
},
"users": {
"ldapauth": {
"url": "ldaps://${env.ldap.host}",
"accountBase": "${env.ldap.base}",
"accountPattern": "(&(memberOf=cn=users,cn=etherpad,ou=services,dc=immae,dc=eu)(uid={{username}}))",
"displayNameAttribute": "cn",
"searchDN": "cn=etherpad,ou=services,dc=immae,dc=eu",
"searchPWD": "${env.ldap.password}",
"groupSearchBase": "${env.ldap.base}",
"groupAttribute": "member",
"groupAttributeIsDN": true,
"searchScope": "sub",
"groupSearch": "(memberOf=cn=groups,cn=etherpad,ou=services,dc=immae,dc=eu)",
"anonymousReadonly": false
}
},
"socketTransportProtocols" : ["xhr-polling", "jsonp-polling", "htmlfile"],
"loadTest": false,
"indentationOnNewLine": false,
"toolbar": {
"left": [
["bold", "italic", "underline", "strikethrough"],
["orderedlist", "unorderedlist", "indent", "outdent"],
["undo", "redo"],
["clearauthorship"]
],
"right": [
["importexport", "timeslider", "savedrevision"],
["settings", "embed"],
["showusers"]
],
"timeslider": [
["timeslider_export", "timeslider_returnToPad"]
]
},
"loglevel": "INFO",
"logconfig" : { "appenders": [ { "type": "console" } ] }
}
'';
}
];
webappDir = (etherpad-lite.override {
session_key = "/var/secrets/webapps/tools-etherpad-sessionkey";
api_key = "/var/secrets/webapps/tools-etherpad-apikey";
}).withModules etherpad-lite-modules;
in
{
inherit webappDir keys listenPort;
}