Browse Source

first commit

master
alpcentaur 3 years ago
commit
70323168b1
1553 changed files with 212828 additions and 0 deletions
  1. +206
    -0
      README.md
  2. +42
    -0
      docker/build/deb-rust-sncf/Dockerfile
  3. +34
    -0
      docker/build/deb-rust-sncf/config.toml
  4. +438
    -0
      docker/build/deb-rust-sncf/forward.rs
  5. +281
    -0
      docker/build/deb-rust-sncf/index.css
  6. +148
    -0
      docker/build/deb-rust-sncf/index.html
  7. +97
    -0
      docker/build/deb-rust-sncf/link.html
  8. +118
    -0
      docker/build/deb-rust-sncf/main.rs
  9. +59
    -0
      docker/build/deb-rust-sncf/templates.rs
  10. +3
    -0
      docker/build/nextcloud-web/Dockerfile
  11. +173
    -0
      docker/build/nextcloud-web/backup/nginx.conf
  12. +173
    -0
      docker/build/nextcloud-web/nginx.conf
  13. +127
    -0
      docker/build/nextcloud/Dockerfile
  14. +185
    -0
      docker/compose/docker-compose.yml
  15. +130
    -0
      docker/compose/nextcloud.yml
  16. +2
    -0
      docker/compose/not.es
  17. BIN
      docker/compose/traefik-migration/traefik-migration-tool
  18. +30
    -0
      docker/compose/traefik-migration/traefik.toml
  19. +179
    -0
      docker/overlays/collabora/loolwsd.xml
  20. +422
    -0
      docker/overlays/nextcloud/html/AUTHORS
  21. +105
    -0
      docker/overlays/nextcloud/html/console.php
  22. +1
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/.gitignore
  23. +19
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/.scrutinizer.yml
  24. +44
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/.travis.yml
  25. +9
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/.tx/config
  26. +74
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/CHANGELOG.md
  27. +661
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/LICENSE
  28. +177
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/Makefile
  29. +30
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/README.md
  30. +25
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/appinfo/app.php
  31. +43
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/appinfo/info.xml
  32. +34
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/appinfo/routes.php
  33. +57
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/css/apporder.css
  34. +125
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/js/apporder.js
  35. +8
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/ar.js
  36. +6
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/ar.json
  37. +6
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/ast.json
  38. +9
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/bg.js
  39. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/cs.json
  40. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/da.json
  41. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/de.json
  42. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/el.js
  43. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/el.json
  44. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/en_GB.json
  45. +11
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/eo.js
  46. +9
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/eo.json
  47. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es.js
  48. +8
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_419.js
  49. +6
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_419.json
  50. +8
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_CL.js
  51. +6
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_CO.json
  52. +6
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_DO.json
  53. +8
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_EC.js
  54. +6
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_EC.json
  55. +8
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_HN.js
  56. +10
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_MX.js
  57. +0
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_NI.js
  58. +6
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_NI.json
  59. +8
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_PA.js
  60. +8
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_PE.js
  61. +8
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_PY.js
  62. +8
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_SV.js
  63. +6
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_SV.json
  64. +8
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_UY.js
  65. +8
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/et_EE.js
  66. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/eu.js
  67. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/eu.json
  68. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/fa.js
  69. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/fi.js
  70. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/fi.json
  71. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/fr.js
  72. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/gl.json
  73. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/he.js
  74. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/hr.json
  75. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/hu.js
  76. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/hu.json
  77. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/id.json
  78. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/it.js
  79. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/it.json
  80. +6
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/ka_GE.json
  81. +9
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/ko.json
  82. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/lt_LT.js
  83. +11
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/lv.js
  84. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/nb.js
  85. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/nl.json
  86. +9
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/nn_NO.json
  87. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/pl.json
  88. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/pt_BR.json
  89. +11
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/pt_PT.js
  90. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/ru.js
  91. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/sk.json
  92. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/sl.json
  93. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/sv.js
  94. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/tr.js
  95. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/tr.json
  96. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/uk.json
  97. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/vi.js
  98. +12
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/zh_CN.json
  99. +14
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/l10n/zh_HK.js
  100. +86
    -0
      docker/overlays/nextcloud/html/custom_apps/apporder/lib/Controller/AppController.php

+ 206
- 0
README.md View File

@ -0,0 +1,206 @@
***
____ _ _ ____ _____
/ ___|| \ | |/ ___| ___|
\___ \| \| | | | |_
___) | |\ | |___| _|
|____/|_| \_|\____|_|
____ _ ____
| _ \ ___ ___| | _____ _ __ / ___|___ _ __ ___ _ __ ___ ___ ___
| | | |/ _ \ / __| |/ / _ \ '__|____| | / _ \| '_ ` _ \| '_ \ / _ \/ __|/ _ \
| |_| | (_) | (__| < __/ | |_____| |__| (_) | | | | | | |_) | (_) \__ \ __/
|____/ \___/ \___|_|\_\___|_| \____\___/|_| |_| |_| .__/ \___/|___/\___|
|_|
***
## Setting up the Nextcloud containers
# Changes in docker/compose/docker-compose.yml
Go to docker-compose.yml and change all AAAAApw to your passwords.
Then change example.org to your domain.
# Install and start docker compose
Point your domain to the public ip of your server.
Enter the command to start dockerd after installing docker on your host system:
```bash
sudo systemctl start docker
```
Install docker-compose on your host os and in the folder docker/compose do:
```bash
sudo docker-compose up
```
## Setting up nextcloud with deb-rust-sncf container
# Configure Nextcloud in the admin panel like in the SNCF Doku
Then open example.org in your favourite browser,
create admin account, uncheck install recommended apps.
Do everything as described in sncf (uncheck things in settings, uninstall
everything except forms, apporder) except the alternative custom css if you want
a save button that does nothing than reload (nextcloud does already save realtime)
but the realtime saving could be confusing for some users.
custom css code for save button:
```CSS
#contactsmenu {
display: none !important;
}
#appmenu {
visibility: hidden;
}
#appmenu li:hover a, #appmenu li a:focus {
font-size: 12px;
}
#appmenu li span {
visibility: hidden;
background-color: yellow;
}
#appmenu li svg {
visibility: hidden;
background-color: yellow;
}
#appmenu li a:last-child::after {
content: "Save";
#padding: 10px;
#margin: 10px;
height: 50%;
width: 200%;
padding-top: 7px;
padding-right: 6px;
#padding-bottom: 10px;
padding-left: 10px;
visibility: visible;
background-color: rgba(237, 237, 237, .7);
color: black;
#text-shadow: 0px 0px 8px black;
font-family: "Mono", Courier, monospace;
font-weight: bold;
border: 1px solid rgba(237, 237, 237, .7);
border-radius: 15px;
}
#appmenu li a:last-child:hover:after {
background-color: rgba(237, 237, 237, 0.7);
border: 1px solid rgba(77, 77, 77, 0.3);
#background-color: #fbc617;
visibility: visible;
}
#appmenu li a:last-child:focus:after {
content: "✓Save";
background-color: rgba(237, 237, 237, 0.7);
border: 1px solid rgba(77, 77, 77, 0.3);
#background-color: #fbc617;
visibility: visible;
}
#settings {
display:none !important;
}
.app-sidebar-tabs__content > ul:nth-child(2) {
display:none !important;
}
.app-sidebar-tabs__content > ul:nth-child(4) > li:nth-child(1) {
display:none !important;
}
.app-sidebar-tabs__content > ul:nth-child(4) > li:nth-child(2) {
display:none !important;
}
```
# Change nextcloud config for deb-rust-sncf
then changes (with your domain) in config.php
(/opt/docker/overlays/nextcloud/html/config):
```PHP
'simpleSignUpLink.shown' => false
'defaultapp' => 'apporder'
'trusted_domains' =>
array (
0 => 'nextcloud-web',
1 => 'example.org',
),
'trusted_proxies' => ['traefik', 'deb-rust-sncf'],
'overwrite.cli.url' => 'http://example.org',
```
get the updated config.php in your nextcloud instance with the following command:
```bash
docker exec -u www-data nextcloud php occ files:scan --all
```
# Change nextcloud definition in compose file and uncomment deb-rust-sncf
Then open the docker-compose.yml file, comment all labels of the container
nextcloud-web.
Now uncomment the whole deb-rust-sncf container.
If you want to customize the landing or link page, some files are exposed already
(and then copied in the container during build) in the folder build/deb-rust-sncf
Regarding the sncf proxy, the files link.html and forward.rs have changes.
These changes give the functionality to send the admin link to users mail.
Until now, the post http request and the mail adress are saved in a file on the
container deb-rust-sncf.
# Configure rust build withing deb-rust-sncf
Go to docker/build/deb-rust-sncf anyway and make changes in config.toml according
the sncf wiki.
Change the passwords AAAAA and example.org to your domain.
# Remove and restart all containers
Now stop all containers with either issuing
```bash
sudo docker-compose stop
```
or pressing `Ctrl-C`
Delete the WHOLE network with the command
```bash
sudo docker system prune --all
```
Then restart with
```bash
sudo docker-compose up
```
in the folder docker/compose

+ 42
- 0
docker/build/deb-rust-sncf/Dockerfile View File

@ -0,0 +1,42 @@
FROM rust:slim
WORKDIR /opt
# Install needed dependecies
RUN echo "deb http://ftp.de.debian.org/debian unstable main contrib" | tee -a /etc/apt/sources.list
RUN apt-get update && apt-get install -y libmysql++-dev git
RUN git clone https://git.42l.fr/neil/sncf.git
WORKDIR /opt/sncf
COPY config.toml /opt/sncf/config.toml
# graphics individualization
COPY Digi_3corner_up.png /opt/sncf/templates/assets/logo.svg
COPY white-background.png /opt/sncf/templates/assets/index-background.png
COPY Digi_3corner.png /opt/sncf/templates/assets/flavicon.ico
COPY index.css /opt/sncf/templates/assets/index.css
COPY index.html /opt/sncf/templates/index.html
COPY link.html /opt/sncf/templates/link.html
COPY forward.rs /opt/sncf/src/forward.rs
#COPY templates.rs /opt/sncf/src/templates.rs
# The written is just firstly a hack
COPY lang.json /opt/sncf/lang.json
CMD cargo run --no-default-features --features mysql

+ 34
- 0
docker/build/deb-rust-sncf/config.toml View File

@ -0,0 +1,34 @@
# The address and port sncf will listen
listening_address = "0.0.0.0"
listening_port = 8000
# Public-facing domain for sncf.
# includes protocol, FQDN and port, without the trailing slash.
sncf_url = "http://example.org"
# SQLite: path to the SQLite DB
# PostgreSQL: postgres://user:password@address:port/database
# MySQL: mysql://user:password@address:port/database
database_path = "mysql://nextcloud:AAAAAAAAAAAAAAAAAAAAAAAAAAAAMYSQL@nextcloud-db:3306/nextcloud"
# IP address of the Nextcloud instance, including protocol and port
nextcloud_url = "http://nextcloud-web:80"
# Nextcloud admin account credentials
# TODO hash adminpw
admin_username = "AAAAAAAAAAAusername"
admin_password = "AAAAAAAAAadminpw"
# How many days of inactivity for an admin token before deleting NC accounts
prune_days = 40
# Displays route names and a lot of information
debug_mode = true
# Used to encrypt csrf tokens and csrf cookies.
# Generate random bytes: openssl rand -base64 32
# Then paste the result in this variable
cookie_key = "Af3v5KMNPmwYYBRRjm/W5ds1rHDdyCEvpxVTMLKEKl0="
# Don't touch this unless you know what you're doing
config_version = 2

+ 438
- 0
docker/build/deb-rust-sncf/forward.rs View File

@ -0,0 +1,438 @@
use actix_web::client::{Client, ClientRequest};
use actix_web::{http, web, HttpRequest, HttpResponse};
use askama::Template;
use chrono::Utc;
use regex::Regex;
use std::time::Duration;
use url::Url;
use csrf::{AesGcmCsrfProtection, CsrfProtection};
use crate::config::get_csrf_key;
use crate::account::*;
use crate::config::PAYLOAD_LIMIT;
use crate::config::PROXY_TIMEOUT;
use crate::database::methods::InsertableForm;
use crate::database::structs::Form;
use crate::debug;
use crate::errors::{crash, TrainCrash};
use crate::sniff::*;
use crate::templates::*;
use crate::DbPool;
use crate::CONFIG;
pub async fn forward(
req: HttpRequest,
body: web::Bytes,
url: web::Data<Url>,
client: web::Data<Client>,
) -> Result<HttpResponse, TrainCrash> {
let route = req.uri().path();
if route == "/link/email" {
let email_request_headers = &req;
let email_body = &body;
//let mut body = String::new();
let forged_emailheaders = format!(
"{:?}",
email_request_headers
);
let forged_emailbody = format!(
"{:?}",
email_body
);
//let body = email_response_body.escape_ascii().to_string();
/*email_response_body.read_to_string(&mut body)?;*/
// does not work, because body is in bytes format.
println!("da budy {}",forged_emailbody );
println!("da headers {}",forged_emailheaders);
use std::io::Write;
use std::fs::OpenOptions;
let mut f = OpenOptions::new()
.append(true)
.create(true) // Optionally create the file if it doesn't already exist
.open("/tmp/foo")
.expect("Unable to open file");
//let body_bytes = as_bytes!("{:?}", body);
f.write_all(forged_emailheaders.as_bytes()).expect("Unable to write data");
f.write_all(forged_emailbody.as_bytes()).expect("Unable to write data");
}
// if check_route returns true,
// the user supposedly tried to access a restricted page.
// They get redirected to the main page.
if check_route(route) {
debug(&format!("Restricted route blocked: {}", route));
return Ok(web_redir("/").await.map_err(|e| {
eprintln!("error_redirect: {}", e);
crash(get_lang(&req), "error_redirect")
})?);
}
let forwarded_req = forge_from(route, &req, &url, &client);
// check the request before sending it
// (prevents the user from sending some specific POST requests)
if check_request(route, &body) {
debug(&format!(
"Restricted request: {}",
String::from_utf8_lossy(&body)
));
return Err(crash(get_lang(&req), "error_dirtyhacker"));
}
// send the request to the Nextcloud instance
let mut res = forwarded_req.send_body(body).await.map_err(|e| {
eprintln!("error_forward_resp: {}", e);
crash(get_lang(&req), "error_forward_req")
})?;
let mut client_resp = HttpResponse::build(res.status());
// remove connection as per the spec
// and content-encoding since we have to decompress the traffic to edit it
// and basic-auth, because this feature is not needed.
for (header_name, header_value) in res
.headers()
.iter()
.filter(|(h, _)| *h != "connection" && *h != "content-encoding")
{
client_resp.header(header_name.clone(), header_value.clone());
}
// sparing the use of a mutable body when not needed
// For now, the body only needs to be modified when the route
// is "create a new form" route
if route == "/ocs/v2.php/apps/forms/api/v1/form" {
// retreive the body from the request result
let response_body = res.body().limit(PAYLOAD_LIMIT).await.map_err(|e| {
eprintln!("error_forward_resp: {}", e);
crash(get_lang(&req), "error_forward_resp")
})?;
// if a new form is created, automatically set some fields.
// this is very hackish but it works! for now.
let form_id = check_new_form(&response_body);
if form_id > 0 {
debug(&format!(
"New form. Forging request to set isAnonymous for id {}",
form_id
));
let forged_body = format!(
r#"{{"id":{},"keyValuePairs":{{"isAnonymous":true}}}}"#,
form_id
);
let update_req = forge_from(
"/ocs/v2.php/apps/forms/api/v1/form/update",
&req,
&url,
&client,
)
.set_header("content-length", forged_body.len())
.set_header("content-type", "application/json;charset=utf-8");
let res = update_req.send_body(forged_body).await.map_err(|e| {
eprintln!("error_forward_isanon: {}", e);
crash(get_lang(&req), "error_forward_isanon")
})?;
debug(&format!("(new_form) Request returned {}", res.status()));
}
Ok(client_resp.body(response_body).await.map_err(|e| {
eprintln!("error_forward_clientresp_newform: {}", e);
crash(get_lang(&req), "error_forward_clientresp_newform")
})?)
} else {
Ok(
client_resp.body(res.body().limit(PAYLOAD_LIMIT).await.map_err(|e| {
eprintln!("error_forward_clientresp_newform: {}", e);
crash(get_lang(&req), "error_forward_clientresp_std")
})?),
)
}
// check the response before returning it (unused)
/*if check_response(route, &response_body) {
return Ok(web_redir("/"));
}*/
}
#[derive(Deserialize)]
pub struct LoginToken {
pub token: String,
}
#[derive(Deserialize)]
pub struct CsrfToken {
pub csrf_token: String,
}
pub async fn forward_login(
req: HttpRequest,
params: web::Path<LoginToken>,
client: web::Data<Client>,
dbpool: web::Data<DbPool>,
) -> Result<HttpResponse, TrainCrash> {
// if the user is already logged in, redirect to the Forms app
if is_logged_in(&req).is_some() {
return Ok(web_redir("/apps/forms").await.map_err(|e| {
eprintln!("error_redirect (1:/apps/forms/): {}", e);
crash(get_lang(&req), "error_redirect")
})?);
}
// check if the provided token seems valid. If not, early return.
if !check_token(&params.token) {
debug("Incorrect admin token given in params.");
debug(&format!("Token: {:#?}", params.token));
return Err(crash(get_lang(&req), "error_dirtyhacker"));
}
let conn = dbpool.get().map_err(|e| {
eprintln!("error_forwardlogin_db: {}", e);
crash(get_lang(&req), "error_forwardlogin_db")
})?;
// check if the link exists in DB. if it does, update lastvisit_at.
let formdata = web::block(move || Form::get_from_token(&params.token, &conn))
.await
.map_err(|e| {
eprintln!("error_forwardlogin_db_get (diesel error): {}", e);
crash(get_lang(&req), "error_forwardlogin_db_get")
})?
.ok_or_else(|| {
debug("Token not found.");
crash(get_lang(&req), "error_forwardlogin_notfound")
})?;
// else, try to log the user in with DB data, then redirect.
login(&client, &req, &formdata.nc_username, &formdata.nc_password).await
}
// creates a NC account using a random name and password.
// the account gets associated with a token in sqlite DB.
pub async fn forward_register(
req: HttpRequest,
csrf_post: web::Form<CsrfToken>,
client: web::Data<Client>,
dbpool: web::Data<DbPool>,
) -> Result<HttpResponse, TrainCrash> {
let lang = get_lang(&req);
// if the user is already logged in, redirect to the Forms app
if is_logged_in(&req).is_some() {
return Ok(web_redir("/apps/forms").await.map_err(|e| {
eprintln!("error_redirect (2:/apps/forms/): {}", e);
crash(get_lang(&req), "error_redirect")
})?);
}
// if the user has already generated an admin token, redirect too
if let Some(token) = has_admintoken(&req) {
lazy_static! {
static ref RE: Regex = Regex::new(r#"sncf_admin_token=(?P<token>[0-9A-Za-z_\-]*)"#)
.expect("Error while parsing the sncf_admin_token regex");
}
let admin_token = RE
.captures(&token)
.ok_or_else(|| {
eprintln!("error_forwardregister_tokenparse (no capture)");
crash(get_lang(&req), "error_forwardregister_tokenparse")
})?
.name("token")
.ok_or_else(|| {
eprintln!("error_forwardregister_tokenparse (no capture named token)");
crash(get_lang(&req), "error_forwardregister_tokenparse")
})?
.as_str();
// sanitize the token beforehand, cookies are unsafe
if check_token(&admin_token) {
return Ok(
web_redir(&format!("{}/admin/{}", CONFIG.sncf_url, &admin_token))
.await
.map_err(|e| {
eprintln!("error_redirect (admin): {}", e);
crash(get_lang(&req), "error_redirect")
})?,
);
} else {
debug("Incorrect admin token given in cookies.");
debug(&format!("Token: {:#?}", &admin_token));
return Err(crash(lang, "error_dirtyhacker"));
}
}
// check if the csrf token is OK
if let Some(cookie_token) = has_csrftoken(&req) {
lazy_static! {
static ref RE: Regex = Regex::new(r#"sncf_csrf_cookie=(?P<token>[0-9A-Za-z_\-]*)"#)
.expect("Error while parsing the sncf_csrf_cookie regex");
}
let cookie_csrf_token = RE
.captures(&cookie_token)
.ok_or_else(|| {
eprintln!("error_csrf_cookie: no capture");
crash(get_lang(&req), "error_csrf_cookie")
})?
.name("token")
.ok_or_else(|| {
eprintln!("error_csrf_cookie: no capture named token");
crash(get_lang(&req), "error_csrf_cookie")
})?
.as_str();
let raw_ctoken = base64::decode_config(cookie_csrf_token.as_bytes(), base64::URL_SAFE_NO_PAD).map_err(|e| {
eprintln!("error_csrf_cookie (base64): {}", e);
crash(get_lang(&req), "error_csrf_cookie")
})?;
let raw_token = base64::decode_config(csrf_post.csrf_token.as_bytes(), base64::URL_SAFE_NO_PAD).map_err(|e| {
eprintln!("error_csrf_token (base64): {}", e);
crash(get_lang(&req), "error_csrf_token")
})?;
let seed = AesGcmCsrfProtection::from_key(get_csrf_key());
let parsed_token = seed.parse_token(&raw_token).expect("token not parsed");
let parsed_cookie = seed.parse_cookie(&raw_ctoken).expect("cookie not parsed");
if !seed.verify_token_pair(&parsed_token, &parsed_cookie) {
debug("warn: CSRF token doesn't match.");
return Err(crash(lang, "error_csrf_token"));
}
}
else {
debug("warn: missing CSRF token.");
return Err(crash(lang, "error_csrf_cookie"));
}
let nc_username = gen_name();
println!("gen_name: {}", nc_username);
let nc_password = gen_token(45);
// attempts to create the account
create_account(&client, &nc_username, &nc_password, lang.clone()).await?;
debug(&format!("Created user {}", nc_username));
let conn = dbpool.get().map_err(|e| {
eprintln!("error_forwardregister_pool: {}", e);
crash(lang.clone(), "error_forwardregister_pool")
})?;
let token = gen_token(45);
let token_mv = token.clone();
// store the result in DB
let form_result = web::block(move || Form::insert(
InsertableForm {
created_at: Utc::now().naive_utc(),
lastvisit_at: Utc::now().naive_utc(),
token: token_mv,
nc_username,
nc_password,
},
&conn,
))
.await;
if form_result.is_err() {
return Err(crash(lang, "error_forwardregister_db"));
}
Ok(HttpResponse::Ok()
.content_type("text/html")
.set_header(
"Set-Cookie",
format!("sncf_admin_token={}; HttpOnly; SameSite=Strict", &token),
)
.body(
TplLink {
lang: &lang,
admin_token: &token,
config: &CONFIG,
}
.render()
.map_err(|e| {
eprintln!("error_tplrender (TplLink): {}", e);
crash(lang.clone(), "error_tplrender")
})?,
)
.await
.map_err(|e| {
eprintln!("error_tplrender_resp (TplLink): {}", e);
crash(lang, "error_tplrender_resp")
})?)
}
// create a new query destined to the nextcloud instance
// needed to forward any query
fn forge_from(
route: &str,
req: &HttpRequest,
url: &web::Data<Url>,
client: &web::Data<Client>,
) -> ClientRequest {
let mut new_url = url.get_ref().clone();
new_url.set_path(route);
new_url.set_query(req.uri().query());
// insert forwarded header if we can
let mut forwarded_req = client
.request_from(new_url.as_str(), req.head())
.timeout(Duration::new(PROXY_TIMEOUT, 0));
// attempt to remove basic-auth header
forwarded_req.headers_mut().remove("authorization");
if let Some(addr) = req.head().peer_addr {
forwarded_req.header("x-forwarded-for", format!("{}", addr.ip()))
} else {
forwarded_req
}
}
fn web_redir(location: &str) -> HttpResponse {
HttpResponse::SeeOther()
.header(http::header::LOCATION, location)
.finish()
}
pub async fn index(req: HttpRequest) -> Result<HttpResponse, TrainCrash> {
let seed = AesGcmCsrfProtection::from_key(get_csrf_key());
let (csrf_token, csrf_cookie) = seed.generate_token_pair(None, 43200)
.expect("couldn't generate token/cookie pair");
Ok(HttpResponse::Ok()
.content_type("text/html")
.set_header(
"Set-Cookie",
format!("sncf_csrf_cookie={}; HttpOnly; SameSite=Strict",
base64::encode_config(&csrf_cookie.value(), base64::URL_SAFE_NO_PAD)))
.body(
TplIndex {
lang: &get_lang(&req),
csrf_token: &base64::encode_config(&csrf_token.value(), base64::URL_SAFE_NO_PAD),
}
.render()
.map_err(|e| {
eprintln!("error_tplrender (TplIndex): {}", e);
crash(get_lang(&req), "error_tplrender")
})?,
)
.await
.map_err(|e| {
eprintln!("error_tplrender_resp (TplIndex): {}", e);
crash(get_lang(&req), "error_tplrender_resp")
})?)
}

+ 281
- 0
docker/build/deb-rust-sncf/index.css View File

@ -0,0 +1,281 @@
@font-face {
font-family: 'Ubuntu-R';
src: url('/assets/Ubuntu-R.ttf');
font-weight: normal;
font-style: normal;
}
.hidden {
display: none !important;
}
* {
font-family: Ubuntu,"Ubuntu-R",sans-serif;
}
a {
text-decoration: none;
color: #2359fb;
}
.flex {
display: flex;
flex-wrap: wrap;
justify-content: center;
}
.fullheight {
min-height: 100vh;
}
.fullheight-nav {
min-height: calc(100vh - 50px);
}
.fullwidth {
width: 100%;
text-align: center;
}
.title {
color: white;
text-shadow: 0 0 5px rgba(0, 0, 0, 0.18),0 5px 5px rgba(0, 0, 0, 0.18);
}
h1 {
font-size: 4vw;
}
h2 {
font-size: 2.25vw;
}
h3 {
font-size: 1.75vw;
}
p {
font-size: 1.25vw;
line-height: 1.6;
}
.beta-tag {
background: #f47606;
color: white;
border-radius: 5px;
font-size: 0.9rem;
padding: 0.3rem;
margin-left: 0.5rem;
}
.beta-banner a {
color: #ffeb7f;
}
.beta-banner {
background: repeating-linear-gradient( 45deg, #d56009, #d56009 10px, #c44c05 10px, #c44c05 20px );
color: white;
padding: 1rem;
text-shadow: 0 0 5px rgba(0, 0, 0, 0.18),0 5px 5px rgba(0, 0, 0, 0.18);
}
.logo {
width: 10vw;
margin-right: 2vw;
}
.page-heading {
background-image: url("/assets/index-background.png"), linear-gradient(0deg, #1f58c6 0%, #1c66f2 100%);
background-position: 50% 50%;
background-repeat: no-repeat;
background-size: cover;
background-attachment: fixed;
}
.page-heading-text {
width: auto;
margin: auto;
padding: 1rem;
}
.page-heading > p {
color: white;
}
.page-heading > p > a {
color: #c3cce8;
}
.page-heading.error {
background: url("/assets/index-background.png"), linear-gradient(0deg, #790000 0%, #a40000 100%)
}
.ncstyle-button.error {
background: #ee4040;
}
.error.ncstyle-button:hover {
background: #c82323;
}
.navbar {
height: 50px;
}
body, html {
margin: 0;
padding: 0;
}
.ncstyle-button {
color: #FFF;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.18),0 5px 5px rgba(0, 0, 0, 0.18);
border-radius: 1vw;
text-decoration: none;
text-shadow: 0 0 5px rgba(0, 0, 0, 0.18),0 5px 5px rgba(0, 0, 0, 0.18);
white-space: nowrap;
height: max-content;
line-height: 2.25rem;
padding: 2vh 3vw;
background: #2a87ff;
font-size: 1.5vw;
min-width: 18vw;
display: block;
transition: all .25s ease-in-out;
}
.margin-bottom {
margin-bottom: 1rem;
}
.ncstyle-button:hover {
background: #2478e3;
}
.ncstyle-input {
margin: auto;
padding: 7px 6px;
font-size: 16px;
background-color: white;
color: #454545;
border: 1px solid #dbdbdb;
outline: none;
border-radius: 3px;
cursor: text;
width: 50vw;
}
.click {
cursor: pointer;
}
#script-copy {
display: none;
}
@media only screen and (max-width: 1080px) {
h1 {
font-size: 48px;
}
h2 {
font-size: 32px;
}
h3 {
font-size: 24px;
}
p {
font-size: 16px;
}
.title {
text-align: center;
}
.logo {
width: 20vw;
margin: 0;
}
.ncstyle-button {
font-size: 24px;
}
}
@media only screen and (max-width: 1080px), screen and (max-height: 600px) {
.scroll-down-arrow {
display: none;
}
}
.scroll-down-arrow {
background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2hldnJvbl90aGluX2Rvd24iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIGVuYWJsZS1iYWNrZ3JvdW5kPSJuZXcgMCAwIDIwIDIwIiBmaWxsPSJ3aGl0ZSIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTE3LjQxOCw2LjEwOWMwLjI3Mi0wLjI2OCwwLjcwOS0wLjI2OCwwLjk3OSwwYzAuMjcsMC4yNjgsMC4yNzEsMC43MDEsMCwwLjk2OWwtNy45MDgsNy44M2MtMC4yNywwLjI2OC0wLjcwNywwLjI2OC0wLjk3OSwwbC03LjkwOC03LjgzYy0wLjI3LTAuMjY4LTAuMjctMC43MDEsMC0wLjk2OWMwLjI3MS0wLjI2OCwwLjcwOS0wLjI2OCwwLjk3OSwwTDEwLDEzLjI1TDE3LjQxOCw2LjEwOXoiLz48L3N2Zz4=);
background-size: contain;
background-repeat: no-repeat;
}
.scroll-down-link {
cursor:pointer;
height: 60px;
width: 80px;
margin: 0px 0 0 -40px;
line-height: 60px;
position: absolute;
left: 50%;
bottom: 10px;
color: #FFF;
text-align: center;
font-size: 70px;
z-index: 100;
text-decoration: none;
text-shadow: 0px 0px 3px rgba(0, 0, 0, 0.4);
animation: fade_move_down 2s ease-in-out infinite;
}
/*animated scroll arrow animation*/
@keyframes fade_move_down {
0% { transform:translate(0,-20px); opacity: 0; }
50% { opacity: 1; }
100% { transform:translate(0,20px); opacity: 0; }
}
.lds-ring {
display: inline-block;
position: relative;
width: 80px;
height: 80px;
}
.lds-ring div {
box-sizing: border-box;
display: block;
position: absolute;
width: 64px;
height: 64px;
margin: 8px;
border: 8px solid #fff;
border-radius: 50%;
animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;
border-color: #fff transparent transparent transparent;
}
.lds-ring div:nth-child(1) {
animation-delay: -0.45s;
}
.lds-ring div:nth-child(2) {
animation-delay: -0.3s;
}
.lds-ring div:nth-child(3) {
animation-delay: -0.15s;
}
@keyframes lds-ring {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}

+ 148
- 0
docker/build/deb-rust-sncf/index.html View File

@ -0,0 +1,148 @@
<!doctype html>
<html lang="{{ "lang_code"|tr(lang) }}">
<head>
<title>{{ "index_title"|tr(lang) }} – {{ "index_description"|tr(lang) }}</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ "meta_description"|tr(lang) }}" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="icon" type="image/png" sizes="48x48" href="/assets/favicon.ico" />
<link rel="stylesheet" href="/assets/index.css?v=1.2" />
<link rel="stylesheet" href="/assets/cloud.css?v=1.0" />
<noscript><style> .jsonly { display: none } </style></noscript>
<script>
/* junk javascript with basic spambot protection features.
Drunk indentation is vim's fault.
unsatisifed? Please make a PR. : ) */
window.onload = function() {
// retrieved from server-side template
let csrf_token = "{{ csrf_token }}";
document.getElementById('new_link_button').addEventListener('click', function () {
new_link(csrf_token);
});
}
function new_link(csrf) {
document.getElementById("csrf_token").value = csrf;
document.getElementById('new_link').submit();
document.getElementById('new_link_button').classList.add("hidden");
document.getElementById('loading_ring').classList.remove("hidden");
}
</script>
</head>
<body>
<div class="flex page-heading fullheight">
<div class="flex page-heading-text">
<div class="flex">
<a class="flex" href="https://42l.fr"><img class="logo" src="/assets/logo.svg" /></a>
</div>
<div>
<h1 class="title">{{ "index_title"|tr(lang) }}<sup class="beta-tag">{{ "index_beta_tag"|tr(lang) }}</sup></h1>
<h2 class="title">{{ "index_description"|tr(lang) }}</h2>
</div>
</div>
<div class="fullwidth flex">
</div>
<div class="fullwidth flex">
<noscript>
<a class="ncstyle-button margin-bottom">{{ "index_nojs"|tr(lang) }}</a>
</noscript>
<form id="new_link" action="/link" method="post">
<input id="csrf_token" name="csrf_token" type="text" class="hidden">
<a id="new_link_button" class="click jsonly ncstyle-button margin-bottom">{{ "index_createform_button"|tr(lang) }}</a> </form>
<div id="loading_ring" class="hidden lds-ring"><div></div><div></div><div></div><div></div></div>
</div>
<a class="scroll-down-link scroll-down-arrow"></a>
</div>
<div class="has-text-centered beta-banner">
<h3>{{ "index_beta_banner_desc1"|tr(lang) }}</h3>
<p>{{ "index_beta_banner_desc2"|tr(lang) }}<a href="https://42l.fr/Contact">{{ "index_beta_banner_desc_link"|tr(lang) }}</a>.</p>
</div>
<div>
<div class="c-flex c-jumbo c-color-inverted c-color-mailred">
<div class="c-fullwidth">
<div class="has-text-centered">
<br />
<br />
<p>{{ "index_disclaimer1"|tr(lang) }}</p>
<p>{{ "index_disclaimer2"|tr(lang) }}<a href="https://42l.fr/Faire-un-don">{{ "index_disclaimer2_link_org"|tr(lang) }}</a>{{ "index_disclaimer2_or"|tr(lang) }}<a href="https://www.bountysource.com/teams/nextcloud">{{ "index_disclaimer2_nc"|tr(lang) }}</a>.</p>
</div>
</div>
</div>
<br />
<div class="c-flex c-jumbo">
<div class="c-subelem">
<a target="_blank" href="/assets/screen/{{ "lang_code"|tr(lang) }}/question.png"><img class="c-img-shadow" alt="" src="/assets/screen/{{ "lang_code"|tr(lang) }}/question.png" /></a>
</div>
<div class="c-subelem">
<h3>{{ "index_panel1_title"|tr(lang) }}</h3>
<p>{{ "index_panel1_desc1"|tr(lang) }}</p>
<p>{{ "index_panel1_desc2"|tr(lang) }}</p>
</div>
</div>
<div class="c-flex c-flex-reverse c-jumbo">
<div class="c-subelem">
<a target="_blank" href="/assets/screen/{{ "lang_code"|tr(lang) }}/fields.png"><img class="c-img-shadow" alt="" src="/assets/screen/{{ "lang_code"|tr(lang) }}/fields.png" /></a>
</div>
<div class="c-subelem">
<h3>{{ "index_panel2_title"|tr(lang) }}</h3>
<p>{{ "index_panel2_desc1"|tr(lang) }}</p>
<p>{{ "index_panel2_desc2"|tr(lang) }}<a href="https://github.com/nextcloud/forms/issues?q=is%3Aissue+is%3Aopen+label%3A%22feature%3A+%E2%9D%93+question+types%22">{{ "index_panel2_desc2_link"|tr(lang) }}</a>.</p>
</div>
</div>
<div class="c-flex c-jumbo">
<div class="c-subelem">
<a target="_blank" href="/assets/screen/{{ "lang_code"|tr(lang) }}/responses.png"><img class="c-img-shadow" alt="" src="/assets/screen/{{ "lang_code"|tr(lang) }}/responses.png" /></a>
</div>
<div class="c-subelem">
<h3>{{ "index_panel3_title"|tr(lang) }}</h3>
<p>{{ "index_panel3_desc1"|tr(lang) }}</p>
</div>
</div>
<div class="c-flex c-flex-reverse c-jumbo">
<div class="c-subelem">
<a target="_blank" href="/assets/screen/{{ "lang_code"|tr(lang) }}/responses-export.png"><img class="c-img-shadow" alt="" src="/assets/screen/{{ "lang_code"|tr(lang) }}/responses-export.png" /></a>
</div>
<div class="c-subelem">
<h3>{{ "index_panel4_title"|tr(lang) }}</h3>
<p>{{ "index_panel4_desc1"|tr(lang) }}</p>
</div>
</div>
<div class="c-flex c-jumbo">
<div class="c-subelem">
<a target="_blank" href="/assets/screen/{{ "lang_code"|tr(lang) }}/params.png"><img class="c-img-shadow" alt="" src="/assets/screen/{{ "lang_code"|tr(lang) }}/params.png" /></a>
</div>
<div class="c-subelem">
<h3>{{ "index_panel5_title"|tr(lang) }}</h3>
<p>{{ "index_panel5_desc1"|tr(lang) }}</p>
<p>{{ "index_panel5_desc2"|tr(lang) }}</p>
</div>
</div>
<div class="c-flex c-flex-reverse c-jumbo">
<div class="c-subelem">
<a target="_blank" href="/assets/screen/{{ "lang_code"|tr(lang) }}/formslist.png"><img class="c-img-shadow" alt="" src="/assets/screen/{{ "lang_code"|tr(lang) }}/formslist.png" /></a>
</div>
<div class="c-subelem">
<h3>{{ "index_panel6_title"|tr(lang) }}</h3>
<p>{{ "index_panel5_desc1"|tr(lang) }}</p>
</div>
</div>
</div>
<br />
<div class="c-flex c-jumbo c-blue">
<a href="https://42l.fr/Rapport-technique" class="c-button" target="_blank">{{ "index_bottom_docs"|tr(lang) }}</a>
<a href="https://git.42l.fr/neil/sncf" class="c-button" target="_blank">{{ "index_bottom_source"|tr(lang) }}</a>
<a href="https://git.42l.fr/neil/sncf/src/branch/root/LICENSE" class="c-button" target="_blank">{{ "index_bottom_lic"|tr(lang) }}</a>
</div>
<br />
<div class="has-text-centered page-heading">
<br />
<h3 class="title">Crédits</h3>
<p>{{ "index_credits_desc1"|tr(lang) }}<a href="https://nextcloud.com/">{{ "index_credits_desc1_link"|tr(lang) }}</a>{{ "index_credits_desc1_a"|tr(lang) }}</p>
<p>{{ "index_credits_desc2"|tr(lang) }}<a href="https://shelter.moe/@Neil">Neil</a>{{ "index_credits_desc2_for"|tr(lang) }}<a href="https://42l.fr">{{ "index_credits_desc2_org"|tr(lang) }}</a> (<a href="https://git.42l.fr/neil/sncf">{{"index_credits_desc3"|tr(lang) }}</a>).</p>
<br />
</div>
</body>
</html>

+ 97
- 0
docker/build/deb-rust-sncf/link.html View File

@ -0,0 +1,97 @@
<!doctype html>
<html lang="{{ lang }}">
<head>
<title>{{ "link_title"|tr(lang) }} – {{ "index_title"|tr(lang) }}</title>
<meta charset="utf-8" />
<meta name="robots" content="noindex" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="{{ "meta_description"|tr(lang) }}" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="icon" type="image/png" sizes="48x48" href="/assets/favicon.ico" />
<link rel="stylesheet" href="/assets/index.css?v=1.0" />
<link rel="stylesheet" href="/assets/cloud.css?v=1.0" />
<script type="text/javascript">
window.onload = function () {
// show link copy button if javascript is enabled
document.getElementById("script-copy").style.display = "unset";
let btn = document.getElementById("script-copy-btn");
btn.style.cursor = "pointer";
btn.addEventListener('click', function() {
var copyText = document.getElementById("link");
/* Select the text field */
copyText.select();
copyText.setSelectionRange(0, 99999);
document.execCommand("copy");
btn.innerHTML = '{{ "link_copied"|tr(lang) }}';
});
document.getElementById("email-register").style.display = "unset";
let btn2 = document.getElementById("email-register-btn");
btn2.style.cursor = "pointer";
btn2.addEventListener('click', function() {
var email = document.getElementById("email").value;
console.log(email);
/* var emailjsonstring = JSON.stringify(JSON.parse(document.getElementById('email'))); */
var xhr1=new XMLHttpRequest();
xhr1.open("POST",'link/email', true);
xhr1.send(email);
});
}
</script>
<body>
<div class="navbar has-text-centered page-heading"></div>
<div class="fullheight-nav">
<div class="c-flex c-jumbo">
<div class="c-fullwidth">
<div class="has-text-centered">
<br />
<h2>{{ "link_title"|tr(lang) }}</h2>
<p>{{ "link_desc1"|tr(lang)|safe }}</p>
<p>{{ "link_desc2"|tr(lang)|safe }}</p>
<br />
<div class="c-flex">
<input id="link" class="ncstyle-input" type="text" readonly value="{{ config.sncf_url }}/admin/{{ admin_token }}" />
</div>
<br />
<br />
<div id="script-copy">
<br />
<div class="c-flex">
<a id="script-copy-btn" class="ncstyle-button margin-bottom">{{ "link_copy"|tr(lang) }}</a>
</div>
<br />
</div>
<div class="c-flex">
<input id="email" class="ncstyle-input" type="text" value="ivalid@mail.com" />
</div>
<br />
<div id="email-register">
<br />
<div class="c-flex">
<a id="email-register-btn" class="ncstyle-button margin-bottom" href="{{ config.sncf_url }}/admin/{{ admin_token }}">send link to mail</a>
</div>
<br />
</div>
<p>{{ "link_desc3"|tr(lang) }}</p>
<br />
<div class="c-flex">
<a id="forms-btn" class="ncstyle-button margin-bottom" href="{{ config.sncf_url }}/admin/{{ admin_token }}">{{ "link_access_btn"|tr(lang) }}</a>
</div>
<br />
<p>{{ "link_note"|tr(lang) }}{{ config.prune_days }}{{ "link_note2"|tr(lang) }}</p>
</div>
</div>
</div>
</div>
</body>
</html>

+ 118
- 0
docker/build/deb-rust-sncf/main.rs View File

@ -0,0 +1,118 @@
#[macro_use]
extern crate lazy_static;
#[macro_use]
extern crate serde_derive;
#[macro_use]
extern crate diesel;
#[macro_use]
extern crate diesel_migrations;
use actix_files::Files;
use actix_web::client::Client;
use actix_web::{web, App, HttpRequest, FromRequest, HttpServer};
use diesel::prelude::*;
use diesel::r2d2::{self, ConnectionManager};
use url::Url;
use crate::config::CONFIG;
use crate::config::PAYLOAD_LIMIT;
use crate::forward::*;
mod account;
mod config;
mod database;
mod errors;
mod forward;
mod sniff;
mod templates;
// default to postgres
#[cfg(feature = "default")]
type DbConn = PgConnection;
#[cfg(feature = "default")]
embed_migrations!("migrations/postgres");
#[cfg(feature = "postgres")]
type DbConn = PgConnection;
#[cfg(feature = "postgres")]
embed_migrations!("migrations/postgres");
#[cfg(feature = "sqlite")]
type DbConn = SqliteConnection;
#[cfg(feature = "sqlite")]
embed_migrations!("migrations/sqlite");
#[cfg(feature = "mysql")]
type DbConn = MysqlConnection;
#[cfg(feature = "mysql")]
embed_migrations!("migrations/mysql");
type DbPool = r2d2::Pool<ConnectionManager<DbConn>>;
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
/* std::env::set_var("RUST_LOG", "actix_web=debug");
env_logger::init();*/
println!("ta ta tala ~ SNCF init");
println!("Checking configuration file...");
CONFIG.check_version();
if CONFIG.database_path.len() == 0 {
println!("No database specified. Please enter a MySQL, PostgreSQL or SQLite connection string in config.toml.");
}
debug(&format!("Opening database {}", CONFIG.database_path));
let manager = ConnectionManager::<DbConn>::new(&CONFIG.database_path);
let pool = r2d2::Pool::builder()
.build(manager)
.expect("ERROR: main: Failed to create the database pool.");
let conn = pool.get().expect("ERROR: main: DB connection failed");
println!("Running migrations...");
embedded_migrations::run(&*conn).expect("ERROR: main: Failed to run database migrations");
let forward_url =
Url::parse(&CONFIG.nextcloud_url).expect("Couldn't parse the forward url from config");
println!(
"Now listening at {}:{}",
CONFIG.listening_address, CONFIG.listening_port
);
// starting the http server
let HttpServer::new(move || {
App::new()
.data(pool.clone())
.data(Client::new())
.data(forward_url.clone())
/*.route("/mimolette", web::get().to(login))*/
/*.route("/login", web::post().to(forward))*/
/*.wrap(middleware::Compress::default())*/
.service(Files::new("/assets/", "./templates/assets/").index_file("index.html"))
.route("/", web::get().to(index))
.route("/link", web::post().to(forward_register))
.route("/admin/{token}", web::get().to(forward_login))
.default_service(web::route().to(forward))
.data(String::configure(|cfg| cfg.limit(PAYLOAD_LIMIT)))
.app_data(actix_web::web::Bytes::configure(|cfg| {
cfg.limit(PAYLOAD_LIMIT)
}))
})
.bind((CONFIG.listening_address.as_str(), CONFIG.listening_port))?
.system_exit()
.run()
.await
}
pub fn debug(text: &str) {
if CONFIG.debug_mode {
println!("{}", text);
}
}

+ 59
- 0
docker/build/deb-rust-sncf/templates.rs View File

@ -0,0 +1,59 @@
use actix_web::HttpRequest;
use askama::Template;
use crate::config::Config;
#[derive(Template)]
#[template(path = "index.html")]
pub struct TplIndex<'a> {
pub lang: &'a str,
pub csrf_token: &'a str,
}
#[derive(Template)]
#[template(path = "error.html")]
pub struct TplError<'a> {
pub lang: &'a str,
pub error_msg: &'a str,
}
#[derive(Template)]
#[template(path = "link.html")]
pub struct TplLink<'a> {
pub lang: &'a str,
pub admin_token: &'a str,
pub config: &'a Config,
}
pub fn get_lang(req: &HttpRequest) -> String {
// getting language from client header
// taking the two first characters of the Accept-Language header,
// in lowercase, then parsing it.
// if it fails, returns "en"
if let Some(l) = req.headers().get("Accept-Language") {
if let Ok(s) = l.to_str() {
return s.to_lowercase()[..2].to_string();
}
}
String::from("en")
}
mod filters {
use crate::config::LOC;
pub fn tr(key: &str, lang: &str) -> askama::Result<String> {
let translation = LOC.get(key).ok_or_else(|| {
eprintln!("tr filter: couldn't find the key {}", key);
askama::Error::from(std::fmt::Error)
})?;
Ok(String::from(
translation
.get(lang)
.unwrap_or(translation.get("en").ok_or_else(|| {
eprintln!("tr filter: couldn't find the lang {} in key {}", lang, key);
askama::Error::from(std::fmt::Error)
})?)
.as_str()
.ok_or_else(|| {
eprintln!("tr filter: lang {} in key {} is not str", lang, key);
askama::Error::from(std::fmt::Error)
})?,
))
}
}

+ 3
- 0
docker/build/nextcloud-web/Dockerfile View File

@ -0,0 +1,3 @@
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf

+ 173
- 0
docker/build/nextcloud-web/backup/nginx.conf View File

@ -0,0 +1,173 @@
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;
real_ip_header X-Real-IP;
#gzip on;
upstream php-handler {
server nextcloud:9000;
}
server {
listen 80;
# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this
# topic first.
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
# Path to the root of your installation
root /var/www/html;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
# The following rule is only needed for the Social app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
location = /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
# set max upload size
client_max_body_size 10G;
fastcgi_buffers 64 4K;
# Enable gzip but do not remove ETag headers
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
location / {
rewrite ^ /index.php;
}
location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
# fastcgi_param HTTPS on;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
# Enable pretty urls
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
# Adding the cache control header for js, css and map files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Optional: Don't log access to assets
access_log off;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap|mp4|webm)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}
}

+ 173
- 0
docker/build/nextcloud-web/nginx.conf View File

@ -0,0 +1,173 @@
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;
real_ip_header X-Real-IP;
#gzip on;
upstream php-handler {
server nextcloud:9000;
}
server {
listen 80;
# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this
# topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Remove X-Powered-By, which is an information leak
fastcgi_hide_header X-Powered-By;
# Path to the root of your installation
root /var/www/html;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
# The following rule is only needed for the Social app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/webfinger /public.php?service=webfinger last;
location = /.well-known/carddav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host:$server_port/remote.php/dav;
}
# set max upload size
client_max_body_size 10G;
fastcgi_buffers 64 4K;
# Enable gzip but do not remove ETag headers
gzip on;
gzip_vary on;
gzip_comp_level 4;
gzip_min_length 256;
gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
location / {
rewrite ^ /index.php;
}
location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^\/(?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/) {
fastcgi_split_path_info ^(.+?\.php)(\/.*|)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
# fastcgi_param HTTPS on;
# Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
# Enable pretty urls
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
}
location ~ ^\/(?:updater|oc[ms]-provider)(?:$|\/) {
try_files $uri/ =404;
index index.php;
}
# Adding the cache control header for js, css and map files
# Make sure it is BELOW the PHP block
location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
#add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
#
# WARNING: Only add the preload option once you read about
# the consequences in https://hstspreload.org/. This option
# will add the domain to a hardcoded list that is shipped
# in all major browsers and getting removed from this list
# could take several months.
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
# Optional: Don't log access to assets
access_log off;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg|bcmap|mp4|webm)$ {
try_files $uri /index.php$request_uri;
# Optional: Don't log access to other assets
access_log off;
}
}
}

+ 127
- 0
docker/build/nextcloud/Dockerfile View File

@ -0,0 +1,127 @@
# DO NOT EDIT: created by update.sh from Dockerfile-alpine.template
FROM php:7.4-fpm-alpine3.12
# entrypoint.sh and cron.sh dependencies
RUN set -ex; \
\
apk add --no-cache \
rsync \
; \
\
rm /var/spool/cron/crontabs/root; \
echo '*/5 * * * * php -f /var/www/html/cron.php' > /var/spool/cron/crontabs/www-data
# install the PHP extensions we need
# see https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html
RUN set -ex; \
\
apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
autoconf \
freetype-dev \
icu-dev \
libevent-dev \
libjpeg-turbo-dev \
libmcrypt-dev \
libpng-dev \
libmemcached-dev \
libxml2-dev \
libzip-dev \
openldap-dev \
pcre-dev \
postgresql-dev \
imagemagick-dev \
libwebp-dev \
gmp-dev \
; \
\
docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp; \
docker-php-ext-configure ldap; \
docker-php-ext-install -j "$(nproc)" \
bcmath \
exif \
gd \
intl \
ldap \
opcache \
pcntl \
pdo_mysql \
pdo_pgsql \
zip \
gmp \
; \
\
# pecl will claim success even if one install fails, so we need to perform each install separately
pecl install APCu-5.1.19; \
pecl install memcached-3.1.5; \
pecl install redis-5.3.2; \
pecl install imagick-3.4.4; \
\
docker-php-ext-enable \
apcu \
memcached \
redis \
imagick \
; \
\
runDeps="$( \
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
| tr ',' '\n' \
| sort -u \
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
)"; \
apk add --virtual .nextcloud-phpext-rundeps $runDeps; \
apk del .build-deps
# set recommended PHP.ini settings
# see https://docs.nextcloud.com/server/12/admin_manual/configuration_server/server_tuning.html#enable-php-opcache
RUN { \
echo 'opcache.enable=1'; \
echo 'opcache.interned_strings_buffer=8'; \
echo 'opcache.max_accelerated_files=10000'; \
echo 'opcache.memory_consumption=128'; \
echo 'opcache.save_comments=1'; \
echo 'opcache.revalidate_freq=1'; \
} > /usr/local/etc/php/conf.d/opcache-recommended.ini; \
\
echo 'apc.enable_cli=1' >> /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini; \
\
echo 'memory_limit=512M' > /usr/local/etc/php/conf.d/memory-limit.ini; \
\
mkdir /var/www/data; \
chown -R www-data:root /var/www; \
chmod -R g=u /var/www
VOLUME /var/www/html
ENV NEXTCLOUD_VERSION 20.0.1
RUN set -ex; \
apk add --no-cache --virtual .fetch-deps \
bzip2 \
gnupg \
; \
\
curl -fsSL -o nextcloud.tar.bz2 \
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2"; \
curl -fsSL -o nextcloud.tar.bz2.asc \
"https://download.nextcloud.com/server/releases/nextcloud-${NEXTCLOUD_VERSION}.tar.bz2.asc"; \
export GNUPGHOME="$(mktemp -d)"; \
# gpg key from https://nextcloud.com/nextcloud.asc
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys 28806A878AE423A28372792ED75899B9A724937A; \
gpg --batch --verify nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
tar -xjf nextcloud.tar.bz2 -C /usr/src/; \
gpgconf --kill all; \
rm nextcloud.tar.bz2.asc nextcloud.tar.bz2; \
rm -rf "$GNUPGHOME" /usr/src/nextcloud/updater; \
mkdir -p /usr/src/nextcloud/data; \
mkdir -p /usr/src/nextcloud/custom_apps; \
chmod +x /usr/src/nextcloud/occ; \
apk del .fetch-deps
COPY *.sh upgrade.exclude /
COPY config/* /usr/src/nextcloud/config/
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]

+ 185
- 0
docker/compose/docker-compose.yml View File

@ -0,0 +1,185 @@
version: '2.3'
services:
traefik:
image: traefik:2.4
container_name: traefik
restart: always
command:
- "--accesslog.filepath=/var/log/access.log"
- "--log.level=WARNING"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
- "--certificatesresolvers.myresolver.acme.httpchallenge=true"
- "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.myresolver.acme.storage=/acme.json"
ports:
- 80:80
- 443:443
networks:
- proxy
volumes:
# - /opt/docker/overlays/traefik/var/log:/var/log/
- /opt/docker/overlays/traefik/acme.json:/acme.json
- /var/run/docker.sock:/var/run/docker.sock:ro
nextcloud-db:
image: mariadb
container_name: nextcloud-db
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- /opt/docker/overlays/nextcloud-db/mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=AAAAAAAAAAAAAAAAAAAAAAAMYSQLROOT
- MYSQL_PASSWORD=AAAAAAAAAAAAAAAAAAAAAAAAAAAAMYSQL
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- nextcloud
- sncf-db
ports:
- "127.0.0.1:3306:3306"
redis:
image: redis:alpine
container_name: nextcloud-redis
restart: always
command: redis-server --requirepass AAAAAAAAAAAAAAAAAAAAAAAAAAAAREDIS
networks:
- nextcloud
nextcloud:
image: nextcloud:e95023790cc36274053af7930831a9aecbf32efd
build: https://github.com/nextcloud/docker.git#e95023790cc36274053af7930831a9aecbf32efd:20.0/fpm-alpine
container_name: nextcloud
restart: always
volumes:
# - /opt/docker/overlays/nextcloud/var/log:/var/log
- /opt/docker/overlays/nextcloud/html:/var/www/html
- /opt/docker/overlays/nextcloud/data:/var/www/data
- /opt/docker/overlays/nextcloud/skeleton:/var/www/skeleton
environment:
- MYSQL_HOST=nextcloud-db
- REDIS_HOST=redis
- REDIS_HOST_PASSWORD=AAAAAAAAAAAAAAAAAAAAAAAAAAAAREDIS
- MYSQL_PASSWORD=AAAAAAAAAAAAAAAAAAAAAAAAAAAAMYSQL
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
depends_on:
- nextcloud-db
- redis
security_opt:
- no-new-privileges:true
networks:
- nextcloud
- nextcloud-web
nextcloud-web:
build: ../build/nextcloud-web
container_name: nextcloud-web
restart: always
volumes:
# - /opt/docker/overlays/nextcloud-web/var/log:/var/log
- /opt/docker/overlays/nextcloud/html:/var/www/html:ro
- /opt/docker/overlays/nextcloud/data:/var/www/data:ro
- /opt/docker/overlays/nextcloud/skeleton:/var/www/skeleton:ro
labels:
- traefik.docker.network=proxy
- traefik.enable=true
- traefik.protocol=http
- traefik.port=80
- traefik.http.routers.nextlcoud.tls=true
- traefik.http.routers.nextcloud.entrypoints=websecure
- traefik.http.routers.nextcloud.tls.certresolver=myresolver
- traefik.http.routers.nextcloud.rule=Host(`oleola.ddns.net`)
- traefik.http.middlewares.nextcloud.headers.customRequestHeaders.X-Forwarded-Proto=https
- traefik.http.routers.nextcloud.middlewares=nextcloud,nextcloud_redirect, next-auth
- traefik.http.middlewares.next-auth.basicauth.users=luca:$$2y$$05$$DnZh.HwnTfrmVhgrFdZ9bu86fyZ6/1HNRgaCTxOyrHGOFNFw5AYlm
- traefik.http.middlewares.nextcloud.headers.stsSeconds=155520011
- traefik.http.middlewares.nextcloud.headers.stsIncludeSubdomains=true
- traefik.http.middlewares.nextcloud.headers.stsPreload=true
- traefik.http.middlewares.nextcloud_redirect.redirectregex.regex=/.well-known/(card|cal)dav
- traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement=/remote.php/dav/
depends_on:
- nextcloud
security_opt:
- no-new-privileges:true
networks:
- nextcloud
- proxy
- nextcloud-web
# logging:
# driver: syslog
cron:
image: nextcloud:stable-fpm-alpine
restart: always
container_name: nextcloud-cron
volumes:
- /opt/docker/overlays/nextcloud/html:/var/www/html
- /opt/docker/overlays/nextcloud/data:/var/www/data
- /opt/docker/overlays/nextcloud/skeleton:/var/www/skeleton
entrypoint: /cron.sh
depends_on:
- nextcloud-db
- redis
networks:
- nextcloud
- proxy
# deb-rust-sncf:
# build: ../build/deb-rust-sncf
# container_name: deb-rust-sncf
# restart: always
# volumes:
## - /opt/docker/overlays/deb-rust-sncf/var/log:/var/log
# - /opt/docker/overlays/nextcloud/html:/var/www/html
# - /opt/docker/overlays/nextcloud/data:/var/www/data
# - /opt/docker/overlays/nextcloud/skeleton:/var/www/skeleton
# labels:
# - "traefik.docker.network=proxy"
# - "traefik.enable=true"
# - "traefik.protocol=http"
# - "traefik.port=8000"
# - "traefik.http.routers.deb-rust-sncf.entrypoints=websecure"
# - "traefik.http.routers.deb-rust-sncf.tls.certresolver=myresolver"
# - "traefik.http.routers.deb-rust-sncf.rule=Host(`example.org`)"
# - "traefik.http.services.deb-rust-sncf.loadbalancer.server.port=8000"
# - "traefik.http.routers.deb-rust-sncf.middlewares=sncf, sncf-auth"
# - "traefik.http.middlewares.sncf-auth.basicauth.users=luca:$$2y$$05$$DnZh.HwnTfrmVhgrFdZ9bu86fyZ6/1HNRgaCTxOyrHGOFNFw5AYlm"
# - "traefik.http.middlewares.sncf.headers.customRequestHeaders.X-Forwarded-Proto=https"
# - "traefik.http.middlewares.sncf.headers.stsSeconds=155520011"
# - "traefik.http.middlewares.sncf.headers.stsIncludeSubdomains=true"
# - "traefik.http.middlewares.sncf.headers.stsPreload=true"
# - "traefik.http.middlewares.sncf-ratelimit.ratelimit.average=200"
# environment:
# - RUST_BACKTRACE=full
# depends_on:
# - nextcloud
# networks:
# - sncf-db
# - sncf-nc
# - proxy
networks:
proxy:
external: true
nextcloud:
external: false
driver: bridge
nextcloud-web:
external: false
driver: bridge
sncf-nc:
external: false
driver: bridge
sncf-db:
external: false
driver: bridge

+ 130
- 0
docker/compose/nextcloud.yml View File

@ -0,0 +1,130 @@
version: '2.3'
services:
nextcloud-db:
image: mariadb
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
container_name: nextcloud-db
restart: always
volumes:
- /home/docker/nextcloud/container-db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- nextcloud
nextcloud:
image: nextcloud:stable-fpm-alpine
restart: on-failure:5
container_name: nextcloud
volumes:
- /home/docker/nextcloud/app:/var/www/html
environment:
- MYSQL_HOST=nextcloud-db
- MYSQL_PASSWORD=
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- REDIS_HOST=redis
- REDIS_HOST_PASSWORD=
depends_on:
- nextcloud-db
- redis
security_opt:
- no-new-privileges:true
networks:
- nextcloud
nextcloud-cron:
image: nextcloud:stable-fpm-alpine
restart: always
container_name: nextcloud-cron
volumes:
- /home/docker/nextcloud/app:/var/www/html
entrypoint: /cron.sh
depends_on:
- nextcloud-db
- redis
networks:
- nextcloud
nextcloud-web:
build: ./nextcloud-web
restart: on-failure:5
container_name: nextcloud-web
volumes:
- /home/docker/nextcloud/app:/var/www/html
labels:
- traefik.docker.network=proxy
- traefik.enable=true
- traefik.protocol=http
- traefik.port=80
- traefik.http.routers.nextcloud.tls=true
- traefik.http.routers.nextcloud.entrypoints=websecure
- traefik.http.routers.nextcloud.tls.certresolver=myresolver
- traefik.http.routers.nextcloud.rule=Host(`pellets.journalismarena.eu`)
- traefik.http.routers.nextcloud.middlewares=nextcloud,nextcloud_redirect
- traefik.http.middlewares.nextcloud.headers.stsSeconds=155520011
- traefik.http.middlewares.nextcloud.headers.stsIncludeSubdomains=true
- traefik.http.middlewares.nextcloud.headers.stsPreload=true
- traefik.http.middlewares.nextcloud_redirect.redirectregex.regex=/.well-known/(card|cal)dav
- traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement=/remote.php/dav/
depends_on:
- nextcloud
security_opt:
- no-new-privileges:true
mem_limit: 4096M
memswap_limit: 4096M
networks:
- proxy
- nextcloud
redis:
image: redis:alpine
restart: always
container_name: nextcloud-redis
command: redis-server --requirepass ZpP2FwwNeMXW7Fd
networks:
- nextcloud
collabora:
image: collabora/code
container_name: collabora
restart: unless-stopped
mem_limit: 4096m
environment:
- domain=collabora-docs\\.digitalcourage\\.de
- username=admin-user
- password=6MktK8fu9Xx8iKrMu
- extra_params=--o:logging.level=warning --o:ssl.enable=false --o:ssl.termination=true
cap_add:
- MKNOD
networks:
- proxy
labels:
- traefik.docker.network=proxy
- traefik.enable=true
- traefik.protocol=http
- traefik.port=9080
- traefik.http.routers.collabora.tls=true
- traefik.http.routers.collabora.entrypoints=websecure
- traefik.http.routers.collabora.tls.certresolver=myresolver
- traefik.http.routers.collabora.rule=Host(`collabora-docs.digitalcourage.de`)
- traefik.http.routers.collabora.middlewares=collabora
- traefik.http.middlewares.collabora.headers.customRequestHeaders.X-Forwarded-Proto=https
- traefik.http.middlewares.collabora.headers.referrerPolicy=no-referrer
- traefik.http.middlewares.collabora.headers.stsSeconds=31536000
- traefik.http.middlewares.collabora.headers.forceSTSHeader=true
- traefik.http.middlewares.collabora.headers.stsPreload=true
- traefik.http.middlewares.collabora.headers.stsIncludeSubdomains=true
- traefik.http.middlewares.collabora.headers.browserXssFilter=true
networks:
proxy:
external: true
nextcloud:
external: false

+ 2
- 0
docker/compose/not.es View File

@ -0,0 +1,2 @@
changed labels in docker-compose.yml under nextcloud-web nextcloud to sncf, middleware added sncf, the last two labels regarding
redirects and social apps strg k

BIN
docker/compose/traefik-migration/traefik-migration-tool View File


+ 30
- 0
docker/compose/traefik-migration/traefik.toml View File

@ -0,0 +1,30 @@
logLevel = "WARN"
defaultEntryPoints = ["http", "https"]
# Connection to docker host system (docker.sock)
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "digitalcourage.de"
watch = true
# This will hide all docker containers that don't have explicitly
# set label to "enable"
exposedbydefault = false
# Force HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]
# Let's encrypt configuration
[acme]
email = "operating@digitalcourage.de"
storage="acme.json"
entryPoint="https"
OnHostRule = true
[acme.httpChallenge]
entryPoint = "http"

+ 179
- 0
docker/overlays/collabora/loolwsd.xml View File

@ -0,0 +1,179 @@
<config>
<!-- Note: 'default' attributes are used to document a setting's default value as well as to use as fallback. -->
<!-- Note: When adding a new entry, a default must be set in WSD in case the entry is missing upon deployment. -->
<allowed_languages desc="List of supported languages of Writing Aids (spell checker, grammar checker, thesaurus, hyphenation) on this instance. Allowing too many has negative effect on startup performance." default="de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru">de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru</allowed_languages>
<sys_template_path desc="Path to a template tree with shared libraries etc to be used as source for chroot jails for child processes." type="path" relative="true" default="systemplate"></sys_template_path>
<child_root_path desc="Path to the directory under which the chroot jails for the child processes will be created. Should be on the same file system as systemplate and lotemplate. Must be an empty directory." type="path" relative="true" default="jails"></child_root_path>
<mount_jail_tree desc="Controls whether the systemplate and lotemplate contents are mounted or not, which is much faster than the default of linking/copying each file." type="bool" default="true"></mount_jail_tree>
<server_name desc="External hostname:port of the server running loolwsd. If empty, it's derived from the request (please set it if this doesn't work). Must be specified when behind a reverse-proxy or when the hostname is not reachable directly." type="string" default=""></server_name>
<file_server_root_path desc="Path to the directory that should be considered root for the file server. This should be the directory containing loleaflet." type="path" relative="true" default="loleaflet/../"></file_server_root_path>
<memproportion desc="The maximum percentage of system memory consumed by all of the Collabora Online Development Edition, after which we start cleaning up idle documents" type="double" default="80.0"></memproportion>
<num_prespawn_children desc="Number of child processes to keep started in advance and waiting for new clients." type="uint" default="1">1</num_prespawn_children>
<per_document desc="Document-specific settings, including LO Core settings.">
<max_concurrency desc="The maximum number of threads to use while processing a document." type="uint" default="4">4</max_concurrency>
<batch_priority desc="A (lower) priority for use by batch eg. convert-to processes to avoid starving interactive ones" type="uint" default="5">5</batch_priority>
<document_signing_url desc="The endpoint URL of signing server, if empty the document signing is disabled" type="string" default="https://app.vereign.com">https://app.vereign.com</document_signing_url>
<redlining_as_comments desc="If true show red-lines as comments" type="bool" default="false">false</redlining_as_comments>
<idle_timeout_secs desc="The maximum number of seconds before unloading an idle document. Defaults to 1 hour." type="uint" default="3600">3600</idle_timeout_secs>
<!-- Idle save and auto save are checked every 30 seconds -->
<!-- They are disabled when the value is zero or negative. -->
<idlesave_duration_secs desc="The number of idle seconds after which document, if modified, should be saved. Defaults to 30 seconds." type="int" default="30">30</idlesave_duration_secs>
<autosave_duration_secs desc="The number of seconds after which document, if modified, should be saved. Defaults to 5 minutes." type="int" default="300">300</autosave_duration_secs>
<always_save_on_exit desc="On exiting the last editor, always perform the save, even if the document is not modified." type="bool" default="false">false</always_save_on_exit>
<limit_virt_mem_mb desc="The maximum virtual memory allowed to each document process. 0 for unlimited." type="uint">0</limit_virt_mem_mb>
<limit_stack_mem_kb desc="The maximum stack size allowed to each document process. 0 for unlimited." type="uint">8000</limit_stack_mem_kb>
<limit_file_size_mb desc="The maximum file size allowed to each document process to write. 0 for unlimited." type="uint">0</limit_file_size_mb>
<limit_num_open_files desc="The maximum number of files allowed to each document process to open. 0 for unlimited." type="uint">0</limit_num_open_files>
<limit_load_secs desc="Maximum number of seconds to wait for a document load to succeed. 0 for unlimited." type="uint" default="100">100</limit_load_secs>
<limit_convert_secs desc="Maximum number of seconds to wait for a document conversion to succeed. 0 for unlimited." type="uint" default="100">100</limit_convert_secs>
<cleanup desc="Checks for resource consuming (bad) documents and kills associated kit process. A document is considered resource consuming (bad) if is in idle state for idle_time_secs period and memory usage passed limit_dirty_mem_mb or CPU usage passed limit_cpu_per" enable="false">
<cleanup_interval_ms desc="Interval between two checks" type="uint" default="10000">10000</cleanup_interval_ms>
<bad_behavior_period_secs desc="Minimum time period for a document to be in bad state before associated kit process is killed. If in this period the condition for bad document is not met once then this period is reset" type="uint" default="60">60</bad_behavior_period_secs>
<idle_time_secs desc="Minimum idle time for a document to be candidate for bad state" type="uint" default="300">300</idle_time_secs>
<limit_dirty_mem_mb desc="Minimum memory usage for a document to be candidate for bad state" type="uint" default="3072">3072</limit_dirty_mem_mb>
<limit_cpu_per desc="Minimum CPU usage for a document to be candidate for bad state" type="uint" default="85">85</limit_cpu_per>
</cleanup>
</per_document>
<per_view desc="View-specific settings.">
<out_of_focus_timeout_secs desc="The maximum number of seconds before dimming and stopping updates when the browser tab is no longer in focus. Defaults to 120 seconds." type="uint" default="120">120</out_of_focus_timeout_secs>
<idle_timeout_secs desc="The maximum number of seconds before dimming and stopping updates when the user is no longer active (even if the browser is in focus). Defaults to 15 minutes." type="uint" default="900">900</idle_timeout_secs>
</per_view>
<loleaflet_html desc="Allows UI customization by replacing the single endpoint of loleaflet.html" type="string" default="loleaflet.html">loleaflet.html</loleaflet_html>
<logging>
<color type="bool">true</color>
<level type="string" desc="Can be 0-8, or none (turns off logging), fatal, critical, error, warning, notice, information, debug, trace" default="warning">warning</level>
<protocol type="bool" desc="Enable minimal client-site JS protocol logging from the start">false</protocol>
<file enable="false">
<!-- If you use other path than /var/log and you run loolwsd from systemd, make sure that you enable that path in loolwsd.service (ReadWritePaths). -->
<property name="path" desc="Log file path.">/var/log/loolwsd.log</property>
<property name="rotation" desc="Log file rotation strategy. See Poco FileChannel.">never</property>
<property name="archive" desc="Append either timestamp or number to the archived log filename.">timestamp</property>
<property name="compress" desc="Enable/disable log file compression.">true</property>
<property name="purgeAge" desc="The maximum age of log files to preserve. See Poco FileChannel.">10 days</property>
<property name="purgeCount" desc="The maximum number of log archives to preserve. Use 'none' to disable purging. See Poco FileChannel.">10</property>
<property name="rotateOnOpen" desc="Enable/disable log file rotation on opening.">true</property>
<property name="flush" desc="Enable/disable flushing after logging each line. May harm performance. Note that without flushing after each line, the log lines from the different processes will not appear in chronological order.">false</property>
</file>
<anonymize>
<anonymize_user_data type="bool" desc="Enable to anonymize/obfuscate of user-data in logs. If default is true, it was forced at compile-time and cannot be disabled." default="false">false</anonymize_user_data>
<anonymization_salt type="uint" desc="The salt used to anonymize/obfuscate user-data in logs. Use a secret 64-bit random number." default="82589933">82589933</anonymization_salt>
</anonymize>
</logging>
<loleaflet_logging desc="Logging in the browser console" default="false">false</loleaflet_logging>
<trace desc="Dump commands and notifications for replay. When 'snapshot' is true, the source file is copied to the path first." enable="false">
<path desc="Output path to hold trace file and docs. Use '%' for timestamp to avoid overwriting. For example: /some/path/to/looltrace-%.gz" compress="true" snapshot="false"></path>
<filter>
<message desc="Regex pattern of messages to exclude"></message>
</filter>
<outgoing>
<record desc="Whether or not to record outgoing messages" default="false">false</record>
</outgoing>
</trace>
<net desc="Network settings">
<!-- On systems where localhost resolves to IPv6 [::1] address first, when net.proto is all and net.listen is loopback, loolwsd unexpectedly listens on [::1] only.
You need to change net.proto to IPv4, if you want to use 127.0.0.1. -->
<proto type="string" default="all" desc="Protocol to use IPv4, IPv6 or all for both">all</proto>
<listen type="string" default="any" desc="Listen address that loolwsd binds to. Can be 'any' or 'loopback'.">any</listen>
<service_root type="path" default="" desc="Prefix all the pages, websockets, etc. with this path."></service_root>
<proxy_prefix type="bool" default="false" desc="Enable a ProxyPrefix to be passed int through which to redirect requests"></proxy_prefix>
<post_allow desc="Allow/deny client IP address for POST(REST)." allow="true">
<host desc="The IPv4 private 192.168 block as plain IPv4 dotted decimal addresses.">192\.168\.[0-9]{1,3}\.[0-9]{1,3}</host>
<host desc="Ditto, but as IPv4-mapped IPv6 addresses">::ffff:192\.168\.[0-9]{1,3}\.[0-9]{1,3}</host>
<host desc="The IPv4 loopback (localhost) address.">127\.0\.0\.1</host>
<host desc="Ditto, but as IPv4-mapped IPv6 address">::ffff:127\.0\.0\.1</host>
<host desc="The IPv6 loopback (localhost) address.">::1</host>
<host desc="The IPv4 private 172.17.0.0/16 subnet (Docker).">172\.17\.[0-9]{1,3}\.[0-9]{1,3}</host>
<host desc="Ditto, but as IPv4-mapped IPv6 addresses">::ffff:172\.17\.[0-9]{1,3}\.[0-9]{1,3}</host>
</post_allow>
<frame_ancestors desc="Specify who is allowed to embed the LO Online iframe (loolwsd and WOPI host are always allowed). Separate multiple hosts by space."></frame_ancestors>
<connection_timeout_secs desc="Specifies the connection, send, recv timeout in seconds for connections initiated by loolwsd (such as WOPI connections)." type="int" default="30"></connection_timeout_secs>
</net>
<ssl desc="SSL settings">
<enable type="bool" desc="Controls whether SSL encryption between browser and loolwsd is enabled (do not disable for production deployment). If default is false, must first be compiled with SSL support to enable." default="true">false</enable>
<termination desc="Connection via proxy where loolwsd acts as working via https, but actually uses http." type="bool" default="true">true</termination>
<cert_file_path desc="Path to the cert file" relative="false">/etc/loolwsd/cert.pem</cert_file_path>
<key_file_path desc="Path to the key file" relative="false">/etc/loolwsd/key.pem</key_file_path>
<ca_file_path desc="Path to the ca file" relative="false">/etc/loolwsd/ca-chain.cert.pem</ca_file_path>
<cipher_list desc="List of OpenSSL ciphers to accept" default="ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"></cipher_list>
<hpkp desc="Enable HTTP Public key pinning" enable="false" report_only="false">
<max_age desc="HPKP's max-age directive - time in seconds browser should remember the pins" enable="true">1000</max_age>
<report_uri desc="HPKP's report-uri directive - pin validation failure are reported at this URL" enable="false"></report_uri>
<pins desc="Base64 encoded SPKI fingerprints of keys to be pinned">
<pin></pin>
</pins>
</hpkp>
</ssl>
<security desc="Altering these defaults potentially opens you to significant risk">
<seccomp desc="Should we use the seccomp system call filtering." type="bool" default="true">true</seccomp>
<capabilities desc="Should we require capabilities to isolate processes into chroot jails" type="bool" default="true">true</capabilities>
</security>
<watermark>
<opacity desc="Opacity of on-screen watermark from 0.0 to 1.0" type="double" default="0.2"></opacity>
<text desc="Watermark text to be displayed on the document if entered" type="string"></text>
</watermark>
<welcome>
<enable type="bool" desc="Controls whether the welcome screen should be shown to the users on new install and updates." default="false">false</enable>
<enable_button type="bool" desc="Controls whether the welcome screen should have an explanatory button instead of an X button to close the dialog." default="false">false</enable_button>
<path desc="Path to 'welcome-$lang.html' files served on first start or when the version changes. When empty, defaults to the Release notes." type="path" relative="true" default="loleaflet/welcome"></path>
</welcome>
<user_interface>
<mode type="string" desc="Controls the user interface style (classic|notebookbar)" default="notebookbar">notebookbar</mode>
</user_interface>
<storage desc="Backend storage">
<filesystem allow="false" />
<wopi desc="Allow/deny wopi storage." allow="true">
<host desc="Regex pattern of hostname to allow or deny." allow="true">cloud-forms\.digitalcourage\.de</host>
<host desc="Regex pattern of hostname to allow or deny." allow="true">10\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}</host>
<host desc="Regex pattern of hostname to allow or deny." allow="true">172\.1[6789]\.[0-9]{1,3}\.[0-9]{1,3}</host>
<host desc="Regex pattern of hostname to allow or deny." allow="true">172\.2[0-9]\.[0-9]{1,3}\.[0-9]{1,3}</host>
<host desc="Regex pattern of hostname to allow or deny." allow="true">172\.3[01]\.[0-9]{1,3}\.[0-9]{1,3}</host>
<host desc="Regex pattern of hostname to allow or deny." allow="true">192\.168\.[0-9]{1,3}\.[0-9]{1,3}</host>
<host desc="Regex pattern of hostname to allow or deny." allow="false">192\.168\.1\.1</host>
<max_file_size desc="Maximum document size in bytes to load. 0 for unlimited." type="uint">0</max_file_size>
<reuse_cookies desc="When enabled, cookies from the browser will be captured and set on WOPI requests." type="bool" default="false">false</reuse_cookies>
<locking desc="Locking settings">
<refresh desc="How frequently we should re-acquire a lock with the storage server, in seconds (default 15 mins) or 0 for no refresh" type="int" default="900">900</refresh>
</locking>
</wopi>
<webdav desc="Allow/deny webdav storage. Mutually exclusive with wopi." allow="false">
<host desc="Hostname to allow" allow="true">cloud-forms.digitalcourage.de</host>
</webdav>
<ssl desc="SSL settings">
<enable type="bool" desc="If as_scheme is false or not set, this can be set to force SSL encryption between storage and loolwsd. When empty this defaults to following the ssl.enable setting"></enable>
<cert_file_path desc="Path to the cert file" relative="false"></cert_file_path>
<key_file_path desc="Path to the key file" relative="false"></key_file_path>
<ca_file_path desc="Path to the ca file. If this is not empty, then SSL verification will be strict, otherwise cert of storage (WOPI-like host) will not be verified." relative="false"></ca_file_path>
<cipher_list desc="List of OpenSSL ciphers to accept. If empty the defaults are used. These can be overridden only if absolutely needed."></cipher_list>
</ssl>
</storage>
<tile_cache_persistent desc="Should the tiles persist between two editing sessions of the given document?" type="bool" default="true">true</tile_cache_persistent>
<admin_console desc="Web admin console settings.">
<enable desc="Enable the admin console functionality" type="bool" default="true">true</enable>
<enable_pam desc="Enable admin user authentication with PAM" type="bool" default="false">false</enable_pam>
<username desc="The username of the admin console. Ignored if PAM is enabled.">admin</username>
<password desc="The password of the admin console. Deprecated on most platforms. Instead, use PAM or loolconfig to set up a secure password.">Mt5q7XeepHWGZrsOS7GrWLWv2h6jKirF</password>
</admin_console>
<monitors desc="Addresses of servers we connect to on start for monitoring">
</monitors>
</config>

+ 422
- 0
docker/overlays/nextcloud/html/AUTHORS View File

@ -0,0 +1,422 @@
Nextcloud is written by:
- AW-UC <git@a-wesemann.de>
- Aaron Wood <aaronjwood@gmail.com>
- Abijeet <abijeetpatro@gmail.com>
- Achim Königs <garfonso@tratschtante.de>
- Adam Williamson <awilliam@redhat.com>
- Administrator "Administrator@WINDOWS-2012"
- Adrian Brzezinski <adrian.brzezinski@eo.pl>
- Aldo "xoen" Giambelluca <xoen@xoen.org>
- Alecks Gates <alecks.g@gmail.com>
- Alejandro Varela <epma01@gmail.com>
- Alex Weirig <alex.weirig@technolink.lu>
- Alexander A. Klimov <grandmaster@al2klimov.de>
- Alexander Bergolth <leo@strike.wu.ac.at>
- Alexey Pyltsyn <lex61rus@gmail.com>
- Allan Nordhøy <epost@anotheragency.no>
- Andreas Fischer <bantu@owncloud.com>
- Andreas Pflug <dev@admin4.org>
- Andrew Brown <andrew@casabrown.com>
- André Gaul <gaul@web-yard.de>
- Ardinis <Ardinis@users.noreply.github.com>
- Ari Selseng <ari@selseng.net>
- Arne Hamann <kontakt+github@arne.email>
- Artem Kochnev <MrJeos@gmail.com>
- Artem Sidorenko <artem@posteo.de>
- Arthur Schiwon <blizzz@arthur-schiwon.de>
- Axel Helmert <axel.helmert@luka.de>
- Bart Visscher <bartv@thisnet.nl>
- Bartek Przybylski <bart.p.pl@gmail.com>
- Bastien Durel <bastien@durel.org>
- Bastien Ho <bastienho@urbancube.fr>
- Benjamin Diele <benjamin@diele.be>
- Benjamin Liles <benliles@arch.tamu.edu>
- Bernhard Ostertag <bernieo.code@gmx.de>
- Bernhard Posselt <dev@bernhard-posselt.com>
- Bernhard Reiter <ockham@raz.or.at>
- Birk Borkason <daniel.niccoli@gmail.com>
- Bjoern Schiessle <bjoern@schiessle.org>
- Björn Schießle <bjoern@schiessle.org>
- Blaok <i@blaok.me>
- Boris Rybalkin <ribalkin@gmail.com>
- Borjan Tchakaloff <borjan@tchakaloff.fr>
- Brad Rubenstein <brad@wbr.tech>
- Brandon Kirsch <brandonkirsch@github.com>
- Branko Kokanovic <branko@kokanovic.org>
- Brice Maron <brice@bmaron.net>
- Byron Marohn <combustible@live.com>
- Carla Schroder <carla@owncloud.com>
- Carlos Cerrillo <ccerrillo@gmail.com>
- Carsten Wiedmann <carsten_sttgt@gmx.de>
- Christian <16852529+cviereck@users.noreply.github.com>
- Christian Berendt <berendt@b1-systems.de>
- Christian Jürges <christian@eqipe.ch>
- Christian Kampka <christian@kampka.net>
- Christian Oliff <christianoliff@yahoo.com>
- Christoph Schaefer "christophł@wolkesicher.de"
- Christoph Seitz <christoph.seitz@posteo.de>
- Christoph Wickert <cwickert@suse.de>
- Christoph Wurst <christoph@winzerhof-wurst.at>
- Christopher Bartz <bartz@dkrz.de>
- Christopher Schäpers <kondou@ts.unde.re>
- Christopher T. Johnson <ctjctj@gmail.com>
- Clark Tomlinson <fallen013@gmail.com>
- Clement Wong <git@clement.hk>
- Cornelius Kölbel <cornelius.koelbel@netknights.it>
- Cthulhux <git@tuxproject.de>
- Damjan Georgievski <gdamjan@gmail.com>
- Dan Callahan <dan.callahan@gmail.com>
- Daniel Calviño Sánchez <danxuliu@gmail.com>
- Daniel Hansson <daniel@techandme.se>
- Daniel Jagszent <daniel@jagszent.de>
- Daniel Kesselberg <mail@danielkesselberg.de>
- Daniel Rudolf <github.com@daniel-rudolf.de>
- Daniel Schneider <daniel@schneidoa.de>
- Dariusz Olszewski <starypatyk@users.noreply.github.com>
- David Prévot <taffit@debian.org>
- David Toledo <dtoledo@solidgear.es>
- Denis Mosolov <denismosolov@gmail.com>
- Derek <derek.kelly27@gmail.com>
- Dominik Schmidt <dev@dominik-schmidt.de>
- Donquixote <marjunebatac@gmail.com>
- Elijah Martin-Merrill <elijah@nyp-itsours.com>
- Eric Masseran <rico.masseran@gmail.com>
- Estelle Poulin <dev@inspiredby.es>
- Evgeny Golyshev <eugulixes@gmail.com>
- Fabrizio Steiner <fabrizio.steiner@gmail.com>
- Felix Epp <work@felixepp.de>
- Felix Heidecke <felix@heidecke.me>
- Felix Moeller <mail@felixmoeller.de>
- Felix Nieuwenhuizen <felix@tdlrali.com>
- Felix Nüsse <Felix.nuesse@t-online.de>
- Felix Rupp <github@felixrupp.com>
- Filis Futsarov <filisko@users.noreply.github.com>
- Florent <florent@coppint.com>
- Florin Peter <github@florin-peter.de>
- Flávio Gomes da Silva Lisboa <flavio.lisboa@serpro.gov.br>
- Frank Isemann <frank@isemann.name>
- Frank Karlitschek <frank@karlitschek.de>
- François Kubler <francois@kubler.org>
- Frederic Werner <frederic-github@werner-net.work>
- Frédéric Fortier <frederic.fortier@oronospolytechnique.com>
- Gary Kim <gary@garykim.dev>
- Georg Ehrke <oc.list@georgehrke.com>
- GrayFix <grayfix@gmail.com>
- Greta Doci <gretadoci@gmail.com>
- GretaD <gretadoci@gmail.com>
- Guillaume COMPAGNON <gcompagnon@outlook.com>
- Hemanth Kumar Veeranki <hems.india1997@gmail.com>
- Hendrik Leppelsack <hendrik@leppelsack.de>
- Holger Hees <holger.hees@gmail.com>
- Ilja Neumann <ineumann@owncloud.com>
- Individual IT Services <info@individual-it.net>
- J0WI <J0WI@users.noreply.github.com>
- Jaakko Salo <jaakkos@gmail.com>
- Jacob Neplokh <me@jacobneplokh.com>
- Jakob Sack <mail@jakobsack.de>
- Jakub Onderka <ahoj@jakubonderka.cz>
- Jan C. Borchardt <hey@jancborchardt.net>
- Jan-Christoph Borchardt <hey@jancborchardt.net>
- Jan-Philipp Litza <jplitza@users.noreply.github.com>
- Janis Köhr <janis.koehr@novatec-gmbh.de>
- Jared Boone <jared.boone@gmail.com>
- Jarkko Lehtoranta <devel@jlranta.com>
- Jean-Louis Dupond <jean-louis@dupond.be>
- Jens-Christian Fischer <jens-christian.fischer@switch.ch>
- Jesús Macias <jmacias@solidgear.es>
- Joachim Bauch <bauch@struktur.de>
- Joachim Sokolowski <github@sokolowski.org>
- Joas Schilling <coding@schilljs.com>
- Joel S <joel.devbox@protonmail.com>
- Johan Björk <johanimon@gmail.com>
- Johannes Ernst <jernst@indiecomputing.com>
- Johannes Riedel <joeried@users.noreply.github.com>
- Johannes Schlichenmaier <johannes@schlichenmaier.info>
- Johannes Willnecker <johannes@willnecker.com>
- John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
- Jonas Sulzer <jonas@violoncello.ch>
- Jonny007-MKD <1-23-4-5@web.de>
- Jos Poortvliet <jos@opensuse.org>
- Jose Quinteiro <github@quinteiro.org>
- Juan Pablo Villafañez <jvillafanez@solidgear.es>
- Juan Pablo Villafáñez <jvillafanez@solidgear.es>
- Julien Lutran <julien.lutran@corp.ovh.com>
- Julien Veyssier <eneiluj@posteo.net>
- Julius Haertl <jus@bitgrid.net>
- Julius Härtl <jus@bitgrid.net>
- Jörn Friedrich Dreyer <jfd@butonic.de>
- KB7777 <k.burkowski@gmail.com>
- Kamil Domanski <kdomanski@kdemail.net>
- Kawohl <john@owncloud.com>
- Kenneth Newwood <kenneth@newwood.name>
- Kevin Lanni <therealklanni@gmail.com>
- Kevin Ndung'u <kevgathuku@gmail.com>
- Kim Brose <kim.brose@rwth-aachen.de>
- Klaas Freitag <freitag@owncloud.com>
- Knut Ahlers <knut@ahlers.me>
- Ko- <k.stoffelen@cs.ru.nl>
- Konrad Bucheli <kb@open.ch>
- Kristof Provost <github@sigsegv.be>
- Kyle Fazzari <kyrofa@ubuntu.com>
- Lars <winnetou+github@catolic.de>
- Lars Knickrehm <mail@lars-sh.de>
- Laurens Post <Crote@users.noreply.github.com>
- Laurens Post <lkpost@scept.re>
- Lauris Binde <laurisb@users.noreply.github.com>
- Lennart Rosam <hello@takuto.de>
- Lennart Rosam <lennart.rosam@medien-systempartner.de>
- Leon Klingele <git@leonklingele.de>
- Leon Klingele <leon@struktur.de>
- Liam Dennehy <liam@wiemax.net>
- Liam JACK <liamjack@users.noreply.github.com>
- Lionel Elie Mamane <lionel@mamane.lu>
- Loki3000 <github@labcms.ru>
- Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it>
- Lukas Reschke <lukas@statuscode.ch>
- Lukas Stabe <lukas@stabe.de>
- Luke Policinski <lpolicinski@gmail.com>
- Magnus Walbeck <mw@mwalbeck.org>
- Marcel Klehr <mklehr@gmx.net>
- Marcel Waldvogel <marcel.waldvogel@uni-konstanz.de>
- Marin Treselj <marin@pixelipo.com>
- Mario Danic <mario@lovelyhq.com>
- Mario Kolling <mario.kolling@serpro.gov.br>
- Marius Blüm <marius@lineone.io>
- Marius David Wieschollek <git.public@mdns.eu>
- Markus Goetz <markus@woboq.com>
- Markus Staab <markus.staab@redaxo.de>
- MartB <mart.b@outlook.de>
- Martin <github@diemattels.at>
- Martin Konrad <info@martin-konrad.net>
- Martin Konrad <konrad@frib.msu.edu>
- Martin Mattel <martin.mattel@diemattels.at>
- Marvin Thomas Rabe <mrabe@marvinrabe.de>
- Masaki Kawabata Neto <masaki.kawabata@gmail.com>
- MasterOfDeath <rinat.gumirov@mail.ru>
- Matthew Setter <matthew@matthewsetter.com>
- Max Kovalenko <mxss1998@yandex.ru>
- Maxence Lange <maxence@artificial-owl.com>
- Maxence Lange <maxence@nextcloud.com>
- Maxence Lange <maxence@pontapreta.net>
- MichaIng <28480705+MichaIng@users.noreply.github.com>
- MichaIng <micha@dietpi.com>
- Michael Gapczynski <GapczynskiM@gmail.com>
- Michael Göhler <somebody.here@gmx.de>
- Michael Jobst <mjobst+github@tecratech.de>
- Michael Kuhn <michael@ikkoku.de>
- Michael Letzgus <www@chronos.michael-letzgus.de>
- Michael Roitzsch <reactorcontrol@icloud.com>
- Michael Roth <michael.roth@rz.uni-augsburg.de>
- Michael Weimann <mail@michael-weimann.eu>
- Michael Zamot <michael@zamot.io>
- Michał Węgrzynek <michal.wegrzynek@malloc.com.pl>
- Miguel Prokop <miguel.prokop@vtu.com>
- Mikael Hammarin <mikael@try2.se>
- Mitar <mitar.git@tnode.com>
- Mohammed Abdellatif <m.latief@gmail.com>
- Morris Jobke <hey@morrisjobke.de>
- Nicolai Ehemann <en@enlightened.de>
- Nicolas Grekas <nicolas.grekas@gmail.com>
- Nils <git@to.nilsschnabel.de>
- Nils Wittenbrink <nilswittenbrink@web.de>
- Nmz <nemesiz@nmz.lt>
- Noveen Sachdeva <noveen.sachdeva@research.iiit.ac.in>
- Ole Ostergaard <ole.c.ostergaard@gmail.com>
- Ole Ostergaard <ole.ostergaard@knime.com>
- Oliver Gasser <oliver.gasser@gmail.com>
- Oliver Kohl D.Sc. <oliver@kohl.bz>
- Oliver Salzburg <oliver.salzburg@gmail.com>
- Oliver Wegner <void1976@gmail.com>
- Olivier Paroz <github@oparoz.com>
- Owen Winkler <a_github@midnightcircus.com>
- Pascal de Bruijn <pmjdebruijn@pcode.nl>
- Patrick Paysant <patrick.paysant@linagora.com>
- Patrik Kernstock <info@pkern.at>
- Pauli Järvinen <pauli.jarvinen@gmail.com>
- Pavel Krasikov <klonishe@gmail.com>
- Pellaeon Lin <nfsmwlin@gmail.com>
- Peter Kubica <peter@kubica.ch>
- Phil Davis <phil.davis@inf.org>
- Philipp Kapfer <philipp.kapfer@gmx.at>
- Philipp Schaffrath <github@philipp.schaffrath.email>
- Philipp Staiger <philipp@staiger.it>
- Philippe Jung <phil.jung@free.fr>
- Pierre Ozoux <pierre@ozoux.net>
- Pierre Rudloff <contact@rudloff.pro>
- Piotr Filiciak <piotr@filiciak.pl>
- Piotr M <mrow4a@yahoo.com>
- Piotr Mrowczynski <mrow4a@yahoo.com>
- Piotr Mrówczyński <mrow4a@yahoo.com>
- Qingping Hou <dave2008713@gmail.com>
- Ralph Krimmel <rkrimme1@gwdg.de>
- Ramiro Aparicio <rapariciog@gmail.com>
- Randolph Carter <RandolphCarter@fantasymail.de>
- Rayn0r <andrew@ilpss8.myfirewall.org>
- RealRancor <Fisch.666@gmx.de>
- RealRancor <fisch.666@gmx.de>
- Rello <Rello@users.noreply.github.com>
- Remco Brenninkmeijer <requist1@starmail.nl>
- Rinat Gumirov <rinat.gumirov@mail.ru>
- Robert Dailey <rcdailey@gmail.com>
- Robin Appelman <robin@icewind.nl>
- Robin McCorkell <robin@mccorkell.me.uk>
- Robin Müller <coder-hugo@users.noreply.github.com>
- Roeland Jago Douma <roeland@famdouma.nl>
- Roger Szabo <roger.szabo@web.de>
- Roland Tapken <roland@bitarbeiter.net>
- Romain Rivière <lecoyote@lecoyote.org>
- Roman Kreisel <mail@romankreisel.de>
- Ross Nicoll <jrn@jrn.me.uk>
- Ruben Homs <ruben@homs.codes>
- RussellAult <RussellAult@users.noreply.github.com>
- Rémy Jacquin <remy@remyj.fr>
- S. Cat <33800996+sparrowjack63@users.noreply.github.com>
- SA <stephen@mthosting.net>
- Sam Bull <aa6bs0@sambull.org>
- Sam Tuke <mail@samtuke.com>
- Samuel CHEMLA <chemla.samuel@gmail.com>
- Sander Ruitenbeek <s.ruitenbeek@getgoing.nl>
- Sander Ruitenbeek <sander@grids.be>
- Sandro Lutz <sandro.lutz@temparus.ch>
- Sascha Sambale <mastixmc@gmail.com>
- Sascha Wiswedel <sascha.wiswedel@nextcloud.com>
- Scott Dutton <exussum12@users.noreply.github.com>
- Scott Dutton <scott@exussum.co.uk>
- Scott Shambarger <devel@shambarger.net>
- Sean Comeau <sean@ftlnetworks.ca>
- Sebastian Döll <sebastian.doell@libasys.de>
- Sebastian Steinmetz <462714+steiny2k@users.noreply.github.com>
- Sebastian Steinmetz <me@sebastiansteinmetz.ch>
- Sebastian Wessalowski <sebastian@wessalowski.org>
- Semih Serhat Karakaya <karakayasemi@itu.edu.tr>
- Senorsen <senorsen.zhang@gmail.com>
- Serge Martin <edb@sigluy.net>
- Sergej Nikolaev <kinolaev@gmail.com>
- Sergej Pupykin <pupykin.s@gmail.com>
- Sergey Shliakhov <husband.sergey@gmail.com>
- Sergio Bertolin <sbertolin@solidgear.es>
- Sergio Bertolín <sbertolin@solidgear.es>
- Simon Könnecke <simonkoennecke@gmail.com>
- Simon Spannagel <simonspa@kth.se>
- Simounet <contact@simounet.net>
- Sjors van der Pluijm <sjors@desjors.nl>
- Stefan Rado <owncloud@sradonia.net>
- Stefan Schneider <stefan.schneider@squareweave.com.au>
- Stefan Weiberg <sweiberg@suse.com>
- Stefan Weil <sw@weilnetz.de>
- Steffen Lindner <mail@steffen-lindner.de>
- Stephan Müller <mail@stephanmueller.eu>
- Stephan Peijnik <speijnik@anexia-it.com>
- Stephen Cuppett <steve@cuppett.com>
- Steven Bühner <buehner@me.com>
- Sujith H <sharidasan@owncloud.com>
- Sven Strickroth <email@cs-ware.de>
- Sylvia van Os <sylvia@hackerchick.me>
- Tekhnee <info@tekhnee.org>
- Temtaime <temtaime@gmail.com>
- Thibaut GRIDEL <tgridel@free.fr>
- Thomas Citharel <nextcloud@tcit.fr>
- Thomas Ebert <thomas.ebert@usability.de>
- Thomas Müller <thomas.mueller@tmit.eu>
- Thomas Pulzer <t.pulzer@kniel.de>
- Thomas Tanghus <thomas@tanghus.net>
- Tiago Flores <tiago.flores@yahoo.com.br>
- Tigran Mkrtchyan <tigran.mkrtchyan@desy.de>
- Tim Dettrick <t.dettrick@uq.edu.au>
- Tim Obert <tobert@w-commerce.de>
- Tim Terhorst <mynamewastaken+gitlab@gmail.com>
- TimObert <tobert@w-commerce.de>
- Timo Förster <tfoerster@webfoersterei.de>
- Tobia De Koninck <LEDfan@users.noreply.github.com>
- Tobia De Koninck <tobia@ledfan.be>
- Tobias Kaminsky <tobias@kaminsky.me>
- Tobias Perschon <tobias@perschon.at>
- Tom Needham <tom@owncloud.com>
- Tomasz Paluszkiewicz <tomasz.paluszkiewicz@gmail.com>
- Tor Lillqvist <tml@collabora.com>
- Unknown <anpz.asutp@gmail.com>
- Valdnet <47037905+Valdnet@users.noreply.github.com>
- Victor Dubiniuk <dubiniuk@owncloud.com>
- Viktor Szépe <viktor@szepe.net>
- Vincent Chan <plus.vincchan@gmail.com>
- Vincent Petry <pvince81@owncloud.com>
- Vinicius Cubas Brand <vinicius@eita.org.br>
- Vitor Mattos <vitor@php.rio>
- Vlastimil Pecinka <pecinka@email.cz>
- Volkan Gezer <volkangezer@gmail.com>
- Volker <skydiablo@gmx.net>
- William Pain <pain.william@gmail.com>
- Xheni Myrtaj <myrtajxheni@gmail.com>
- Xuanwo <xuanwo@yunify.com>
- adrien <adrien.waksberg@believedigital.com>
- alexweirig <alex.weirig@technolink.lu>
- b108@volgograd "b108@volgograd"
- bladewing <lukas@ifflaender-family.de>
- bline <scottbeck@gmail.com>
- blizzz <blizzz@arthur-schiwon.de>
- brad2014 <brad2014@users.noreply.github.com>
- brumsel <brumsel@losecatcher.de>
- cetra3 <peter@parashift.com.au>
- cmeh <cmeh@users.noreply.github.com>
- comradekingu <epost@anotheragency.no>
- dartcafe <github@dartcafe.de>
- davidgumberg <davidnoizgumberg@gmail.com>
- davitol <dtoledo@solidgear.es>
- derkostka <sebastian.kostka@gmail.com>
- duritong <peter.meier+github@immerda.ch>
- eduardo <eduardo@vnexu.net>
- enoch <lanxenet@hotmail.com>
- exner104 <59639860+exner104@users.noreply.github.com>
- fabian <fabian@web2.0-apps.de>
- felixboehm <felix@webhippie.de>
- fnuesse <felix.nuesse@t-online.de>
- fnuesse <fnuesse@techfak.uni-bielefeld.de>
- helix84 <helix84@centrum.sk>
- hkjolhede <hkjolhede@gmail.com>
- ideaship <ideaship@users.noreply.github.com>
- j-ed <juergen@eisfair.org>
- j3l11234 <297259024@qq.com>
- jaltek <jaltek@mailbox.org>
- jknockaert <jasper@knockaert.nl>
- josh4trunks <joshruehlig@gmail.com>
- karakayasemi <karakayasemi@itu.edu.tr>
- korelstar <korelstar@users.noreply.github.com>
- lui87kw <lukas.ifflaender@uni-wuerzburg.de>
- macjohnny <estebanmarin@gmx.ch>
- marco44 <cousinmarc@gmail.com>
- martin-rueegg <martin.rueegg@metaworx.ch>
- martin.mattel@diemattels.at <martin.mattel@diemattels.at>
- martink-p <47943787+martink-p@users.noreply.github.com>
- michaelletzgus <michaelletzgus@users.noreply.github.com>
- michag86 <micha_g@arcor.de>
- mmccarn <mmccarn-github@mmsionline.us>
- nhirokinet <nhirokinet@nhiroki.net>
- nishiki <nishiki@yaegashi.fr>
- onehappycat <one.happy.cat@gmx.com>
- oparoz <owncloud@interfasys.ch>
- phisch <git@philippschaffrath.de>
- rakekniven <mark.ziegler@rakekniven.de>
- rawtaz <rawtaz@users.noreply.github.com>
- root "root@oc.(none)"
- root <root@localhost.localdomain>
- rubo77 <github@r.z11.de>
- sammo2828 <sammo2828@gmail.com>
- scambra <sergio@entrecables.com>
- scolebrook <scolebrook@mac.com>
- shkdee <louis.traynard@m4x.org>
- simonspa <1677436+simonspa@users.noreply.github.com>
- sualko <klaus@jsxc.org>
- tbartenstein <tbartenstein@users.noreply.github.com>
- tbelau666 <thomas.belau@gmx.de>
- tux-rampage <tux-rampage@users.noreply.github.com>
- v1r0x <vinzenz.rosenkranz@gmail.com>
- voxsim "Simon Vocella"
- waleczny <michal@walczak.xyz>
- zulan <git@zulan.net>
- Łukasz Buśko <busko.lukasz@pm.me>
With help from many libraries and frameworks including:
Open Collaboration Services
SabreDAV
jQuery

+ 105
- 0
docker/overlays/nextcloud/html/console.php View File

@ -0,0 +1,105 @@
<?php
/**
* @copyright Copyright (c) 2016, ownCloud, Inc.
*
* @author Bart Visscher <bartv@thisnet.nl>
* @author Christoph Wurst <christoph@winzerhof-wurst.at>
* @author Estelle Poulin <dev@inspiredby.es>
* @author Joas Schilling <coding@schilljs.com>
* @author Ko- <k.stoffelen@cs.ru.nl>
* @author Lukas Reschke <lukas@statuscode.ch>
* @author Michael Weimann <mail@michael-weimann.eu>
* @author Morris Jobke <hey@morrisjobke.de>
* @author Patrick Paysant <patrick.paysant@linagora.com>
* @author RealRancor <fisch.666@gmx.de>
* @author Roeland Jago Douma <roeland@famdouma.nl>
* @author Thomas Müller <thomas.mueller@tmit.eu>
* @author Victor Dubiniuk <dubiniuk@owncloud.com>
*
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
require_once __DIR__ . '/lib/versioncheck.php';
use OC\Console\Application;
use Symfony\Component\Console\Input\ArgvInput;
use Symfony\Component\Console\Output\ConsoleOutput;
define('OC_CONSOLE', 1);
function exceptionHandler($exception) {
echo "An unhandled exception has been thrown:" . PHP_EOL;
echo $exception;
exit(1);
}
try {
require_once __DIR__ . '/lib/base.php';
// set to run indefinitely if needed
if (strpos(@ini_get('disable_functions'), 'set_time_limit') === false) {
@set_time_limit(0);
}
if (!OC::$CLI) {
echo "This script can be run from the command line only" . PHP_EOL;
exit(1);
}
set_exception_handler('exceptionHandler');
if (!function_exists('posix_getuid')) {
echo "The posix extensions are required - see http://php.net/manual/en/book.posix.php" . PHP_EOL;
exit(1);
}
$user = posix_getuid();
$configUser = fileowner(OC::$configDir . 'config.php');
if ($user !== $configUser) {
echo "Console has to be executed with the user that owns the file config/config.php" . PHP_EOL;
echo "Current user id: " . $user . PHP_EOL;
echo "Owner id of config.php: " . $configUser . PHP_EOL;
echo "Try adding 'sudo -u #" . $configUser . "' to the beginning of the command (without the single quotes)" . PHP_EOL;
echo "If running with 'docker exec' try adding the option '-u " . $configUser . "' to the docker command (without the single quotes)" . PHP_EOL;
exit(1);
}
$oldWorkingDir = getcwd();
if ($oldWorkingDir === false) {
echo "This script can be run from the Nextcloud root directory only." . PHP_EOL;
echo "Can't determine current working dir - the script will continue to work but be aware of the above fact." . PHP_EOL;
} elseif ($oldWorkingDir !== __DIR__ && !chdir(__DIR__)) {
echo "This script can be run from the Nextcloud root directory only." . PHP_EOL;
echo "Can't change to Nextcloud root directory." . PHP_EOL;
exit(1);
}
if (!function_exists('pcntl_signal') && !in_array('--no-warnings', $argv)) {
echo "The process control (PCNTL) extensions are required in case you want to interrupt long running commands - see http://php.net/manual/en/book.pcntl.php" . PHP_EOL;
}
$application = new Application(
\OC::$server->getConfig(),
\OC::$server->getEventDispatcher(),
\OC::$server->getRequest(),
\OC::$server->getLogger(),
\OC::$server->query(\OC\MemoryInfo::class)
);
$application->loadCommands(new ArgvInput(), new ConsoleOutput());
$application->run();
} catch (Exception $ex) {
exceptionHandler($ex);
} catch (Error $ex) {
exceptionHandler($ex);
}

+ 1
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/.gitignore View File

@ -0,0 +1 @@
build/

+ 19
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/.scrutinizer.yml View File

@ -0,0 +1,19 @@
filter:
excluded_paths:
- 'templates/*'
- 'css/*'
- 'tests/*'
imports:
- php
- javascript
tools:
external_code_coverage:
timeout: 3600
checks:
php:
# this is not working properly with core exceptions
catch_class_exists: false
line_length:
max_length: '80'

+ 44
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/.travis.yml View File

@ -0,0 +1,44 @@
sudo: false
language: php
php:
- 7.2
env:
global:
- DB=sqlite
matrix:
- CORE_BRANCH=stable19 REPO=nextcloud/server
matrix:
fast_finish: true
before_install:
- wget https://phar.phpunit.de/phpunit-5.7.phar
- chmod +x phpunit-5.7.phar
- mkdir bin
- mv phpunit-5.7.phar bin/phpunit
- phpunit --version
- cd ../
- git clone https://github.com/$REPO.git --recursive --depth 1 -b $CORE_BRANCH mainrepo
- mv apporder mainrepo/apps/
before_script:
# fill owncloud with default configs and enable apporder
- cd mainrepo
- mkdir data
- ./occ maintenance:install --database-name oc_autotest --database-user oc_autotest --admin-user admin --admin-pass admin --database $DB --database-pass=''
- ./occ app:enable apporder
- ./occ app:check-code apporder
- php -S localhost:8080 &
- cd apps/apporder
- export PATH="$PWD/bin:$PATH"
script:
- make test
after_failure:
- cat ../../data/owncloud.log
after_success:
- wget https://scrutinizer-ci.com/ocular.phar
- php ocular.phar code-coverage:upload --format=php-clover build/php-unit.clover

+ 9
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/.tx/config View File

@ -0,0 +1,9 @@
[main]
host = https://www.transifex.com
lang_map = bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja
[nextcloud.apporder]
file_filter = translationfiles/<lang>/apporder.po
source_file = translationfiles/templates/apporder.pot
source_lang = en
type = PO

+ 74
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/CHANGELOG.md View File

@ -0,0 +1,74 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.12.0] - 2021-03-03
### Added
- Support for Nextcloud 21
## [0.11.0] - 2020-09-03
### Added
- Support for Nextcloud 20
## [0.10.0] - 2020-05-22
### Added
- Support for Nextcloud 19
- Added functionality to force an admin-defined order
### Fixed
- Fix for app sorting in dark mode
## [0.9.0] - 2019-12-22
### Added
- Support for Nextcloud 18
## [0.8.0] - 2019-08-20
### Added
- Support for Nextcloud 17
## [0.7.1] - 2019-04-27
### Fixed
- Scanning of outdated files
## [0.7.0] - 2019-04-11
### Changed
- Add support for Nextcloud 16
## [0.6.0] - 2018-11-24
## [0.5.0] - 2018-08-03
## [0.4.1] - 2017-12-05
### Fixed
- Fix bug in IE11
## [0.4.0] - 2017-08-04
### Changed
- Move order changing to the personal/admin settings
- Make it possible to hide apps per user/as admin
- Add support for new Nextcloud menu
## [0.3.3] - 2016-10-12
## [0.3.2] - 2016-09-06
## [0.3.1] - 2016-09-05
## [0.3.0] - 2016-09-04
### Changed
- Drop support for Nextcloud 9 / OwnCloud 9.0
### Added
- Set default landing page per user (See README.md for details)
## [0.2.0] - 2016-09-04

+ 661
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/LICENSE View File

@ -0,0 +1,661 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<http://www.gnu.org/licenses/>.

+ 177
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/Makefile View File

@ -0,0 +1,177 @@
# This file is licensed under the Affero General Public License version 3 or
# later. See the COPYING file.
# @author Bernhard Posselt <dev@bernhard-posselt.com>
# @copyright Bernhard Posselt 2016
# Generic Makefile for building and packaging an ownCloud app which uses npm and
# Composer.
#
# Dependencies:
# * make
# * which
# * curl: used if phpunit and composer are not installed to fetch them from the web
# * tar: for building the archive
# * npm: for building and testing everything JS
#
# If no composer.json is in the app root directory, the Composer step
# will be skipped. The same goes for the package.json which can be located in
# the app root or the js/ directory.
#
# The npm command by launches the npm build script:
#
# npm run build
#
# The npm test command launches the npm test script:
#
# npm run test
#
# The idea behind this is to be completely testing and build tool agnostic. All
# build tools and additional package managers should be installed locally in
# your project, since this won't pollute people's global namespace.
#
# The following npm scripts in your package.json install and update the bower
# and npm dependencies and use gulp as build system (notice how everything is
# run from the node_modules folder):
#
# "scripts": {
# "test": "node node_modules/gulp-cli/bin/gulp.js karma",
# "prebuild": "npm install && node_modules/bower/bin/bower install && node_modules/bower/bin/bower update",
# "build": "node node_modules/gulp-cli/bin/gulp.js"
# },
app_name=$(notdir $(CURDIR))
build_tools_directory=$(CURDIR)/build/tools
source_build_directory=$(CURDIR)/build/artifacts/source
source_package_name=$(source_build_directory)/$(app_name)
appstore_build_directory=$(CURDIR)/build/artifacts/appstore
appstore_package_name=$(appstore_build_directory)/$(app_name)
npm=$(shell which npm 2> /dev/null)
composer=$(shell which composer 2> /dev/null)
all: build
# Fetches the PHP and JS dependencies and compiles the JS. If no composer.json
# is present, the composer step is skipped, if no package.json or js/package.json
# is present, the npm step is skipped
.PHONY: build
build:
ifneq (,$(wildcard $(CURDIR)/composer.json))
make composer
endif
ifneq (,$(wildcard $(CURDIR)/package.json))
make npm
endif
ifneq (,$(wildcard $(CURDIR)/js/package.json))
make npm
endif
# Installs and updates the composer dependencies. If composer is not installed
# a copy is fetched from the web
.PHONY: composer
composer:
ifeq (, $(composer))
@echo "No composer command available, downloading a copy from the web"
mkdir -p $(build_tools_directory)
curl -sS https://getcomposer.org/installer | php
mv composer.phar $(build_tools_directory)
php $(build_tools_directory)/composer.phar install --prefer-dist
php $(build_tools_directory)/composer.phar update --prefer-dist
else
composer install --prefer-dist
composer update --prefer-dist
endif
# Installs npm dependencies
.PHONY: npm
npm:
ifeq (,$(wildcard $(CURDIR)/package.json))
cd js && $(npm) run build
else
npm run build
endif
# Removes the appstore build
.PHONY: clean
clean:
rm -rf ./build
# Same as clean but also removes dependencies installed by composer, bower and
# npm
.PHONY: distclean
distclean: clean
rm -rf vendor
rm -rf node_modules
rm -rf js/vendor
rm -rf js/node_modules
# Builds the source and appstore package
.PHONY: dist
dist:
make source
make appstore
# Builds the source package
.PHONY: source
source:
rm -rf $(source_build_directory)
mkdir -p $(source_build_directory)
tar cvzf $(source_package_name).tar.gz --exclude-vcs \
--exclude="../$(app_name)/build" \
--exclude="../$(app_name)/js/node_modules" \
--exclude="../$(app_name)/node_modules" \
--exclude="../$(app_name)/*.log" \
--exclude="../$(app_name)/js/*.log" \
../$(app_name) \
# Builds the source package for the app store, ignores php and js tests
.PHONY: appstore
appstore:
rm -rf $(appstore_build_directory)
mkdir -p $(appstore_build_directory)
tar cvzf $(appstore_package_name).tar.gz \
--exclude="../$(app_name)/build" \
--exclude="../$(app_name)/tests" \
--exclude="../$(app_name)/Makefile" \
--exclude="../$(app_name)/*.log" \
--exclude="../$(app_name)/phpunit*xml" \
--exclude="../$(app_name)/composer.*" \
--exclude="../$(app_name)/js/node_modules" \
--exclude="../$(app_name)/js/tests" \
--exclude="../$(app_name)/js/test" \
--exclude="../$(app_name)/js/*.log" \
--exclude="../$(app_name)/js/package.json" \
--exclude="../$(app_name)/js/bower.json" \
--exclude="../$(app_name)/js/karma.*" \
--exclude="../$(app_name)/js/protractor.*" \
--exclude="../$(app_name)/package.json" \
--exclude="../$(app_name)/bower.json" \
--exclude="../$(app_name)/karma.*" \
--exclude="../$(app_name)/protractor\.*" \
--exclude="../$(app_name)/.*" \
--exclude="../$(app_name)/js/.*" \
--exclude-vcs \
../$(app_name)
# Command for running JS and PHP tests. Works for package.json files in the js/
# and root directory. If phpunit is not installed systemwide, a copy is fetched
# from the internet
.PHONY: test
test:
ifneq (,$(wildcard $(CURDIR)/js/package.json))
cd js && $(npm) run test
endif
ifneq (,$(wildcard $(CURDIR)/package.json))
$(npm) run test
endif
ifeq (, $(shell which phpunit 2> /dev/null))
@echo "No phpunit command available, downloading a copy from the web"
mkdir -p $(build_tools_directory)
curl -sSL https://phar.phpunit.de/phpunit.phar -o $(build_tools_directory)/phpunit.phar
php $(build_tools_directory)/phpunit.phar -c phpunit.xml
php $(build_tools_directory)/phpunit.phar -c phpunit.integration.xml
else
phpunit -c phpunit.xml --coverage-clover build/php-unit.clover
phpunit -c phpunit.integration.xml --coverage-clover build/php-unit.clover
endif

+ 30
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/README.md View File

@ -0,0 +1,30 @@
# AppOrder
[![Build Status](https://travis-ci.org/juliushaertl/apporder.svg?branch=master)](https://travis-ci.org/juliushaertl/apporder)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/juliushaertl/apporder/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/juliushaertl/apporder/?branch=master)
[![Code Coverage](https://scrutinizer-ci.com/g/juliushaertl/apporder/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/juliushaertl/apporder/?branch=master)
Enable sorting the app icons from the personal settings. The order will be
saved for each user individually. Administrators can define a custom default
order.
## Set a default order for all new users
Go to the Admin settings > Additional settings and drag the icons under App order.
## Use first app as default app
You can easily let Nextcloud redirect your user to the first app in their
personal order by changing the following parameter in your config/config.php:
'defaultapp' => 'apporder',
Users will now get redirected to the first app of the default order or to the
first app of the user order.
# Installation
## From git
1. Clone the app into your apps/ directory: `git clone https://github.com/juliushaertl/apporder.git`
2. Enable it

+ 25
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/appinfo/app.php View File

@ -0,0 +1,25 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
\OCP\Util::addStyle('apporder', 'apporder');
\OCP\Util::addScript('apporder', 'apporder');

+ 43
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/appinfo/info.xml View File

@ -0,0 +1,43 @@
<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>apporder</id>
<name>AppOrder</name>
<summary>Sort apps in the menu with drag and drop</summary>
<description>
Enable sorting the app icons from the personal settings. The order will be saved for each
user individually. Administrators can define a custom default order.
## Set a default order for all new users
Go to the Admin settings > Additional settings and drag the icons under App order.
## Use first app as default app
You can easily let Nextcloud redirect your user to the first app in their
personal order by changing the following parameter in your config/config.php:
'defaultapp' => 'apporder',
Users will now get redirected to the first app of the default order or to the
first app of the user order.
</description>
<version>0.12.0</version>
<licence>agpl</licence>
<author mail="jus@bitgrid.net">Julius Härtl</author>
<namespace>AppOrder</namespace>
<category>customization</category>
<bugs>https://github.com/juliushaertl/apporder/issues</bugs>
<repository type="git">https://github.com/juliushaertl/apporder.git</repository>
<screenshot>https://download.bitgrid.net/nextcloud/apporder/apporder.png</screenshot>
<dependencies>
<nextcloud min-version="16" max-version="21" />
</dependencies>
<settings>
<admin>OCA\AppOrder\Settings\AdminSettings</admin>
<admin-section>OCA\AppOrder\Settings\Section</admin-section>
<personal>OCA\AppOrder\Settings\PersonalSettings</personal>
<personal-section>OCA\AppOrder\Settings\Section</personal-section>
</settings>
</info>

+ 34
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/appinfo/routes.php View File

@ -0,0 +1,34 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
return [
'routes' => [
['name' => 'app#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'settings#getOrder', 'url' => '/getOrder', 'verb' => 'GET'],
['name' => 'settings#savePersonal', 'url' => '/savePersonal', 'verb' => 'POST'],
['name' => 'settings#saveDefaultOrder', 'url' => '/saveDefaultOrder', 'verb' => 'POST'],
['name' => 'settings#savePersonalHidden', 'url' => '/savePersonalHidden', 'verb' => 'POST'],
['name' => 'settings#saveDefaultHidden', 'url' => '/saveDefaultHidden', 'verb' => 'POST'],
['name' => 'settings#saveDefaultForce', 'url' => '/saveDefaultForce', 'verb' => 'POST'],
]
];

+ 57
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/css/apporder.css View File

@ -0,0 +1,57 @@
#appsorter {
margin-top: 10px;
width: 100%;
max-width: 320px;
}
#appsorter li {
margin-bottom: 2px;
display: flex;
}
#appsorter img {
width: 20px;
height: 20px;
margin: 1px;
margin-right: 10px;
-webkit-filter: invert(1);
filter: invert(1);
filter: progid:DXImageTransform.Microsoft.BasicImage(invert='1');
opacity: .7;
}
.dark #appsorter img {
-webkit-filter: invert(0);
filter: invert(0);
}
#appsorter .placeholder {
border: 1px dashed #aaaaaa;
visibility: visible;
width: 100%;
height: 20px;
margin-bottom: 2px;
border-radius: 3px;
}
#appsorter li input {
margin: 0;
padding: 0;
width: 14px;
height: 14px;
margin-top: -5px;
margin-right: 10px;
}
#appsorter li p {
padding: 1px;
}
#appsorterforce {
margin-bottom: 2px;
display: flex;
}
#appsorterforce input {
margin: -5px 5px 0px 5px;
padding: 0;
width: 14px;
height: 14px;
}

+ 125
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/js/apporder.js View File

@ -0,0 +1,125 @@
$(function () {
var app_menu = $('#appmenu');
if (!app_menu.length)
return;
app_menu.css('opacity', '0');
var mapMenu = function(parent, order, hidden) {
available_apps = {};
parent.find('li').each(function () {
var id = $(this).find('a').attr('href');
if(hidden.indexOf(id) > -1){
$(this).remove();
}
available_apps[id] = $(this);
});
//Remove hidden from order array
order = order.filter(function(e){
return !(hidden.indexOf(e) > -1);
})
$.each(order, function (order, value) {
parent.prepend(available_apps[value]);
});
};
// restore existing order
$.get(OC.generateUrl('/apps/apporder/getOrder'),function(data){
var order_json = data.order;
var hidden_json = data.hidden;
var order = [];
var hidden = [];
try {
order = JSON.parse(order_json).reverse();
} catch (e) {
order = [];
}
try {
hidden = JSON.parse(hidden_json);
} catch (e) {
hidden = [];
}
if (order.length === 0) {
app_menu.css('opacity', '1');
return;
}
mapMenu($('#appmenu'), order, hidden);
mapMenu($('#apps').find('ul'), order, hidden);
$(window).trigger('resize');
app_menu.css('opacity', '1');
});
// Sorting inside settings
$("#appsorter").sortable({
forcePlaceholderSize: true,
placeholder: 'placeholder',
stop: function (event, ui) {
var items = [];
var url;
var type = $('#appsorter').data('type');
if(type === 'admin') {
url = OC.generateUrl('/apps/apporder/saveDefaultOrder');
} else {
url = OC.generateUrl('/apps/apporder/savePersonal');
}
$("#appsorter").children().each(function (i, el) {
var item = $(el).find('p').data("url");
items.push(item)
});
var json = JSON.stringify(items);
$.post(url, {
order: json
}, function (data) {
$(event.srcElement).effect("highlight", {}, 1000);
});
}
});
$(".apporderhidden").change(function(){
var hiddenList = [];
var url;
var type = $("#appsorter").data("type");
if(type === 'admin') {
url = OC.generateUrl('/apps/apporder/saveDefaultHidden');
} else {
url = OC.generateUrl('/apps/apporder/savePersonalHidden');
}
$(".apporderhidden").each(function(i, el){
if(!el.checked){
hiddenList.push($(el).siblings('p').attr('data-url'))
}
});
var json = JSON.stringify(hiddenList);
$.post(url, {
hidden: json
}, function (data) {
//$(event.srcElement).effect("highlight", {}, 1000);
});
});
$("#forcecheckbox").change(function(){
var hiddenList = [];
var url;
var type = $("#forcecheckbox").data("type");
if(type === 'admin') {
url = OC.generateUrl('/apps/apporder/saveDefaultForce');
var checked = $("#forcecheckbox").get(0).checked;
var json = JSON.stringify(checked);
$.post(url, {
force: json
}, function (data) {
// Not really anything to do here ...
});
}
});
});

+ 8
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/ar.js View File

@ -0,0 +1,8 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "ترتيب التطبيقات",
"App Order" : "ترتيب التطبيقات",
"Drag the app icons to change their order." : "قم بسحب أيقونة التطبيق لتغيير ترتيبتها."
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");

+ 6
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/ar.json View File

@ -0,0 +1,6 @@
{ "translations": {
"AppOrder" : "ترتيب التطبيقات",
"App Order" : "ترتيب التطبيقات",
"Drag the app icons to change their order." : "قم بسحب أيقونة التطبيق لتغيير ترتيبتها."
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
}

+ 6
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/ast.json View File

@ -0,0 +1,6 @@
{ "translations": {
"AppOrder" : "AppOrder",
"App Order" : "Orde d'aplicaciones",
"Drag the app icons to change their order." : "Arrastra los iconos de l'aplicación pa camudar el so orde."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 9
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/bg.js View File

@ -0,0 +1,9 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "Подредба на приложения",
"Sort apps in the menu with drag and drop" : "Променя реда на приложенията",
"App Order" : "Подредба на приложенията",
"Drag the app icons to change their order." : "Влачете иконите на приложенията, за да промените подредбата им"
},
"nplurals=2; plural=(n != 1);");

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/cs.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Pořadí aplikací",
"AppOrder" : "Pořadí aplikací",
"Sort apps in the menu with drag and drop" : "Měňte pořadí aplikací v nabídce pomocí „táhni a pusť“",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Umožňuje seřazení ikon aplikací prostřednictvím osobních nastavení. Pořadí bude uloženo\npro každého uživatele zvlášť. Správci mohou určit výchozí pořadí ikon.\n\n## Nastavení výchozího pořadí ikon pro nové uživatele\n\nJděte do Nastavení > Správa > Další nastavení a v sekci Pořadí aplikací popřetahujte ikony do vámi zvoleného pořadí.\n\n## Použití první aplikace jako výchozí\n\nUživatele můžete snadno přesměrovat na první aplikaci v jejich pořadí tím, že změníte následující parametr v souboru config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUživatelé nyní budou automaticky přesměrováni na první aplikaci výchozího popř. jimi nastaveného pořadí.",
"App Order" : "Pořadí aplikací",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Nastavit výchozí pořadí pro všechny uživatele. Toto bude ignorováno, pokud si uživatel nastavil své vlastní pořadí a výchozí pořadí není vynucováno.",
"Drag the app icons to change their order." : "Pořadí aplikací změníte přetažením jejich ikon.",
"Force the default order for all users:" : "Vynutit výchozí pořadí pro všechny uživatele:",
"If enabled, users will not be able to set a custom order." : "Pokud je zapnuto, uživatelé si nebudou moci upravovat pořadí."
},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"
}

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/da.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Apporden",
"AppOrder" : "AppOrder",
"Sort apps in the menu with drag and drop" : "Sorter apps i menuen med træk og slip",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Aktiver sortering af app ikoner i personlige indstillinger. Rækkefølgen bliver gemt individuelt for hver bruger. Administratorer kan definere en anden standard rækkefølge.\n\n## Indstil en standard rækkefølge for alle nye brugere\n\nGå til Administrator indstillinger > yderligere indstillinger og træk ikonerne til App rækkefølge.\n\n## Benyt første app som standard app\n\nDu kan let lade Nextcloud guide din bruger til den første app in deres\npersonlige rækkefølge ved at ændre den følgende parameter i din config/config.php:\n\n 'defaultapp' => 'apporder',\n\nBrugere bliver nu dirigeret til den første app i standard rækkefølgen eller den første app i brugerens rækkefølge.",
"App Order" : "Apporden",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Angiv forvalgt rækkefølge for alle brugere. Dette ignoreres, hvis brugeren selv angiver egen rækkefølge, og den forvalgte rækkefølge er ikke påtvunget. ",
"Drag the app icons to change their order." : "Flyt appikonerne for at ændre ordenen.",
"Force the default order for all users:" : "Gennemtving den forvalgte rækkefølge for alle brugere:",
"If enabled, users will not be able to set a custom order." : "Hvis slået til, så kan brugere ikke angive egne rækkefølger. "
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/de.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "App-Reihenfolge",
"AppOrder" : "App-Reihenfolge",
"Sort apps in the menu with drag and drop" : "Apps im Menü per Drag und Drop sortieren",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Ermöglicht es, die Reihenfolge der App-Icons in den persönlichen Einstellungen anzupassen. Die Reihenfolge wird für jeden \nBenutzer getrennt gespeichert. Administratoren können eine Standard-Sortierung vorgeben.\n\n##Standard-Sortierung für neue Benutzer einstellen\n\nUnter Administratoren-Einstellungen > Zusätzliche Einstellungen die Icons in die gewünschte Reihenfolge ziehen.\n\nErste App als Standard-App setzen\nUm die Benutzer einfach zur ersten App in ihrer\npersönlichen Reihenfolge umzuleiten, einfach in der config/config.php folgenden Parameter setzen:\n\n 'defaultapp' => 'apporder',\n\nBenutzer werden nun zur ersten App der Standard-Reihenfolge oder ihrer\npersönlichen Reihenfolge umgeleitet.",
"App Order" : "App-Reihenfolge",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Standardreihenfolge für alle Benutzer einstellen. Diese Einstellung wird ignoriert, sofern der Benutzer eine eigene Reihenfolge eingestellt hat und die Standardreihenfolge nicht erzwungen wird.",
"Drag the app icons to change their order." : "Verschiebe die App-Symbole, um ihre Reihenfolge zu verändern.",
"Force the default order for all users:" : "Standardreihenfolge für alle Benutzer erzwingen:",
"If enabled, users will not be able to set a custom order." : "Wenn aktiviert, können Benutzer keine eigene Reihenfolge einstellen."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/el.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "Σειρά εφαρμογών",
"AppOrder" : "Αίτηση Εφαρμογής",
"Sort apps in the menu with drag and drop" : "Ταξινόμηση εφαρμογών στο μενού με μεταφορά και απόθεση",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Ενεργοποιήστε την ταξινόμηση των εικονιδίων των εφαρμογών από τις προσωπικές ρυθμίσεις. θα αποθηκευτεί για κάθε\nχρήστη ξεχωριστά. Οι διαχειριστές μπορούν να καθορίσουν μια προσαρμοσμένη προεπιλεγμένη σειρά.\n\n## Καθορίστε προεπιλογή για όλους τους νέους χρήστες\nΣτις ρυθμίσεις διαχειριστή > επιπλέον ρυθμίσεις και σέρετε και αποθέστε τα εικονίδια εφαρμογών.\n\n## Χρήση της πρώτης εφαρμογής ως προεπιλογή\n\nΠρορείτε εύκολα να επιτρέψετε στο Nextcloud να ανακατευθύνει τους χρήστες στην πρώτη εφαρμογή από τις\nπροσωπικές ρυθμίσεις αλλάζοντας την παράμετρο στο αρχείο config/config.php:\n\n 'defaultapp' => 'apporder',\n\nΟι χρήστες θα ανακατευθυνθούν στην πρώτη εφαρμογή απο την προεπιλογή ή στην πρώτη εφαρμογή του χρήστη.",
"App Order" : "Σειρά εφαρμογών",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Ορίστε μια προεπιλεγμένη σειρά για όλους τους χρήστες. Αυτό θα αγνοηθεί εάν ο χρήστης έχει ρυθμίσει μια προσαρμοσμένη σειρά και η προεπιλεγμένη δεν θα εφαρμοστεί.",
"Drag the app icons to change their order." : " Σύρετε τα εικονίδια των εφαρμογών για να αλλάξετε τη σειρά τους.",
"Force the default order for all users:" : "Επιβολή προεπιλογής σε όλους τους χρήστες:",
"If enabled, users will not be able to set a custom order." : "Αν ενεργοποιηθεί, οι χρήστες δεν θα μπορούν να ορίσουν μια προσαρμοσμένη σειρά."
},
"nplurals=2; plural=(n != 1);");

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/el.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Σειρά εφαρμογών",
"AppOrder" : "Αίτηση Εφαρμογής",
"Sort apps in the menu with drag and drop" : "Ταξινόμηση εφαρμογών στο μενού με μεταφορά και απόθεση",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Ενεργοποιήστε την ταξινόμηση των εικονιδίων των εφαρμογών από τις προσωπικές ρυθμίσεις. θα αποθηκευτεί για κάθε\nχρήστη ξεχωριστά. Οι διαχειριστές μπορούν να καθορίσουν μια προσαρμοσμένη προεπιλεγμένη σειρά.\n\n## Καθορίστε προεπιλογή για όλους τους νέους χρήστες\nΣτις ρυθμίσεις διαχειριστή > επιπλέον ρυθμίσεις και σέρετε και αποθέστε τα εικονίδια εφαρμογών.\n\n## Χρήση της πρώτης εφαρμογής ως προεπιλογή\n\nΠρορείτε εύκολα να επιτρέψετε στο Nextcloud να ανακατευθύνει τους χρήστες στην πρώτη εφαρμογή από τις\nπροσωπικές ρυθμίσεις αλλάζοντας την παράμετρο στο αρχείο config/config.php:\n\n 'defaultapp' => 'apporder',\n\nΟι χρήστες θα ανακατευθυνθούν στην πρώτη εφαρμογή απο την προεπιλογή ή στην πρώτη εφαρμογή του χρήστη.",
"App Order" : "Σειρά εφαρμογών",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Ορίστε μια προεπιλεγμένη σειρά για όλους τους χρήστες. Αυτό θα αγνοηθεί εάν ο χρήστης έχει ρυθμίσει μια προσαρμοσμένη σειρά και η προεπιλεγμένη δεν θα εφαρμοστεί.",
"Drag the app icons to change their order." : " Σύρετε τα εικονίδια των εφαρμογών για να αλλάξετε τη σειρά τους.",
"Force the default order for all users:" : "Επιβολή προεπιλογής σε όλους τους χρήστες:",
"If enabled, users will not be able to set a custom order." : "Αν ενεργοποιηθεί, οι χρήστες δεν θα μπορούν να ορίσουν μια προσαρμοσμένη σειρά."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/en_GB.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "App order",
"AppOrder" : "AppOrder",
"Sort apps in the menu with drag and drop" : "Sort apps in the menu with drag and drop",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order.",
"App Order" : "App Order",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced.",
"Drag the app icons to change their order." : "Drag the app icons to change their order.",
"Force the default order for all users:" : "Force the default order for all users:",
"If enabled, users will not be able to set a custom order." : "If enabled, users will not be able to set a custom order."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 11
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/eo.js View File

@ -0,0 +1,11 @@
OC.L10N.register(
"apporder",
{
"App order" : "Aplikaĵa ordo",
"AppOrder" : "Aplikaĵa ordo",
"Sort apps in the menu with drag and drop" : "Ordigi menuajn aplikaĵojn per ŝovo kaj demeto",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Ebligas ordigi la aplikaĵajn piktogramojn el la personaj agordoj. Sian propran ordon havas ĉiu uzanto.\nAdministranto povas difini propran defaŭltan ordon.\n\n## Agordi defaŭltan ordon por ĉiuj novaj uzantoj\n\nIru al la administranto-agordoj > Plia agordo, kaj ŝovu la piktogramojn trovantajn en „Ordo de la aplikaĵoj“.\n\n## Uzi la unuan aplikaĵon kiel defaŭltan aplikaĵon\n\nVi povas agordi vian Nextcloud, por ke ĝi alidirektu la uzanton al la unua aplikaĵo de la ordo: ŝanĝu la jenan agordon en la dosiero „config/config.php“:\n\n 'defaultapp' => 'apporder',\n\nUzantoj alidirektiĝos al la unua elektita aplikaĵo de la defaŭlta ordo aŭ al la unua aplikaĵo de sia propra ordo.",
"App Order" : "Ordo de la aplikaĵoj",
"Drag the app icons to change their order." : "Ŝovi la aplikaĵajn piktogramojn por ŝanĝi ilian ordon."
},
"nplurals=2; plural=(n != 1);");

+ 9
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/eo.json View File

@ -0,0 +1,9 @@
{ "translations": {
"App order" : "Aplikaĵa ordo",
"AppOrder" : "Aplikaĵa ordo",
"Sort apps in the menu with drag and drop" : "Ordigi menuajn aplikaĵojn per ŝovo kaj demeto",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Ebligas ordigi la aplikaĵajn piktogramojn el la personaj agordoj. Sian propran ordon havas ĉiu uzanto.\nAdministranto povas difini propran defaŭltan ordon.\n\n## Agordi defaŭltan ordon por ĉiuj novaj uzantoj\n\nIru al la administranto-agordoj > Plia agordo, kaj ŝovu la piktogramojn trovantajn en „Ordo de la aplikaĵoj“.\n\n## Uzi la unuan aplikaĵon kiel defaŭltan aplikaĵon\n\nVi povas agordi vian Nextcloud, por ke ĝi alidirektu la uzanton al la unua aplikaĵo de la ordo: ŝanĝu la jenan agordon en la dosiero „config/config.php“:\n\n 'defaultapp' => 'apporder',\n\nUzantoj alidirektiĝos al la unua elektita aplikaĵo de la defaŭlta ordo aŭ al la unua aplikaĵo de sia propra ordo.",
"App Order" : "Ordo de la aplikaĵoj",
"Drag the app icons to change their order." : "Ŝovi la aplikaĵajn piktogramojn por ŝanĝi ilian ordon."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "Orden de apps",
"AppOrder" : "AppOrder",
"Sort apps in the menu with drag and drop" : "Ordenar apps en el menú mediante arrastrar y soltar",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Permite ordenar los iconos de las apps desde la configuración personal. El orden se salvará individualmente para\ncada usuario. Los administradores puede definir un orden por defecto personalizado.\n\n## Configurar un orden por defecto para todos los usuarios nuevos\n\nConfiguración > Configuración adicional y arrastrar los iconos debajo de App Order.\n\n## Usar la primera app como app por defecto\n\nPuedes dejar que Nextcloud redireccione tu usuario a la primera app en el\norden personal con mucha facilidad. Hay que cambiar el siguiente parámetro en tu config/config.php:\n\n'defaultapp' => 'apporder',\n\nLos usuarios serán redirigidos a partir de ahora la primera app del orden por defecto o a la\nprimera app del orden del usuario.",
"App Order" : "Orden de apps",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Establecer un orden predeterminado para todos los usuarios. Esto se ignorará si el usuario ha configurado un orden personalizado o si el orden predeterminado no está forzado.",
"Drag the app icons to change their order." : "Arrastra los iconos de las aplicaciones para cambiar el orden.",
"Force the default order for all users:" : "Forzar orden para todos los usuarios:",
"If enabled, users will not be able to set a custom order." : "Si se activa, los usuarios no podrán personalizar el orden de las apps."
},
"nplurals=2; plural=(n != 1);");

+ 8
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_419.js View File

@ -0,0 +1,8 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},
"nplurals=2; plural=(n != 1);");

+ 6
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_419.json View File

@ -0,0 +1,6 @@
{ "translations": {
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 8
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_CL.js View File

@ -0,0 +1,8 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},
"nplurals=2; plural=(n != 1);");

+ 6
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_CO.json View File

@ -0,0 +1,6 @@
{ "translations": {
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 6
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_DO.json View File

@ -0,0 +1,6 @@
{ "translations": {
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 8
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_EC.js View File

@ -0,0 +1,8 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},
"nplurals=2; plural=(n != 1);");

+ 6
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_EC.json View File

@ -0,0 +1,6 @@
{ "translations": {
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 8
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_HN.js View File

@ -0,0 +1,8 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},
"nplurals=2; plural=(n != 1);");

+ 10
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_MX.js View File

@ -0,0 +1,10 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "Orden de la aplicación",
"Sort apps in the menu with drag and drop" : "Ordena las aplicaciones en el menú arrastrándolas",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Habilita el ordenamiento de los íconos de aplicaciones desde las configuraciones personales. El orden se guardará para cada \nusuario individualmente. Los adminsitradores pueden definir un orden predeterminado. \n\n### Establece el orden predeterminado para todos los usuarios\n\nVe a las configuraciones de Admin > Configuraciones adicionales y arrastra los íconos en orden de App.\n\n## Usa la primera aplicación como la aplicación predeterminada\n\nPuedes permitirle fácilmente a Nexcloud redirigir a tu usuario a la primera aplicación en su ordenamiento personal cambiando el siguiente parámetro en tu archivo config/config.php:\n\n'defaultapp' => 'apporder',\n\nLos usuarios ahora serán redirigidos a la primera aplicación del ordenamiento predeterminado o a la primera aplicación del ordenamiento de ese usuario. ",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},
"nplurals=2; plural=(n != 1);");

+ 0
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_NI.js View File


+ 6
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_NI.json View File

@ -0,0 +1,6 @@
{ "translations": {
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 8
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_PA.js View File

@ -0,0 +1,8 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},
"nplurals=2; plural=(n != 1);");

+ 8
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_PE.js View File

@ -0,0 +1,8 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},
"nplurals=2; plural=(n != 1);");

+ 8
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_PY.js View File

@ -0,0 +1,8 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},
"nplurals=2; plural=(n != 1);");

+ 8
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_SV.js View File

@ -0,0 +1,8 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},
"nplurals=2; plural=(n != 1);");

+ 6
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_SV.json View File

@ -0,0 +1,6 @@
{ "translations": {
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 8
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/es_UY.js View File

@ -0,0 +1,8 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "Orden de la aplicación",
"App Order" : "Orden de la aplicación",
"Drag the app icons to change their order." : "Arrastra los íconos de la aplicación para cambiar su orden."
},
"nplurals=2; plural=(n != 1);");

+ 8
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/et_EE.js View File

@ -0,0 +1,8 @@
OC.L10N.register(
"apporder",
{
"AppOrder" : "AppOrder",
"App Order" : "Rakenduste järjestus",
"Drag the app icons to change their order." : "Rakenduste järjestuse muutmiseks lohista need sobivasse kohta."
},
"nplurals=2; plural=(n != 1);");

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/eu.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "Aplikazioen ordena",
"AppOrder" : "App-en ordena",
"Sort apps in the menu with drag and drop" : "Ordenatu menuko aplikazioak arrastatu eta jareginez",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Gaitu aplikazioen ikonoen ordena norbere ezarpenetatik aldatzea. Erabiltzaile bakoitzak\nbere ordena eduki dezake. Kudeatzaileek lehenetsitako ordena definitu dezakete.\n\n## Ezarri lehenetsitako ordena erabiltzaile berri guztientzat\n\nJoan Kudeatzaile ezarpenetara > Ezarpen gehigarrietara eta arrastatu App-en ordenaren azpiko ikonoak.\n\n## Erabili lehen aplikazioa lehenetsitakoa bezala\n\nNextcloudek erabiltzaile bakoitza bere ordena pertsonaleko lehen aplikaziorantz\nberbideratu dezake modu errazean, ezarpenetan honako parametroa aldatuz config/config.php:\n\n 'defaultapp' => 'apporder',\n\nErabiltzaileak berbideratuak izango dira ordena lehenetsiko lehen aplikaziora edo\nerabiltzailearen ordenaren lehen aplikaziora.",
"App Order" : "App-en ordena",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Ezarri lehenetsitako orden bat erabiltzaile guztientzat. Hau ezikusi egingo da erabiltzaileak orden pertsonalizatu bat konfiguratuta badu, eta orden lehenetsia ez badago behartuta.",
"Drag the app icons to change their order." : "Arrastatu app-en ikonoak ordena aldatzeko.",
"Force the default order for all users:" : "Behartu lehenetsitako ordena erabiltzaile guztientzat:",
"If enabled, users will not be able to set a custom order." : "Gaituta badago, erabiltzaileek ezingo dute orden pertsonalizatu bat ezarri."
},
"nplurals=2; plural=(n != 1);");

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/eu.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Aplikazioen ordena",
"AppOrder" : "App-en ordena",
"Sort apps in the menu with drag and drop" : "Ordenatu menuko aplikazioak arrastatu eta jareginez",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Gaitu aplikazioen ikonoen ordena norbere ezarpenetatik aldatzea. Erabiltzaile bakoitzak\nbere ordena eduki dezake. Kudeatzaileek lehenetsitako ordena definitu dezakete.\n\n## Ezarri lehenetsitako ordena erabiltzaile berri guztientzat\n\nJoan Kudeatzaile ezarpenetara > Ezarpen gehigarrietara eta arrastatu App-en ordenaren azpiko ikonoak.\n\n## Erabili lehen aplikazioa lehenetsitakoa bezala\n\nNextcloudek erabiltzaile bakoitza bere ordena pertsonaleko lehen aplikaziorantz\nberbideratu dezake modu errazean, ezarpenetan honako parametroa aldatuz config/config.php:\n\n 'defaultapp' => 'apporder',\n\nErabiltzaileak berbideratuak izango dira ordena lehenetsiko lehen aplikaziora edo\nerabiltzailearen ordenaren lehen aplikaziora.",
"App Order" : "App-en ordena",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Ezarri lehenetsitako orden bat erabiltzaile guztientzat. Hau ezikusi egingo da erabiltzaileak orden pertsonalizatu bat konfiguratuta badu, eta orden lehenetsia ez badago behartuta.",
"Drag the app icons to change their order." : "Arrastatu app-en ikonoak ordena aldatzeko.",
"Force the default order for all users:" : "Behartu lehenetsitako ordena erabiltzaile guztientzat:",
"If enabled, users will not be able to set a custom order." : "Gaituta badago, erabiltzaileek ezingo dute orden pertsonalizatu bat ezarri."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/fa.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "سفارش برنامه",
"AppOrder" : "سفارش برنامه",
"Sort apps in the menu with drag and drop" : "مرتب کردن برنامه ها در فهرست با کشیدن و رها کردن",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "مرتب کردن نمادهای برنامه از تنظیمات شخصی را فعال کنید. سفارش برای هر کاربر به صورت جداگانه ذخیره می شود. سرپرستان می توانند یک سفارش پیش فرض سفارشی را تعریف کنند. # # # یک سفارش پیش فرض برای همه کاربران جدید تنظیم کنید. \"برو به تنظیمات مدیر> تنظیمات اضافی و نمادها را به ترتیب برنامه بکشید.\" ## از اولین برنامه به عنوان برنامه پیش فرض استفاده کنید. به راحتی می توانید با تغییر پارامتر زیر در پیکربندی / config.php خود ، Nextcloud را به کاربر خود به اولین برنامه به ترتیب شخصی خود هدایت کنید: 'defaultapp' => 'apporder' ، - اکنون کاربران استفاده می شوند. برنامه اول سفارش پیش فرض یا برنامه اول سفارش کاربر.",
"App Order" : "سفارش برنامه",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "یک سفارش پیش فرض برای همه کاربران تنظیم کنید. اگر کاربر سفارش سفارشی تنظیم کرده باشد ، و سفارش پیش فرض اجباری نیست ، این مورد نادیده گرفته می شود.",
"Drag the app icons to change their order." : "نمادهای برنامه را بکشید تا ترتیب آنها تغییر کند.",
"Force the default order for all users:" : "سفارش پیش فرض را برای همه کاربران مجبور کنید:",
"If enabled, users will not be able to set a custom order." : "در صورت فعال بودن ، کاربران قادر به تنظیم سفارش سفارشی نخواهند بود."
},
"nplurals=2; plural=(n > 1);");

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/fi.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "Sovellusjärjestys",
"AppOrder" : "Sovellusjärjestys",
"Sort apps in the menu with drag and drop" : "Järjestä sovellukset valikkoon vetämällä ja pudottamalla",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Ota käyttöön toiminto sovelluskuvakkeiden uudelleenjärjestämiseen. Järjestelmänvalvoja voi määrittää oletusjärjestyksen, \nmutta käyttäjät voivat vaihtaa sen itselleen halutessaan\n\n## Määritä oletusjärjestys kaikille uusille käyttäjille\n\nAvaa Asetukset > Ylläpito > Sovellusjärjestys ja vedä sovellukset haluamaasi järjestykseen.\n\n## Käytä ensimmäistä sovellusta oletussovelluksena\n\nAseta Nextcloud ohjaamaan käyttäjä ensimmäiseen sovellukseen henkilökohtaisessa sovellusjärjestyksessä\nvaihtamalla seuraava parametri tiedostossa config/config.php:\n\n 'defaultapp' => 'apporder',\n\nKäyttäjät ohjataan nyt sovellusten oletusjärjestyksen ensimmäisen sovelluksen sijasta käyttäjän määrittämän sovellusjärjestyksen\nensimmäiseen sovellukseen.",
"App Order" : "Sovellusjärjestys",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Määritä sovellusten oletusjärjestys kaikille käyttäjille. Käyttäjät voivat halutessaan määrittää sovellukset itselleen eri järjestykseen.",
"Drag the app icons to change their order." : "Vedä sovellusten kuvakkeita vaihtaaksesi niiden järjestystä.",
"Force the default order for all users:" : "Pakota oletusjärjestys kaikille käyttäjille:",
"If enabled, users will not be able to set a custom order." : "Jos käytössä, käyttäjät eivät voi asettaa omavalintaista järjestystä."
},
"nplurals=2; plural=(n != 1);");

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/fi.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Sovellusjärjestys",
"AppOrder" : "Sovellusjärjestys",
"Sort apps in the menu with drag and drop" : "Järjestä sovellukset valikkoon vetämällä ja pudottamalla",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Ota käyttöön toiminto sovelluskuvakkeiden uudelleenjärjestämiseen. Järjestelmänvalvoja voi määrittää oletusjärjestyksen, \nmutta käyttäjät voivat vaihtaa sen itselleen halutessaan\n\n## Määritä oletusjärjestys kaikille uusille käyttäjille\n\nAvaa Asetukset > Ylläpito > Sovellusjärjestys ja vedä sovellukset haluamaasi järjestykseen.\n\n## Käytä ensimmäistä sovellusta oletussovelluksena\n\nAseta Nextcloud ohjaamaan käyttäjä ensimmäiseen sovellukseen henkilökohtaisessa sovellusjärjestyksessä\nvaihtamalla seuraava parametri tiedostossa config/config.php:\n\n 'defaultapp' => 'apporder',\n\nKäyttäjät ohjataan nyt sovellusten oletusjärjestyksen ensimmäisen sovelluksen sijasta käyttäjän määrittämän sovellusjärjestyksen\nensimmäiseen sovellukseen.",
"App Order" : "Sovellusjärjestys",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Määritä sovellusten oletusjärjestys kaikille käyttäjille. Käyttäjät voivat halutessaan määrittää sovellukset itselleen eri järjestykseen.",
"Drag the app icons to change their order." : "Vedä sovellusten kuvakkeita vaihtaaksesi niiden järjestystä.",
"Force the default order for all users:" : "Pakota oletusjärjestys kaikille käyttäjille:",
"If enabled, users will not be able to set a custom order." : "Jos käytössä, käyttäjät eivät voi asettaa omavalintaista järjestystä."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/fr.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "Ordre des applications",
"AppOrder" : "Ordre des apps",
"Sort apps in the menu with drag and drop" : "Triez les applications dans le menu en les faisant glisser",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Autoriser à trier les icônes des applications dans les paramètres personnels. L'ordre sera sauvegardé pour chaque utilisateur individuellement. Les administrateurs peuvent définir un ordre par défaut.\n\n## Mettre en place un ordre par défaut pour tous les nouveaux utilisateurs\n\nAllez dans Paramètres d'administration > Paramètres supplémentaires et glisser les icônes dans l'ordre voulu.\n\n## Utiliser la première application comme application par défaut\n\nVous pouvez facilement laisser Nextcloud rediriger votre utilisateur vers la première application de leur ordre personnel en changeant le paramètre suivant dans le fichier config/config.php:\n\n 'defaultapp' => 'apporder',\n\nL'utilisateur sera désormais redirigé vers sa première application de l'ordre par défaut ou la première application de son ordre.",
"App Order" : "Ordre des applications",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Définir un ordre par défaut pour tous les utilisateurs. Il sera ignoré si l'utilisateur a défini un ordre personnalisé, et que l'ordre par défaut n'est pas forcé.",
"Drag the app icons to change their order." : "Faites glisser les icônes des applications pour changer leur ordre.",
"Force the default order for all users:" : "Forcer l'ordre par défaut pour tous les utilisateurs :",
"If enabled, users will not be able to set a custom order." : "Si activé, les utilisateurs ne pourront plus sélectionner un ordre personnalisé."
},
"nplurals=2; plural=(n > 1);");

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/gl.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Orde das aplicacións",
"AppOrder" : "AppOrder",
"Sort apps in the menu with drag and drop" : "Ordenar aplicacións no menú arrastrando e soltando",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Activa a ordenación das iconas das aplicacións dende os axustes persoais. A orde\ngardaráse individualmente para cada usuario. Os administradores poden definir\nunha orde personalizada predeterminada\n\n## Estabelecer unha orde predeterminada para todos os usuarios novos\n\nIr aos axustes de administración > Axustes adicionais e arrastrar as iconas na\norde desexada.\n\n## Usar a primeira aplicación como aplicación predeterminada\n\nPode deixar que Nextcloud redireccione o seu usuario á primeira aplicación na orde\npersoal con moita facilidade, só ten que cambiar o seguinte parámetro no ficheiro\nconfig/config.php:\n\n 'defaultapp' => 'apporder',\n\nA partir de agora, os usuarios serán redirixidos cara á primeira aplicación na\norde predeterminada ou cara á primeira aplicación na orde do usuario.",
"App Order" : "Orde das aplicacións",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Estabelece unha orde predeterminado para todos os usuarios. Isto ignorarase se o usuario tiver estabelecida unha orden personalizada e a orde predeterminada non estiver forzada.",
"Drag the app icons to change their order." : "Arrastre as iconas das aplicacións para cambiar a orde.",
"Force the default order for all users:" : "Forzar a orde predeterminada para todos os usuarios:",
"If enabled, users will not be able to set a custom order." : "Se está activado, os usuarios non poderán configurar unha orde personalizada."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/he.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "סידור יישומונים",
"AppOrder" : "סידור יישומונים",
"Sort apps in the menu with drag and drop" : "סידור יישומונים בתפריט באמצעות גרירה",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "אפשר מיון של אייקוני האפליקציות מההגדרות האישיות. הסדר תישמר עבור כל משתמש בנפרד. מנהלי המערכת יכולים להגדיר סדר ברירת מחדל מותאם אישית. ## הגדר סדר ברירת מחדל בשביל כל המשתמשים החדשים. \nעבור אל Admin settings>Additional settings, וגרור את הסמלים תחת App order. ## השתמש באפליקציה הראשונה כאפליקציית ברירת מחדל.\nבקלות אתה יכול לאפשר ל- Nextcloud להפנות את המשתמש שלך לאפליקציה הראשונה בסדר האישי שלו על ידי שינוי הפרמטר הבא ב- config / config.php שלך: \ndefault 'defaultapp' => 'apporder', now.\nהמשתמשים יופנו עכשיו אל האפליקציה הראשונה של הסדר ברירת המחדל, או לאפליקציה הראשונה של הסדר של המשתמש.",
"App Order" : "סידור יישומונים",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "הגדרת סדר בררת המחדל לכל המשתמשים. ההגדרה הזאת לא תילקח בחשבון אם המשתמש הגדיר סדר משלו ולא נאכף סדר כבררת מחדל.",
"Drag the app icons to change their order." : "יש לגרור את סמלי היישומונים כדי לשנות את הסדר שלהם.",
"Force the default order for all users:" : "לאלץ את סדר בררת המחדל לכל המשתמשים:",
"If enabled, users will not be able to set a custom order." : "אם האפשרות פעילה, המשתמשים לא יוכלו להחליף את הסדר."
},
"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;");

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/hr.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Redoslijed aplikacija",
"AppOrder" : "Redoslijed aplikacija",
"Sort apps in the menu with drag and drop" : "Sortirajte aplikacije u izborniku povlačenjem i ispuštanjem",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Omogućite sortiranje ikona aplikacija iz osobnih postavki. Redoslijed će biti spremljen za svaku\npojedinačno. Administratori mogu definirati zadani redoslijed.\n\n## Postavite zadani redoslijed za sve nove korisnike\n\nIdite na Postavke administratora> Dodatne postavke i povucite ikone pod redoslijedom aplikacije.\n\n## Koristite prvu aplikaciju kao zadanu aplikaciju\n\nMožete pustiti neka Nextcloud preusmjeri korisnika na prvu aplikaciju njihovog\nosobnog redoslijeda promjenom sljedećeg parametra u vašem config / config.php:\n\n'defaultapp' => 'apporder',\n\nKorisnici će biti preusmjereni na prvu aplikaciju zadanog redoslijeda ili na\nprvu aplikaciju korisnika.",
"App Order" : "Redoslijed aplikacija",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Postavite zadani poredak za sve korisnike. On će biti zanemaren ako je korisnik postavio prilagođeni poredak i zadani poredak nije nametnut.",
"Drag the app icons to change their order." : "Povucite ikone aplikacija za promjenu redoslijeda.",
"Force the default order for all users:" : "Nametnite zadani poredak za sve korisnike:",
"If enabled, users will not be able to set a custom order." : "Ako je omogućeno, korisnici neće moći postaviti prilagođeni poredak."
},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
}

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/hu.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "Alkalmazássorrend",
"AppOrder" : "Alkalmazássorrend",
"Sort apps in the menu with drag and drop" : "Rendezze az alkalmazásait fogd és vidd módszerrel",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Lehetővé teszi az alkalmazásikonok rendezését a személyes beállításokban.\nA sorrend felhasználóként külön lesz mentve.\nAz adminisztrátorok egyéni alapértelmezett sorrendet adhatnak meg.\n\n## Alapértelmezett sorrend megadása az összes felhasználónak\n\nUgorjon az Adminisztrációs beállítások > További beállításokhoz, és húzza az ikonokat az alkalmazássorrend alatt.\n\n## Az első alkalmazás alapértelmezettként használata\n\nKönnyen beállítható, hogy a Nextcloud átirányítsa a felhasználót az\nelső alkalmazásra a saját sorrendjében, a következő paraméter\nbeállításával a config/config.php fájlban:\n\n 'defaultapp' => 'apporder',\n\nA felhasználók most már átirányításra kerülnek az alapértelmezett\nsorrend első alkalmazására, vagy az egyéni sorrendjük első\nalkalmazására.",
"App Order" : "Alkalmazássorrend",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Alapértelmezett sorrend beállítása az összes felhasználónak. Ez figyelmen kívül lesz hagyva, ha a felhasználó egyéni sorrendet állít be, az alapértelmezett sorrend nincs kikényszerítve.",
"Drag the app icons to change their order." : "Húzza az alkalmazásikonokat a sorrendjük megváltoztatásához.",
"Force the default order for all users:" : "Az alapértelmezett sorrend kikényszerítése az összes felhasználónál:",
"If enabled, users will not be able to set a custom order." : "Ha engedélyezett, akkor a felhasználók nem állíthatnak be egyéni sorrendet."
},
"nplurals=2; plural=(n != 1);");

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/hu.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Alkalmazássorrend",
"AppOrder" : "Alkalmazássorrend",
"Sort apps in the menu with drag and drop" : "Rendezze az alkalmazásait fogd és vidd módszerrel",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Lehetővé teszi az alkalmazásikonok rendezését a személyes beállításokban.\nA sorrend felhasználóként külön lesz mentve.\nAz adminisztrátorok egyéni alapértelmezett sorrendet adhatnak meg.\n\n## Alapértelmezett sorrend megadása az összes felhasználónak\n\nUgorjon az Adminisztrációs beállítások > További beállításokhoz, és húzza az ikonokat az alkalmazássorrend alatt.\n\n## Az első alkalmazás alapértelmezettként használata\n\nKönnyen beállítható, hogy a Nextcloud átirányítsa a felhasználót az\nelső alkalmazásra a saját sorrendjében, a következő paraméter\nbeállításával a config/config.php fájlban:\n\n 'defaultapp' => 'apporder',\n\nA felhasználók most már átirányításra kerülnek az alapértelmezett\nsorrend első alkalmazására, vagy az egyéni sorrendjük első\nalkalmazására.",
"App Order" : "Alkalmazássorrend",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Alapértelmezett sorrend beállítása az összes felhasználónak. Ez figyelmen kívül lesz hagyva, ha a felhasználó egyéni sorrendet állít be, az alapértelmezett sorrend nincs kikényszerítve.",
"Drag the app icons to change their order." : "Húzza az alkalmazásikonokat a sorrendjük megváltoztatásához.",
"Force the default order for all users:" : "Az alapértelmezett sorrend kikényszerítése az összes felhasználónál:",
"If enabled, users will not be able to set a custom order." : "Ha engedélyezett, akkor a felhasználók nem állíthatnak be egyéni sorrendet."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/id.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Urutan Aplikasi",
"AppOrder" : "UrutanAplikasi",
"Sort apps in the menu with drag and drop" : "Mengurutkan aplikasi pada menu secara tarik lepas",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Mengaktifkan mengurutkan ikon aplikasi melalui setelan personal. Urutan akan tersimpan pada tiap pengguna.\nAdministrator dapat mendefinisikan pengaturan urutan bawaan.\n\n## Atur setelan bawaan bagi semua pengguna\n\nMelalui setelan **Administrasi** > **Urutan aplikasi**, atur urutan dengan cara tarik lepas ikon pada daftar.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order.",
"App Order" : "Urutan Aplikasi",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Atur setelan umum bagi semua pengguna. Ini akan diabaikan, jika pengguna telah menyetel urutan khusus, maka setelan umum tidak digunakan.",
"Drag the app icons to change their order." : "Tarik ikon aplikasi untuk mengubah urutan.",
"Force the default order for all users:" : "Semua pengguna wajib menggunakan urutan umum.",
"If enabled, users will not be able to set a custom order." : "Jika diaktifkan, pengguna tidak dapat menyetel urutan khusus."
},"pluralForm" :"nplurals=1; plural=0;"
}

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/it.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "Ordine applicazioni",
"AppOrder" : "AppOrder",
"Sort apps in the menu with drag and drop" : "Ordina le applicazioni nel menu con il trascinamento e rilascio",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Consente di ordinare le icone delle applicazioni dalle impostazioni personali. L'ordine sarà salvato per ogni\nsingolo utente. Gli amministratori possono definire un ordine predefinito personalizzato.\n\n## Imposta un ordine predefinito per i nuovi utenti\n\nVai nelle impostazioni di amministrazione > Impostazioni aggiuntive e trascina le icone sotto Ordine applicazione.\n\n## Utilizza la prima applicazione come applicazione predefinita\n\nPuoi semplicemente lasciare che Nextcloud rediriga i tuoi utenti alla prima applicazione nel loro ordine personale modificando il parametro seguente nel file config/config.php:\n\n 'defaultapp' => 'apporder',\n\nGli utenti saranno quindi rediretti alla prima applicazione dell'ordine predefinito o alla prima applicazione dell'ordine dell'utente.",
"App Order" : "Ordine applicazioni",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Imposta un ordine predefinito per tutti gli utenti. Sarà ignorato se l'utente ha configurato un ordine personalizzato e l'ordine predefinito non è forzato.",
"Drag the app icons to change their order." : "Trascina le icone delle applicazioni per cambiare il loro ordine.",
"Force the default order for all users:" : "Forza l'ordine predefinito per tutti gli utenti:",
"If enabled, users will not be able to set a custom order." : "Se abilitata, gli utenti non potranno impostare un ordine personalizzato."
},
"nplurals=2; plural=(n != 1);");

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/it.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Ordine applicazioni",
"AppOrder" : "AppOrder",
"Sort apps in the menu with drag and drop" : "Ordina le applicazioni nel menu con il trascinamento e rilascio",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Consente di ordinare le icone delle applicazioni dalle impostazioni personali. L'ordine sarà salvato per ogni\nsingolo utente. Gli amministratori possono definire un ordine predefinito personalizzato.\n\n## Imposta un ordine predefinito per i nuovi utenti\n\nVai nelle impostazioni di amministrazione > Impostazioni aggiuntive e trascina le icone sotto Ordine applicazione.\n\n## Utilizza la prima applicazione come applicazione predefinita\n\nPuoi semplicemente lasciare che Nextcloud rediriga i tuoi utenti alla prima applicazione nel loro ordine personale modificando il parametro seguente nel file config/config.php:\n\n 'defaultapp' => 'apporder',\n\nGli utenti saranno quindi rediretti alla prima applicazione dell'ordine predefinito o alla prima applicazione dell'ordine dell'utente.",
"App Order" : "Ordine applicazioni",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Imposta un ordine predefinito per tutti gli utenti. Sarà ignorato se l'utente ha configurato un ordine personalizzato e l'ordine predefinito non è forzato.",
"Drag the app icons to change their order." : "Trascina le icone delle applicazioni per cambiare il loro ordine.",
"Force the default order for all users:" : "Forza l'ordine predefinito per tutti gli utenti:",
"If enabled, users will not be able to set a custom order." : "Se abilitata, gli utenti non potranno impostare un ordine personalizzato."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 6
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/ka_GE.json View File

@ -0,0 +1,6 @@
{ "translations": {
"AppOrder" : "AppOrder",
"App Order" : "აპლიკაციების განლაგება",
"Drag the app icons to change their order." : "გადაიტანეთ აპლიკაციის პიქტოგრამები მათი გალაგების შესაცვლელად."
},"pluralForm" :"nplurals=2; plural=(n!=1);"
}

+ 9
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/ko.json View File

@ -0,0 +1,9 @@
{ "translations": {
"App order" : "앱 순서",
"AppOrder" : "앱 순서",
"Sort apps in the menu with drag and drop" : "드래그 앤 드롭으로 메뉴에 있는 앱 정렬",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "개인 설정에서 앱 아이콘을 정렬하는 것을 허용합니다. 개별 사용자별로 정렬 순서를\n저장합니다. 관리자는 기본 사용자 정의 순서를 지정할 수 있습니다.\n\n## 모든 새 사용자의 기본 순서 지정\n\n관리자 설정 > 추가 설정으로 이동하여 앱 순서 메뉴 아래에 있는 아이콘을 드래그하십시오.\n\n## 첫 앱을 기본 앱으로 사용\n\nconfig/config.php 파일의 다음 인자를 수정하여 Nextcloud에서 사용자를\n첫 앱으로 안내할 수 있습니다:\n\n 'defaultapp' => 'apporder',\n\n사용자는 자동으로 기본 순서의 첫 앱이나 사용자 정의 순서의 첫 앱으로\n안내됩니다.",
"App Order" : "앱 순서",
"Drag the app icons to change their order." : "앱 아이콘을 드래그해서 순서를 변경할 수 있습니다."
},"pluralForm" :"nplurals=1; plural=0;"
}

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/lt_LT.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "Programėlių tvarka",
"AppOrder" : "Programėlių išdėstymo tvarka",
"Sort apps in the menu with drag and drop" : "Velkant rikiuoti meniu esančias programėles",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Įjunkite galimybę rūšiuoti programos ikonas asmeniniuose nustatymuose. Kiekvienas naudotojas galės išsisaugoti individualią \nikonų išdėstymo tvarką. Administratorius gali nustatyti numatytąją tvarką.\n\n## Nustatyti numatytąją išdėstymo tvarką visiems naujiems naudotojams\n\nPasirinkite Administratoriaus nustatymai > Papildomi nustatymai ir tempdami išrikiuokite programų tvarką.\n\n## Naudokite pirmąją programą kaip numatytąją \n\nJūs galite lengvai leisti Nextcloud programai nukreipti Jūsų naudotoją į pirmąją programą, pakeisdami sekančius parametrus config/config.php faile:\n \n'defaultapp' => 'apporder',\n\nNaudotojas bus nukreiptas į pirmąją programą, pagal numatytą arba personalinę naudotojo tvarką.",
"App Order" : "Programėlių tvarka",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Nustatyti numatytąją tvarką visiems naudotojams. Jos bus nepaisoma, jei naudotojas yra nusistatęs pasirinktinę tvarką, o numatytoji tvarka nėra priverstinė.",
"Drag the app icons to change their order." : "Norėdami keisti programėlių tvarką, vilkite jų piktogramas.",
"Force the default order for all users:" : "Priverstinai taikyti numatytąją tvarką visiems naudotojams:",
"If enabled, users will not be able to set a custom order." : "Jei įjungta, naudotojai negalės nusistatyti pasirinktinės tvarkos."
},
"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);");

+ 11
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/lv.js View File

@ -0,0 +1,11 @@
OC.L10N.register(
"apporder",
{
"App order" : "Lietotņu izkārtojums",
"AppOrder" : "Lietotņu izkārtojums",
"Sort apps in the menu with drag and drop" : "Sakārto lietotnes lietotņu logā pārvelkot un nometot",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Iespējot lietotņu ikonu sakārtošanu no personīgiem iestatījumiem. Šis izkārtojums tiks saglabāta katram\nlietotājam induviduāli. Administratori var definēt specifisku noklusējuma izkārtojumu.\n\n## Uzstādīt noklusējuma izkārtojumu priekš visiem jauniem lietotājiem\n\nAizej uz Administrēšanas iestatījumiem > Papildus iestatījumi un pārvelc ikonas zem Lietotnes izkārtojums.\n\n## Uzstādīt pirmo lietotni kā noklusējuma lietotni\n\nTu vari vienkārši ļaut Nextcloud novirzīt lietotāju uz pirmo lietotni viņu\npersonīgajā izkārtojumā pārmainot sekojošo parametru savā config/config.php:\n\n 'defaultapp' => 'apporder'\n\nLietotāji nu tiks novirzīti uz pirmo lietotni savā noklusējuma izkārtojumā vai uz\npirmo lietotni lietotāja izkārtojumā.",
"App Order" : "Lietotņu izkārtojums",
"Drag the app icons to change their order." : "Pārvelc lietotņu ikonas, lai mainītu to izkārtojumu."
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/nb.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "App-rekkefølge",
"AppOrder" : "App-rekkefølge",
"Sort apps in the menu with drag and drop" : "Sorter apper i menyen med dra og slipp",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Aktiver sortering av app-ikon fra personlige innstillinger. Rekkefølge blir lagret for hver bruker. Administrator kan tilpasse standard rekkefølge.\n\n## Definer standard rekkefølge for alle nye brukere\n\nÅpne administrator innstillinger > Ekstra innstillinger og dra ikoner i ønsket rekkefølge under \"App-rekkefølge\".\n\n## Bruk første app som standard app\n\nDu kan la Nextcloud redirigere bruker til appen som er først ved å endre følgende innstilling i config/config.php:\n\n 'defaultapp' => 'apporder',\n\nBruker vil bli redirigert til den appen som er først i app-menyen.",
"App Order" : "App-rekkefølge",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Angi en standardrekkefølge for alle brukere. Dette vil bli ignorert hvis brukeren har satt opp en tilpasset ordre, og standardrekkefølgen ikke blir tvunget.",
"Drag the app icons to change their order." : "Dra og slipp app ikonene for å endre rekkefølgen.",
"Force the default order for all users:" : "Tving standardrekkefølgen for alle brukere:",
"If enabled, users will not be able to set a custom order." : "Hvis aktivert, vil ikke brukere kunne angi en tilpasset rekkefølge."
},
"nplurals=2; plural=(n != 1);");

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/nl.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "App Volgorde",
"AppOrder" : "AppVolgorde",
"Sort apps in the menu with drag and drop" : "Sorteert apps in het menu met slepen",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Maakt sorteren van de app pictogrammen mogelijk via de persoonlijke instellingen. De volgorde blijft voor elke afzonderlijke gebruikers bewaard. Beheerders kunnen zelf een standaardvolgorde instellen.\n\n## Instellen standaardvolgorde voor alle nieuwe gebruikers\n\nGa naar Beheer instellingen > Aanvullende instellingen en sleep de pictogrammen onder App volgorde.\n\n## Gebruik eerste app als standaard app\n\nJe kunt Nextcloud je gebruikers makkelijk doorsturen naar de eerste app in hun persoonlijke volgorde dooe de volgende parameter in je config/config.php:\n\n 'defaultapp' => 'apporder',\n\nGebruikers worden nu doorgeleid naar de eerste app van de standaardvolgorde of naar de eerste app in hun eigen volgorde.",
"App Order" : "App Volgorde",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Stel een standaard volgorde in voor alle gebruikers. Dit zal genegeerd worden indien de gebruiker een aangepaste volgorde heeft ingesteld en de standaard volgorde is niet geforceerd.",
"Drag the app icons to change their order." : "Sleep de app iconen om hun volgorde te wijzigen.",
"Force the default order for all users:" : "Forceer de standaard volgorde voor alle gebruikers:",
"If enabled, users will not be able to set a custom order." : "Als dit ingesteld is, kunnen gebruikers niet meer een aangepaste volgorde instellen."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 9
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/nn_NO.json View File

@ -0,0 +1,9 @@
{ "translations": {
"App order" : "App-rekkefølgje",
"AppOrder" : "AppRekkjefølgje",
"Sort apps in the menu with drag and drop" : "Sorter appar i menyen med dra og slepp",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Slå på sortering av app-ikona frå dei personlege innstillingane. Rekkefølgja vil verta lagra\nfor kvar brukar individuelt. Administratorar kan laga ei standard-rekkefølgje.\n\n## Vel ei standard rekkefølgje for nye brukarar\n\nGå til Administrasjon > Fleire innstillingar og dra ikona under App-rekkefølgje.\n\n## Bruk fyrste app som standard-app\n\nDu kan enkelt la Nextcloud styra brukaren til den fyrste appen i deira personlege rekkefølgje ved å endra denne parameteren i config/config.php:\n\n 'defaultapp' => 'apporder',\n\nBrukarane vil no verta styrte til den fyrste appen i standardrekkefølgja eller den\nfyrste appen i brukaren si rekkefølgje.",
"App Order" : "App-rekkjefølgje",
"Drag the app icons to change their order." : "Dra applikasjons ikona for å endre rekkjefølgja"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/pl.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Kolejność aplikacji",
"AppOrder" : "Kolejność aplikacji",
"Sort apps in the menu with drag and drop" : "Ustaw kolejność wyświetlania aplikacji metodą przeciągnij i upuść",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Włącz sortowanie ikon aplikacji w ustawieniach osobistych. Kolejność ikon zostanie zachowana dla każdego\nużytkownika indywidualnie. Administratorzy mogą zdefiniować domyślną kolejność.\n\n## Ustaw domyślną kolejność dla wszystkich nowych użytkowników\n\nPrzejdź do Ustawienia > Administracja > Ustawienia dodatkowe i przeciągnij ikony aplikacji aby zmienić ich kolejność\n\n## Użyj pierwszej aplikacji jako aplikacji domyślnej\n\nMożesz pozwolić Nextcloud na przekierowanie użytkownika do pierwszej aplikacji w\nwybranej przez niego kolejności, zmieniając następujący parametr w config / config.php:\n\n 'defaultapp' => 'apporder',\n\nUżytkownicy zostaną teraz przekierowani do pierwszej aplikacji z kolejności domyślnej lub do pierwszej aplikacji wybranej przez użytkownika.",
"App Order" : "Kolejność aplikacji",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Ustaw domyślną kolejność aplikacji dla wszystkich użytkowników. Opcja będzie zignorowana jeśli użytkownik ustali własną kolejność, chyba że kolejność domyślna jest wymuszona.",
"Drag the app icons to change their order." : "Przeciągnij ikony aplikacji, aby zmienić ich kolejność.",
"Force the default order for all users:" : "Wymuś domyślną kolejność dla wszystkich użytkowników:",
"If enabled, users will not be able to set a custom order." : "Jeśli ta opcja jest włączona, użytkownicy nie będą mogli ustawić własnej kolejności."
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
}

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/pt_BR.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Classificar aplicativos",
"AppOrder" : "AppOrder",
"Sort apps in the menu with drag and drop" : "Classificar os aplicativos no menu com arrastar e soltar",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Ative a classificação dos ícones de aplicativos nas configurações. Isso será salvo para cada\nusuário individualmente. Administradores podem definir uma ordem padrão personalizada.\n\n## Definir uma ordem padrão para todos os novos usuários\n\nVá em Configurações de Administrador > Configurações Adicionais e arraste os ícones em Ordem do aplicativo.\n\n## Use o primeiro aplicativo como aplicativo padrão\n\nVocê pode fazer o Nextcloud redirecionar o usuário para o primeiro aplicativo da sua\nordem pessoal, alterando o seguinte parâmetro no seu config/config.php:\n\n 'defaultapp' => 'apporder',\n\nOs usuários agora serão redirecionados para o primeiro aplicativo padrão ou\npara o primeiro aplicativo na ordem do usuário.",
"App Order" : "Pedido de Aplicativo",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Defina um pedido padrão para todos os usuários. Isso será ignorado se o usuário tiver configurado um pedido personalizado e o pedido padrão não forçado.",
"Drag the app icons to change their order." : "Arraste os ícones dos aplicativos para mudar a ordem.",
"Force the default order for all users:" : "Forçar o pedido padrão para todos os usuários:",
"If enabled, users will not be able to set a custom order." : "Se ativado, os usuários não poderão fazer um pedido personalizado."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}

+ 11
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/pt_PT.js View File

@ -0,0 +1,11 @@
OC.L10N.register(
"apporder",
{
"App order" : "Ordenação da aplicação",
"AppOrder" : "OrdenaçãoAplicação",
"Sort apps in the menu with drag and drop" : "Ordene as aplicações no menu com arrastar e largar",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Ative a ordenação dos ícones de aplicação nas definições pessoais. A ordenação será guardada individualmente\npara cada utilizador. Os administradores podem definir uma ordenação predefinida personalizada.\n\n## Defina uma ordenação predefinida para todos os novos utilizadores\n\nVás às Definições de Administrador > Definições adicionais e arraste os ícones por debaixo da ordenação da Aplicação.\n\n## Use a primeira aplicação como a aplicação predefinida \n\nPode facilmente permitir que o Nextcloud redirecione o seu utilizador para a \nprimeira aplicação na sua ordenação pessoal, alterando o seguinte \nparâmetro no seu\nconfig/config.php:\n\n 'defaultapp' => 'apporder',\n\nOs utilizadores serão agora redirecionados para a primeira aplicação da ordenação predefinida ou para \na primeira aplicação da ordenação do utilizador.",
"App Order" : "Ordenação de Aplicação",
"Drag the app icons to change their order." : "Arraste os ícones da aplicação para alterar a sua ordem."
},
"nplurals=2; plural=(n != 1);");

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/ru.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "Порядок приложений",
"AppOrder" : "Порядок приложений",
"Sort apps in the menu with drag and drop" : "Сортируйте приложения с помощью перетаскивания",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Включите сортировку иконок приложений в личных настройках. Заказ будет сохранен для каждого пользователя отдельно. Администраторы могут определять пользовательский список по умолчанию. ## Установить список по умолчанию для всех новых пользователей. Перейти к Настройки администратора > Дополнительные параметры и перетащить значки в разделе «Список приложений». ## Использовать первое приложение в качестве приложения по умолчанию Вы можете легко позволить Nextcloud перенаправить пользователя на первое приложение в своем личном списке, изменив следующий параметр в вашем config/config.php: 'defaultapp' => 'apporder', Теперь пользователи будут перенаправлены на первое приложение по умолчанию или в первое приложение в пользовательском списке.",
"App Order" : "Порядок приложений",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Задаёт для всех пользователей порядок приложений по умолчанию. Не распространяется на пользователей, которые самостоятельно задали порядок приложений при отключённом параметре «принудительно использовать заданный порядок приложений».",
"Drag the app icons to change their order." : "Перемещайте значки приложений для изменения порядка их следования.",
"Force the default order for all users:" : "Принудительно использовать заданный порядок приложений для всех пользователей:",
"If enabled, users will not be able to set a custom order." : "При включении этого параметра пользователи не смогут задавать свой порядок приложений."
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/sk.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Zoradenie aplikácií",
"AppOrder" : "AppOrder",
"Sort apps in the menu with drag and drop" : "Poradie aplikácií v ponuke je možné meniť potiahnutím",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Umožňuje zoradenie ikon a aplikácií prostredníctvom osobných nastavení. Poradie sa uloží\npre každého používateľa zvlášť. Správcovia môžu určiť predvolené poradie ikon.\n\n## Nastavenie predvoleného poradia ikon pre nových používateľov\n\nChoďte do Nastavenia > Správa > Ďalšie nastavenia a v sekcii Poradie aplikácií popreťahujte ikony do vami zvoleného poradia.\n\n## Použitie prvej aplikácie ako predvolené\n\nPoužívateľa môžete jednoducho presmerovať na prvú aplikáciu v ich poradí tým, že zmeníte nasledujúci parameter v súbore config/config.php:\n\n'defaultapp' => 'apporder',\n\nPoužívatelia teraz budú automaticky presmerovaní na prvú aplikáciu predvoleného resp. im nastaveného poradia.",
"App Order" : "Zoradenie aplikácií",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Nastaviť predvolenú objednávku pre všetkých používateľov. Toto bude ignorované, ak má užívateľ nastavenú vlastnú objednávku a predvolená objednávka nie je vynútená.",
"Drag the app icons to change their order." : "Presuňte ikony aplikácií a zmeňte ich poradie.",
"Force the default order for all users:" : "Vynútiť predvolenú objednávku pre všetkých používateľov:",
"If enabled, users will not be able to set a custom order." : "Ak je povolená, používatelia nebudú môcť nastaviť vlastnú objednávku."
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
}

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/sl.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Razvrščevalnik menija",
"AppOrder" : "Razvrščevalnik AppOrder",
"Sort apps in the menu with drag and drop" : "Enostavno razvrščanje in urejanje prikaza programov v menijski vrstici",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Program omogoča razvrščanje ikon v menijski vrstici, možnosti pa so zbrane med osebnimi nastavitvami. Vrstni red se shrani za vsakega uporabnika posebej,\nskrbniki pa lahko določajo poseben vrstni red.\n\n## Nastavitev privzetega vrstnegar eda za vse uporabnike\n\nMed skrbniškimi nastavitvami > Dodante nastavitve je na voljo seznam, ki ga je mogoče razvrstiti in posamezne predmete onemogočiti.\n\n## Uporabi prvi program kot privzeti\n\nPreusmerjanje uporabnikov na prvi program v razvrstitvi po meri je mogoče določiti s spreminjanjem parametrov v datoteki config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUporabniko bodo preusmerjeni na prvi program v privzeti razvistitvi\noziroma prvi program v uporabniški razvrstitvi.",
"App Order" : "Razvrščevalnik App Order",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Nastavi privzeto razvrstitev za vse uporabnike. Spremembe se pri uporabnikih ne izrazijo, če si menije sami preuredijo po meri oziroma če razvrstitev ni vsiljena.",
"Drag the app icons to change their order." : "S potegom predmeta je mogoče spreminjati vrstni red programov v menijski vrstici.",
"Force the default order for all users:" : "Vsili privzeti vrstni red za vse uporabnike:",
"If enabled, users will not be able to set a custom order." : "Izbrana možnost onemogoča uporabniku prilagajanje razvrstitve po meri."
},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"
}

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/sv.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "Appordning",
"AppOrder" : "AppOrder",
"Sort apps in the menu with drag and drop" : "Sortera appar i menyn genom att dra och släppa",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Aktivera sortering av appikoner från de personliga inställningarna. Ordern sparas för varje\nanvändaren individuellt. Administratörer kan definiera en anpassad standardordning.\n\n## Ange en standardorder för alla nya användare\n\nGå till administratörsinställningarna > ytterligare inställningar och dra ikonerna under apporder.\n\n## Använd första appen som standard app\n\nDu kan enkelt låta Nextcloud omdirigera din användare till den första appen i deras\npersonlig order genom att ändra följande parameter i din config/config.php:\n\n 'defaultapp' => 'apporder',\n\nAnvändare kommer nu att omdirigeras till den första appen i standardordern eller till\nförsta app av användarordern.",
"App Order" : "Appordning",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Välj en standardsortering för alla användare. Om användaren valt en annan sortering kommer standardvalet att ignoreras.",
"Drag the app icons to change their order." : "Dra appikonerna för att ändra deras ordning.",
"Force the default order for all users:" : "Bestäm standardsortering för alla användare:",
"If enabled, users will not be able to set a custom order." : "Om aktiverat, kommer användarna inte att kunna välja egen sortering."
},
"nplurals=2; plural=(n != 1);");

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/tr.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "Uygulama sıralaması",
"AppOrder" : "UygulamaSıralaması",
"Sort apps in the menu with drag and drop" : "Menüdeki uygulamaların sıralamasını sürükleyip bırakarak değiştirir",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Uygulama simgelerinin kişisel tercihe göre sıralanabilmesini sağlar. Sıralama her kullanıcıya \nözel olarak kaydedilir. Yöneticiler özel bir sıralamayı varsayılan olarak atayabilir.\n\n## Tüm yeni kullanıcılar için varsayılan sıralamayı ayarlamak\n\nYönetici ayarları > Ek ayarlar bölümüne giderek Uygulama sıralaması altındaki simgeleri\nsürükleyip bırakın.\n\n## İlk uygulamayı varsayılan uygulama olarak kullanmak\n\nconfig/config.php dosyasında aşağıdaki ayarı yaparak kullanıcıların uygulama listesindeki ilk\nuygulamanın varsayılan olarak açılması sağlanabilir:\n\n 'defaultapp' => 'apporder',\n\nBöylece kullanıcılar için varsayılan sıralamadaki ilk uygulama yerine tercih ettikleri \nsıralamadaki ilk uygulama açılır.",
"App Order" : "Uygulama Sıralaması",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Tüm kullanıcılar için geçerli olacak varsayılan sıralamayı ayarlayın. Kullanıcı özel bir sıralama seçtiyse bu seçenek yok sayılır ve varsayılan sıralama uygulanmaz.",
"Drag the app icons to change their order." : "Simgeleri sürükleyerek uygulamaları sıralayabilirsiniz.",
"Force the default order for all users:" : "Tüm kullanıcılara uygulanacak varsayılan sıralama:",
"If enabled, users will not be able to set a custom order." : "Bu seçenek etkinleştirildiğinde, kullanıcılar özel bir sıralama uygulayamaz."
},
"nplurals=2; plural=(n > 1);");

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/tr.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Uygulama sıralaması",
"AppOrder" : "UygulamaSıralaması",
"Sort apps in the menu with drag and drop" : "Menüdeki uygulamaların sıralamasını sürükleyip bırakarak değiştirir",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Uygulama simgelerinin kişisel tercihe göre sıralanabilmesini sağlar. Sıralama her kullanıcıya \nözel olarak kaydedilir. Yöneticiler özel bir sıralamayı varsayılan olarak atayabilir.\n\n## Tüm yeni kullanıcılar için varsayılan sıralamayı ayarlamak\n\nYönetici ayarları > Ek ayarlar bölümüne giderek Uygulama sıralaması altındaki simgeleri\nsürükleyip bırakın.\n\n## İlk uygulamayı varsayılan uygulama olarak kullanmak\n\nconfig/config.php dosyasında aşağıdaki ayarı yaparak kullanıcıların uygulama listesindeki ilk\nuygulamanın varsayılan olarak açılması sağlanabilir:\n\n 'defaultapp' => 'apporder',\n\nBöylece kullanıcılar için varsayılan sıralamadaki ilk uygulama yerine tercih ettikleri \nsıralamadaki ilk uygulama açılır.",
"App Order" : "Uygulama Sıralaması",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Tüm kullanıcılar için geçerli olacak varsayılan sıralamayı ayarlayın. Kullanıcı özel bir sıralama seçtiyse bu seçenek yok sayılır ve varsayılan sıralama uygulanmaz.",
"Drag the app icons to change their order." : "Simgeleri sürükleyerek uygulamaları sıralayabilirsiniz.",
"Force the default order for all users:" : "Tüm kullanıcılara uygulanacak varsayılan sıralama:",
"If enabled, users will not be able to set a custom order." : "Bu seçenek etkinleştirildiğinde, kullanıcılar özel bir sıralama uygulayamaz."
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/uk.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "Порядок застосунків",
"AppOrder" : "Перелік застосунків",
"Sort apps in the menu with drag and drop" : "Впорядкування застосунків у меню за допомогою перетягування елементів",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Дозволяє сортувати значки застосунків у персональних налаштуваннях. Порядок збурігається окремо для кожного користувача. Адміністратор може налаштувати власний початковий порядок.\n\n## Налаштувати початковий порядок для всіх нових користувачів\n\nПерейдіть у Налаштування адміністратора (Admin settings) > Додаткові налаштування (Additional settings) і перетянгіть значки у бажаному порядку.\n\n## Використовувати перший застосунок як початковий\n\nВи можете дозволити Nextcloud перенаправляти користувачів на перший застосунок у їхніх налаштуваннях за допомогою насткпного параметре у вашому файоі конфігурації config/config.php:\n\n 'defaultapp' => 'apporder',\n\nТепер користувачі будуть перенаправлятися одразу після входу на перший застосунок у їхніх налаштуваннях.",
"App Order" : "Впорядкування застосунків",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Встановіть типовий порядок для усіх користувачів. Це не буде застосовуватися, якщо користувач визначив власний порядок розташування елементів, при цьому типовий порядок не увімкнено.",
"Drag the app icons to change their order." : "Потягніть за іконку застосунку для зміни його позиції в переліку.",
"Force the default order for all users:" : "Застосувати типовий порядок для всіх користувачів:",
"If enabled, users will not be able to set a custom order." : "Якщо увімкнено, користувачі не зможуть визначати власний порядок."
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
}

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/vi.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "Thứ tự ứng dụng",
"AppOrder" : "Thứ-tự.Ứng-dụng",
"Sort apps in the menu with drag and drop" : "Sắp xếp các ứng dụng trong bảng chọn bằng cách kéo và thả",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "Bật khả năng sắp xếp các biểu tượng ứng dụng từ các thiết lập cá nhân. Thứ tự sẽ được lưu lại mỗi người dùng riêng biệt.\nCác quản trị viên có thể định dạng một thiết lập thứ tự mặc định.\n\n##Đặt một thiết lập thứ tự mặc địnhcho tất cả các người dùng.\n\nĐi đến các Thiết lập Quản trị viên > các Thiết lập Bổ sung và kéo các biểu tượng dưới danh sách Thứ tự Ứng dụng.\n\n##Sử dụng ứng đụng đầu tiên như là ứng dụng mặc định\n\nBạn có thể dễ dàng khiến Nextcloud điều hướng tự động người dùng của bạn đến ứng dụng đầu tiên trong thứ tự cá nhân của họ bằng cách thay đổi tham số dưới đây trong tệp config/config.php:\n\n 'defaultapp' => 'apporder',\n\nNgười dùng bây giờ sẽ được tái điều hướng đến ứng dụng đầu tiên của thứ tự mặc định hoặc đến ứng dụng đầu tiên của thứ tự tùy chỉnh riêng của người dùng. ",
"App Order" : "Thứ tự ứng dụng",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "Đặt một thứ tự mặc định cho tất cả các người dùng. Điều này có thể bị bỏ qua, nếu một người dùng đã thiết lập một tùy chỉnh thứ tự riêng, và thứ tự mặc định không bị ép buộc thực thi. ",
"Drag the app icons to change their order." : "Kéo biểu tượng ứng dụng và thay đổi thứ tự của nó.",
"Force the default order for all users:" : "Ép buộc thực thi thứ tự mặc định cho tất cả các người dùng:",
"If enabled, users will not be able to set a custom order." : "Nếu được kích hoạt, người dùng sẽ không thể đặt một tùy chỉnh thứ tự riêng."
},
"nplurals=1; plural=0;");

+ 12
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/zh_CN.json View File

@ -0,0 +1,12 @@
{ "translations": {
"App order" : "应用顺序",
"AppOrder" : "应用顺序",
"Sort apps in the menu with drag and drop" : "在菜单上拖拽调整应用排序",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "在个人设置中启用应用图标排序。排列顺序会为每个用户独立保存。\n管理员可以定义全局默认的排序。\n\n## 为所有用户设置默认排序\n\n转到管理员设置>其他设置,然后拖动应用图标来排序。\n\n## 将第一个应用作为默认应用\n\n您可以轻松地让 Nextcloud 将您的用户重定向到他们的第一个应用程序\n通过更改 config / config.php 中的以下参数来实现:\n\n 'defaultapp' => 'apporder',\n\n用户现在将被重定向到默认排序下的第一个应用程序或\n用户排序的第一个应用程序。",
"App Order" : "应用顺序",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "为所有用户设置默认顺序。 如果用户已设置自定义顺序,并且不强制使用默认顺序,则将忽略此设置。",
"Drag the app icons to change their order." : "拖动应用图标以修改顺序",
"Force the default order for all users:" : "对所有用户强制使用默认顺序:",
"If enabled, users will not be able to set a custom order." : "如果启用,用户将无法设置自定义顺序。"
},"pluralForm" :"nplurals=1; plural=0;"
}

+ 14
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/l10n/zh_HK.js View File

@ -0,0 +1,14 @@
OC.L10N.register(
"apporder",
{
"App order" : "應用程式順序",
"AppOrder" : "應用程式順序",
"Sort apps in the menu with drag and drop" : "拖曳來調整選單中應用程式的順序",
"Enable sorting the app icons from the personal settings. The order will be saved for each\nuser individually. Administrators can define a custom default order.\n\n## Set a default order for all new users\n\nGo to the Admin settings > Additional settings and drag the icons under App order.\n\n## Use first app as default app\n\nYou can easily let Nextcloud redirect your user to the first app in their\npersonal order by changing the following parameter in your config/config.php:\n\n 'defaultapp' => 'apporder',\n\nUsers will now get redirected to the first app of the default order or to the\nfirst app of the user order." : "允許使用者在個人設定當中調整應用程式圖示的順序,每個使用者可以獨立設定自己偏好的順序,管理員可以也設定預設的順序。\n\n## 為所有新使用者設定預設的順序\n\n前往「設定」>「其他設定」,然後拖曳「應用程式順序」下方的圖示\n\n## 使用第一個應用程式為預設應用程式\n\n您可以設定 Nextcloud 自動在登入時將使用者重導向至他們設定的順序中最前面的應用程式,您需要修改 config/config.php 中的參數如下:\n\n 'defaultapp' => 'apporder',\n\n設定完成之後使用者就會自動被重導向至他們設定的順序中最前面的應用程式。",
"App Order" : "應用程式順序",
"Set a default order for all users. This will be ignored, if the user has setup a custom order, and the default order is not forced." : "對所有使用者設定預設順序。如果使用者有設定自訂順序則會忽略,不強制使用預設順序。",
"Drag the app icons to change their order." : "拖曳應用程式的圖示來更改順序",
"Force the default order for all users:" : "強制讓所有使用者使用預設順序:",
"If enabled, users will not be able to set a custom order." : "若開啟,使用者將無法設定自訂順序。"
},
"nplurals=1; plural=0;");

+ 86
- 0
docker/overlays/nextcloud/html/custom_apps/apporder/lib/Controller/AppController.php View File

@ -0,0 +1,86 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\AppOrder\Controller;
use \OCP\AppFramework\Controller;
use OCP\AppFramework\Http\RedirectResponse;
use \OCP\IRequest;
use \OCA\AppOrder\Service\ConfigService;
use OCA\AppOrder\Util;
use OCP\IURLGenerator;
class AppController extends Controller {
private $userId;
private $urlGenerator;
private $util;
public function __construct($appName,
IRequest $request,
IURLGenerator $urlGenerator,
Util $util, $userId) {
parent::__construct($appName, $request);
$this->userId = $userId;
$this->urlGenerator = $urlGenerator;
$this->util = $util;
}
/**
* @NoCSRFRequired
* @NoAdminRequired
* @return RedirectResponse
*/
public function index() {
$order = json_decode($this->util->getAppOrder());
$hidden = json_decode($this->util->getAppHidden());
$firstPage = null;
if ($order !== null && sizeof($order) > 0) {
if($hidden !== null && sizeof($hidden) > 0){
foreach($order as $app){
if(!in_array($app,$hidden)){
$firstPage = $app;
break;
}
}
}
else{
$firstPage = $order[0];
}
}
if($firstPage===null) {
$appId = 'files';
if (getenv('front_controller_active') === 'true') {
$firstPage = $this->urlGenerator->getAbsoluteURL('/apps/' . $appId . '/');
} else {
$firstPage = $this->urlGenerator->getAbsoluteURL('/index.php/apps/' . $appId . '/');
}
}
return new RedirectResponse($firstPage);
}
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save