Merge branch 'edge' into meteor-1.8

This commit is contained in:
Lauri Ojansivu 2018-12-03 16:32:05 +02:00
commit 30fe263bfe
25 changed files with 763 additions and 497 deletions

View file

@ -90,3 +90,4 @@ mquandalle:moment
msavin:usercache msavin:usercache
wekan:wekan-ldap wekan:wekan-ldap
wekan:accounts-cas wekan:accounts-cas
msavin:sjobs

View file

@ -121,6 +121,7 @@ mquandalle:jquery-ui-drag-drop-sort@0.2.0
mquandalle:moment@1.0.1 mquandalle:moment@1.0.1
mquandalle:mousetrap-bindglobal@0.0.1 mquandalle:mousetrap-bindglobal@0.0.1
mquandalle:perfect-scrollbar@0.6.5_2 mquandalle:perfect-scrollbar@0.6.5_2
msavin:sjobs@3.0.6
msavin:usercache@1.0.0 msavin:usercache@1.0.0
npm-bcrypt@0.9.3 npm-bcrypt@0.9.3
npm-mongo@3.1.1 npm-mongo@3.1.1

View file

@ -1,9 +1,20 @@
# Upcoming Wekan release # v1.79 2018-12-03 Wekan release
This release fixes the following bugs: This release adds the following new features:
- [Improve authentication, removing Login password/LDAP dropdown](https://github.com/wekan/wekan/issues/2016).
NOTE: This was added in v1.71, then reverted at v1.73 because login did not work, and after fix added back at v1.79.
Thanks to Akuket.
- Thanks to xet7:
- Build snap also on i386, armhf and arm64. Ignore if it fails. More fixes will be added later.
- Add CORS https://enable-cors.org/server_meteor.html to Standalone Wekan settings.
- Add missing LDAP and TIMER environment variables.
and fixes the following bugs:
- Fix: Message box for deleting subtask unreachable. - Fix: Message box for deleting subtask unreachable.
Thanks to hupptechnologies. Closes #1800 Thanks to hupptechnologies. Closes #1800
- Fix wrong dates in ChangeLog. Thanks to kelvinhammond.
Thanks to above GitHub users for their contributions. Thanks to above GitHub users for their contributions.
@ -59,6 +70,7 @@ Thanks to GitHub user alkemyst for contributions.
This release fixes the following bugs: This release fixes the following bugs:
- Revert Improve authentication to [fix Login failure](https://github.com/wekan/wekan/issues/2004). - Revert Improve authentication to [fix Login failure](https://github.com/wekan/wekan/issues/2004).
NOTE: This was added in v1.71, then reverted at v1.73 because login did not work, and after fix added back at v1.79.
Thanks to GitHub users Broxxx3 and xet7 for their contributions. Thanks to GitHub users Broxxx3 and xet7 for their contributions.
@ -80,6 +92,7 @@ This release adds the following new features and bugfixes:
- Adding an option to choose the default authentication method with env var. - Adding an option to choose the default authentication method with env var.
- Bug fix that allowed a user to connect with the password method while his user.authenticationMethod is "ldap" for example. - Bug fix that allowed a user to connect with the password method while his user.authenticationMethod is "ldap" for example.
- Adding a server-side method which allows disconnecting a user after a delay defined by env vars. - Adding a server-side method which allows disconnecting a user after a delay defined by env vars.
- NOTE: This was added in v1.71, then reverted at v1.73 because login did not work, and after fix added back at v1.79.
- [Improve shell scripts](https://github.com/wekan/wekan/pull/2002). Thanks to warnerjon12. - [Improve shell scripts](https://github.com/wekan/wekan/pull/2002). Thanks to warnerjon12.
Thanks to above GitHub users and translators for their contributions. Thanks to above GitHub users and translators for their contributions.
@ -185,11 +198,11 @@ REST API: [Allow to remove the full list of labels/members through the API](http
Thanks to GitHub user bentiss for contributions. Thanks to GitHub user bentiss for contributions.
# v1.62 2018-20-24 Wekan release # v1.62 2018-10-24 Wekan release
- Fix missing dropdown arrow on Chrome. Thanks to xet7. Closes #1964 - Fix missing dropdown arrow on Chrome. Thanks to xet7. Closes #1964
# v1.61 2018-20-24 Wekan release # v1.61 2018-10-24 Wekan release
- Fix lint error. Thanks to xet7. - Fix lint error. Thanks to xet7.

View file

@ -65,6 +65,11 @@ ARG LDAP_SYNC_USER_DATA
ARG LDAP_SYNC_USER_DATA_FIELDMAP ARG LDAP_SYNC_USER_DATA_FIELDMAP
ARG LDAP_SYNC_GROUP_ROLES ARG LDAP_SYNC_GROUP_ROLES
ARG LDAP_DEFAULT_DOMAIN ARG LDAP_DEFAULT_DOMAIN
ARG LOGOUT_WITH_TIMER
ARG LOGOUT_IN
ARG LOGOUT_ON_HOURS
ARG LOGOUT_ON_MINUTES
ARG CORS
# Set the environment variables (defaults where required) # Set the environment variables (defaults where required)
# DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303 # DOES NOT WORK: paxctl fix for alpine linux: https://github.com/wekan/wekan/issues/1303
@ -133,6 +138,11 @@ ENV BUILD_DEPS="apt-utils bsdtar gnupg gosu wget curl bzip2 build-essential pyth
LDAP_SYNC_USER_DATA_FIELDMAP="" \ LDAP_SYNC_USER_DATA_FIELDMAP="" \
LDAP_SYNC_GROUP_ROLES="" \ LDAP_SYNC_GROUP_ROLES="" \
LDAP_DEFAULT_DOMAIN="" LDAP_DEFAULT_DOMAIN=""
LOGOUT_WITH_TIMER="false" \
LOGOUT_IN="" \
LOGOUT_ON_HOURS="" \
LOGOUT_ON_MINUTES="" \
CORS=""
# Copy the app to the image # Copy the app to the image
COPY ${SRC_PATH} /home/wekan/app COPY ${SRC_PATH} /home/wekan/app

View file

@ -23,7 +23,6 @@ template(name="userFormsLayout")
br br
section.auth-dialog section.auth-dialog
+Template.dynamic(template=content) +Template.dynamic(template=content)
+connectionMethod
if isCas if isCas
.at-form .at-form
button#cas(class='at-btn submit' type='submit') {{casSignInLabel}} button#cas(class='at-btn submit' type='submit') {{casSignInLabel}}

View file

@ -6,29 +6,14 @@ const i18nTagToT9n = (i18nTag) => {
return i18nTag; return i18nTag;
}; };
const validator = { Template.userFormsLayout.onCreated(function() {
set(obj, prop, value) { Meteor.call('getDefaultAuthenticationMethod', (error, result) => {
if (prop === 'state' && value !== 'signIn') { this.data.defaultAuthenticationMethod = new ReactiveVar(error ? undefined : result);
$('.at-form-authentication').hide(); });
} else if (prop === 'state' && value === 'signIn') {
$('.at-form-authentication').show();
}
// The default behavior to store the value
obj[prop] = value;
// Indicate success
return true;
},
};
Template.userFormsLayout.onCreated(() => {
Meteor.subscribe('setting'); Meteor.subscribe('setting');
}); });
Template.userFormsLayout.onRendered(() => { Template.userFormsLayout.onRendered(() => {
AccountsTemplates.state.form.keys = new Proxy(AccountsTemplates.state.form.keys, validator);
const i18nTag = navigator.language; const i18nTag = navigator.language;
if (i18nTag) { if (i18nTag) {
T9n.setLanguage(i18nTagToT9n(i18nTag)); T9n.setLanguage(i18nTagToT9n(i18nTag));
@ -37,7 +22,6 @@ Template.userFormsLayout.onRendered(() => {
}); });
Template.userFormsLayout.helpers({ Template.userFormsLayout.helpers({
currentSetting() { currentSetting() {
return Settings.findOne(); return Settings.findOne();
}, },
@ -92,13 +76,14 @@ Template.userFormsLayout.events({
} }
}); });
}, },
'click #at-btn'(event) { 'click #at-btn'(event, instance) {
/* All authentication method can be managed/called here. /* All authentication method can be managed/called here.
!! DON'T FORGET to correctly fill the fields of the user during its creation if necessary authenticationMethod : String !! !! DON'T FORGET to correctly fill the fields of the user during its creation if necessary authenticationMethod : String !!
*/ */
const authenticationMethodSelected = $('.select-authentication').val(); const email = $('#at-field-username_and_email').val();
// Local account const password = $('#at-field-password').val();
if (authenticationMethodSelected === 'password') {
if (FlowRouter.getRouteName() !== 'atSignIn' || password === '' || email === '') {
return; return;
} }
@ -106,29 +91,11 @@ Template.userFormsLayout.events({
event.preventDefault(); event.preventDefault();
event.stopImmediatePropagation(); event.stopImmediatePropagation();
const email = $('#at-field-username_and_email').val(); Meteor.subscribe('user-authenticationMethod', email, {
const password = $('#at-field-password').val(); onReady() {
return authentication.call(this, instance, email, password);
// Ldap account },
if (authenticationMethodSelected === 'ldap') { });
// Check if the user can use the ldap connection
Meteor.subscribe('user-authenticationMethod', email, {
onReady() {
const user = Users.findOne();
if (user === undefined || user.authenticationMethod === 'ldap') {
// Use the ldap connection package
Meteor.loginWithLDAP(email, password, function(error) {
if (!error) {
// Connection
return FlowRouter.go('/');
}
return error;
});
}
return this.stop();
},
});
}
}, },
}); });
@ -137,3 +104,38 @@ Template.defaultLayout.events({
Modal.close(); Modal.close();
}, },
}); });
function authentication(instance, email, password) {
let user = Users.findOne();
// Authentication with password
if (user && user.authenticationMethod === 'password') {
$('#at-pwd-form').submit();
// Meteor.call('logoutWithTimer', user._id, () => {});
return this.stop();
}
// If user doesn't exist, uses the default authentication method if it defined
if (user === undefined) {
user = {
'authenticationMethod': instance.data.defaultAuthenticationMethod.get(),
};
}
// Authentication with LDAP
if (user.authenticationMethod === 'ldap') {
// Use the ldap connection package
Meteor.loginWithLDAP(email, password, function(error) {
if (!error) {
// Meteor.call('logoutWithTimer', Users.findOne()._id, () => {});
return FlowRouter.go('/');
}
return error;
});
}
/* else {
process.env.DEFAULT_AUTHENTICATION_METHOD is not defined
} */
return this.stop();
}

View file

@ -45,6 +45,8 @@ services:
# Wekan Export Board works when WITH_API=true. # Wekan Export Board works when WITH_API=true.
# If you disable Wekan API with false, Export Board does not work. # If you disable Wekan API with false, Export Board does not work.
- WITH_API=true - WITH_API=true
# CORS: Set Access-Control-Allow-Origin header. Example: *
#- CORS=*
# Optional: Integration with Matomo https://matomo.org that is installed to your server # Optional: Integration with Matomo https://matomo.org that is installed to your server
# The address of the server where Matomo is hosted. # The address of the server where Matomo is hosted.
# example: - MATOMO_ADDRESS=https://example.com/matomo # example: - MATOMO_ADDRESS=https://example.com/matomo
@ -209,6 +211,18 @@ services:
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example : # example :
#- LDAP_DEFAULT_DOMAIN= #- LDAP_DEFAULT_DOMAIN=
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
# example : LOGOUT_WITH_TIMER=true
#- LOGOUT_WITH_TIMER=
# LOGOUT_IN : The number of days
# example : LOGOUT_IN=1
#- LOGOUT_IN=
# LOGOUT_ON_HOURS : The number of hours
# example : LOGOUT_ON_HOURS=9
#- LOGOUT_ON_HOURS=
# LOGOUT_ON_MINUTES : The number of minutes
# example : LOGOUT_ON_MINUTES=55
#- LOGOUT_ON_MINUTES=
depends_on: depends_on:
- wekandb - wekandb

View file

@ -67,6 +67,8 @@ services:
# Wekan Export Board works when WITH_API='true'. # Wekan Export Board works when WITH_API='true'.
# If you disable Wekan API, Export Board does not work. # If you disable Wekan API, Export Board does not work.
- WITH_API=true - WITH_API=true
# CORS: Set Access-Control-Allow-Origin header. Example: *
#- CORS=*
# Optional: Integration with Matomo https://matomo.org that is installed to your server # Optional: Integration with Matomo https://matomo.org that is installed to your server
# The address of the server where Matomo is hosted. # The address of the server where Matomo is hosted.
# example: - MATOMO_ADDRESS=https://example.com/matomo # example: - MATOMO_ADDRESS=https://example.com/matomo
@ -231,7 +233,18 @@ services:
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example : # example :
#- LDAP_DEFAULT_DOMAIN= #- LDAP_DEFAULT_DOMAIN=
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
# example : LOGOUT_WITH_TIMER=true
#- LOGOUT_WITH_TIMER=
# LOGOUT_IN : The number of days
# example : LOGOUT_IN=1
#- LOGOUT_IN=
# LOGOUT_ON_HOURS : The number of hours
# example : LOGOUT_ON_HOURS=9
#- LOGOUT_ON_HOURS=
# LOGOUT_ON_MINUTES : The number of minutes
# example : LOGOUT_ON_MINUTES=55
#- LOGOUT_ON_MINUTES=
depends_on: depends_on:
- mongodb - mongodb

View file

@ -34,6 +34,8 @@ services:
# Wekan Export Board works when WITH_API=true. # Wekan Export Board works when WITH_API=true.
# If you disable Wekan API with false, Export Board does not work. # If you disable Wekan API with false, Export Board does not work.
- WITH_API=true - WITH_API=true
# CORS: Set Access-Control-Allow-Origin header. Example: *
#- CORS=*
# Optional: Integration with Matomo https://matomo.org that is installed to your server # Optional: Integration with Matomo https://matomo.org that is installed to your server
# The address of the server where Matomo is hosted. # The address of the server where Matomo is hosted.
# example: - MATOMO_ADDRESS=https://example.com/matomo # example: - MATOMO_ADDRESS=https://example.com/matomo
@ -198,6 +200,18 @@ services:
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example : # example :
#- LDAP_DEFAULT_DOMAIN= #- LDAP_DEFAULT_DOMAIN=
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
# example : LOGOUT_WITH_TIMER=true
#- LOGOUT_WITH_TIMER=
# LOGOUT_IN : The number of days
# example : LOGOUT_IN=1
#- LOGOUT_IN=
# LOGOUT_ON_HOURS : The number of hours
# example : LOGOUT_ON_HOURS=9
#- LOGOUT_ON_HOURS=
# LOGOUT_ON_MINUTES : The number of minutes
# example : LOGOUT_ON_MINUTES=55
#- LOGOUT_ON_MINUTES=
depends_on: depends_on:
- wekandb - wekandb

View file

@ -123,7 +123,7 @@
"card-comments-title": "Cette carte a %s commentaires.", "card-comments-title": "Cette carte a %s commentaires.",
"card-delete-notice": "La suppression est permanente. Vous perdrez toutes les actions associées à cette carte.", "card-delete-notice": "La suppression est permanente. Vous perdrez toutes les actions associées à cette carte.",
"card-delete-pop": "Toutes les actions vont être supprimées du suivi d'activités et vous ne pourrez plus utiliser cette carte. Cette action est irréversible.", "card-delete-pop": "Toutes les actions vont être supprimées du suivi d'activités et vous ne pourrez plus utiliser cette carte. Cette action est irréversible.",
"card-delete-suggest-archive": "You can move a card to Archive to remove it from the board and preserve the activity.", "card-delete-suggest-archive": "Vous pouvez déplacer une carte vers les archives afin de l'enlever du tableau tout en préservant l'activité.",
"card-due": "À échéance", "card-due": "À échéance",
"card-due-on": "Échéance le", "card-due-on": "Échéance le",
"card-spent": "Temps passé", "card-spent": "Temps passé",
@ -166,7 +166,7 @@
"clipboard": "Presse-papier ou glisser-déposer", "clipboard": "Presse-papier ou glisser-déposer",
"close": "Fermer", "close": "Fermer",
"close-board": "Fermer le tableau", "close-board": "Fermer le tableau",
"close-board-pop": "You will be able to restore the board by clicking the “Archive” button from the home header.", "close-board-pop": "Vous pouvez restaurer le tableau en cliquant sur le bouton « Archives » depuis le menu en entête.",
"color-black": "noir", "color-black": "noir",
"color-blue": "bleu", "color-blue": "bleu",
"color-green": "vert", "color-green": "vert",
@ -284,13 +284,13 @@
"import-board-c": "Importer un tableau", "import-board-c": "Importer un tableau",
"import-board-title-trello": "Importer le tableau depuis Trello", "import-board-title-trello": "Importer le tableau depuis Trello",
"import-board-title-wekan": "Importer un tableau depuis Wekan", "import-board-title-wekan": "Importer un tableau depuis Wekan",
"import-sandstorm-backup-warning": "Do not delete data you import from original Wekan or Trello before checking does this grain close and open again, or do you get Board not found error, that means data loss.", "import-sandstorm-backup-warning": "Ne supprimez pas les données que vous importez du Wekan ou Trello original avant de vérifier que la graine peut se fermer et s'ouvrir à nouveau, ou qu'une erreur \"Tableau introuvable\" survient, sinon vous perdrez vos données.",
"import-sandstorm-warning": "Le tableau importé supprimera toutes les données du tableau et les remplacera avec celles du tableau importé.", "import-sandstorm-warning": "Le tableau importé supprimera toutes les données du tableau et les remplacera avec celles du tableau importé.",
"from-trello": "Depuis Trello", "from-trello": "Depuis Trello",
"from-wekan": "Depuis Wekan", "from-wekan": "Depuis Wekan",
"import-board-instruction-trello": "Dans votre tableau Trello, allez sur 'Menu', puis sur 'Plus', 'Imprimer et exporter', 'Exporter en JSON' et copiez le texte du résultat", "import-board-instruction-trello": "Dans votre tableau Trello, allez sur 'Menu', puis sur 'Plus', 'Imprimer et exporter', 'Exporter en JSON' et copiez le texte du résultat",
"import-board-instruction-wekan": "Dans votre tableau Wekan, allez dans 'Menu', puis 'Exporter un tableau', et copier le texte du fichier téléchargé.", "import-board-instruction-wekan": "Dans votre tableau Wekan, allez dans 'Menu', puis 'Exporter un tableau', et copier le texte du fichier téléchargé.",
"import-board-instruction-about-errors": "If you get errors when importing board, sometimes importing still works, and board is at All Boards page.", "import-board-instruction-about-errors": "Si une erreur survient en important le tableau, il se peut que l'import ait fonctionné, et que le tableau se trouve sur la page \"Tous les tableaux\".",
"import-json-placeholder": "Collez ici les données JSON valides", "import-json-placeholder": "Collez ici les données JSON valides",
"import-map-members": "Faire correspondre aux membres", "import-map-members": "Faire correspondre aux membres",
"import-members-map": "Le tableau que vous venez d'importer contient des membres. Veuillez associer les membres que vous souhaitez importer à des utilisateurs de Wekan.", "import-members-map": "Le tableau que vous venez d'importer contient des membres. Veuillez associer les membres que vous souhaitez importer à des utilisateurs de Wekan.",
@ -315,8 +315,8 @@
"leave-board-pop": "Êtes-vous sur de vouloir quitter __boardTitle__ ? Vous ne serez plus associé aux cartes de ce tableau.", "leave-board-pop": "Êtes-vous sur de vouloir quitter __boardTitle__ ? Vous ne serez plus associé aux cartes de ce tableau.",
"leaveBoardPopup-title": "Quitter le tableau", "leaveBoardPopup-title": "Quitter le tableau",
"link-card": "Lier à cette carte", "link-card": "Lier à cette carte",
"list-archive-cards": "Move all cards in this list to Archive", "list-archive-cards": "Déplacer toutes les cartes de cette liste vers les archives",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", "list-archive-cards-pop": "Cela supprimera du tableau toutes les cartes de cette liste. Pour voir les cartes archivées et les renvoyer vers le tableau, cliquez sur « Menu » puis « Archives ».",
"list-move-cards": "Déplacer toutes les cartes de cette liste", "list-move-cards": "Déplacer toutes les cartes de cette liste",
"list-select-cards": "Sélectionner toutes les cartes de cette liste", "list-select-cards": "Sélectionner toutes les cartes de cette liste",
"listActionPopup-title": "Actions sur la liste", "listActionPopup-title": "Actions sur la liste",
@ -618,5 +618,5 @@
"authentication-type": "Type d'authentification", "authentication-type": "Type d'authentification",
"custom-product-name": "Nom personnalisé", "custom-product-name": "Nom personnalisé",
"layout": "Interface", "layout": "Interface",
"hide-logo": "Hide Logo" "hide-logo": "Cacher le logo"
} }

View file

@ -11,10 +11,10 @@
"act-createCustomField": "skapa anpassat fält __customField__", "act-createCustomField": "skapa anpassat fält __customField__",
"act-createList": "lade till __list__ to __board__", "act-createList": "lade till __list__ to __board__",
"act-addBoardMember": "lade till __member__ to __board__", "act-addBoardMember": "lade till __member__ to __board__",
"act-archivedBoard": "__board__ moved to Archive", "act-archivedBoard": "__board__ flyttades till Arkiv",
"act-archivedCard": "__card__ moved to Archive", "act-archivedCard": "__card__ flyttades till Arkiv",
"act-archivedList": "__list__ moved to Archive", "act-archivedList": "__list__ flyttades till Arkiv",
"act-archivedSwimlane": "__swimlane__ moved to Archive", "act-archivedSwimlane": "__swimlane__ flyttades till Arkiv",
"act-importBoard": "importerade __board__", "act-importBoard": "importerade __board__",
"act-importCard": "importerade __card__", "act-importCard": "importerade __card__",
"act-importList": "importerade __list__", "act-importList": "importerade __list__",
@ -29,7 +29,7 @@
"activities": "Aktiviteter", "activities": "Aktiviteter",
"activity": "Aktivitet", "activity": "Aktivitet",
"activity-added": "Lade %s till %s", "activity-added": "Lade %s till %s",
"activity-archived": "%s moved to Archive", "activity-archived": "%s flyttades till Arkiv",
"activity-attached": "bifogade %s to %s", "activity-attached": "bifogade %s to %s",
"activity-created": "skapade %s", "activity-created": "skapade %s",
"activity-customfield-created": "skapa anpassat fält %s", "activity-customfield-created": "skapa anpassat fält %s",
@ -79,8 +79,8 @@
"and-n-other-card_plural": "Och __count__ andra kort", "and-n-other-card_plural": "Och __count__ andra kort",
"apply": "Tillämpa", "apply": "Tillämpa",
"app-is-offline": "Wekan läses in, var god vänta. Uppdatering av sidan kommer att leda till förlust av data. Om Wekan inte läses in, kontrollera att Wekan-servern inte har stoppats.", "app-is-offline": "Wekan läses in, var god vänta. Uppdatering av sidan kommer att leda till förlust av data. Om Wekan inte läses in, kontrollera att Wekan-servern inte har stoppats.",
"archive": "Move to Archive", "archive": "Flytta till Arkiv",
"archive-all": "Move All to Archive", "archive-all": "Flytta alla till Arkiv",
"archive-board": "Move Board to Archive", "archive-board": "Move Board to Archive",
"archive-card": "Move Card to Archive", "archive-card": "Move Card to Archive",
"archive-list": "Move List to Archive", "archive-list": "Move List to Archive",
@ -558,7 +558,7 @@
"r-when-a-attach": "When an attachment", "r-when-a-attach": "When an attachment",
"r-when-a-checklist": "When a checklist is", "r-when-a-checklist": "When a checklist is",
"r-when-the-checklist": "When the checklist", "r-when-the-checklist": "When the checklist",
"r-completed": "Completed", "r-completed": "Avslutad",
"r-made-incomplete": "Made incomplete", "r-made-incomplete": "Made incomplete",
"r-when-a-item": "When a checklist item is", "r-when-a-item": "When a checklist item is",
"r-when-the-item": "When the checklist item", "r-when-the-item": "When the checklist item",
@ -568,8 +568,8 @@
"r-top-of": "Top of", "r-top-of": "Top of",
"r-bottom-of": "Bottom of", "r-bottom-of": "Bottom of",
"r-its-list": "its list", "r-its-list": "its list",
"r-archive": "Move to Archive", "r-archive": "Flytta till Arkiv",
"r-unarchive": "Restore from Archive", "r-unarchive": "Återställ från Arkiv",
"r-card": "kort", "r-card": "kort",
"r-add": "Lägg till", "r-add": "Lägg till",
"r-remove": "Ta bort", "r-remove": "Ta bort",
@ -614,9 +614,9 @@
"ldap": "LDAP", "ldap": "LDAP",
"oauth2": "OAuth2", "oauth2": "OAuth2",
"cas": "CAS", "cas": "CAS",
"authentication-method": "Authentication method", "authentication-method": "Autentiseringsmetod",
"authentication-type": "Authentication type", "authentication-type": "Autentiseringstyp",
"custom-product-name": "Custom Product Name", "custom-product-name": "Anpassat produktnamn",
"layout": "Layout", "layout": "Layout",
"hide-logo": "Hide Logo" "hide-logo": "Dölj logotypen"
} }

View file

@ -29,7 +29,7 @@
"activities": "Etkinlikler", "activities": "Etkinlikler",
"activity": "Etkinlik", "activity": "Etkinlik",
"activity-added": "%s içine %s ekledi", "activity-added": "%s içine %s ekledi",
"activity-archived": "%s moved to Archive", "activity-archived": "%s arşive taşındı",
"activity-attached": "%s içine %s ekledi", "activity-attached": "%s içine %s ekledi",
"activity-created": "%s öğesini oluşturdu", "activity-created": "%s öğesini oluşturdu",
"activity-customfield-created": "%s adlı özel alan yaratıldı", "activity-customfield-created": "%s adlı özel alan yaratıldı",
@ -79,18 +79,18 @@
"and-n-other-card_plural": "Ve __count__ diğer kart", "and-n-other-card_plural": "Ve __count__ diğer kart",
"apply": "Uygula", "apply": "Uygula",
"app-is-offline": "Wekan yükleniyor, lütfen bekleyin. Sayfayı yenilemek veri kaybına sebep olabilir. Eğer Wekan yüklenmezse, lütfen Wekan sunucusunun çalıştığından emin olun.", "app-is-offline": "Wekan yükleniyor, lütfen bekleyin. Sayfayı yenilemek veri kaybına sebep olabilir. Eğer Wekan yüklenmezse, lütfen Wekan sunucusunun çalıştığından emin olun.",
"archive": "Move to Archive", "archive": "Arşive Taşı",
"archive-all": "Move All to Archive", "archive-all": "Hepsini Arşive Taşı",
"archive-board": "Move Board to Archive", "archive-board": "Panoyu Arşive Taşı",
"archive-card": "Move Card to Archive", "archive-card": "Kartı Arşive Taşı",
"archive-list": "Move List to Archive", "archive-list": "Listeyi Arşive Taşı",
"archive-swimlane": "Move Swimlane to Archive", "archive-swimlane": "Kulvarı Arşive Taşı",
"archive-selection": "Move selection to Archive", "archive-selection": "Seçimi arşive taşı",
"archiveBoardPopup-title": "Move Board to Archive?", "archiveBoardPopup-title": "Panoyu arşive taşı?",
"archived-items": "Arşivle", "archived-items": "Arşivle",
"archived-boards": "Boards in Archive", "archived-boards": "Panolar Arşivde",
"restore-board": "Panoyu Geri Getir", "restore-board": "Panoyu Geri Getir",
"no-archived-boards": "No Boards in Archive.", "no-archived-boards": "Arşivde Pano Yok.",
"archives": "Arşivle", "archives": "Arşivle",
"assign-member": "Üye ata", "assign-member": "Üye ata",
"attached": "dosya(sı) eklendi", "attached": "dosya(sı) eklendi",
@ -118,8 +118,8 @@
"board-view-lists": "Listeler", "board-view-lists": "Listeler",
"bucket-example": "Örn: \"Marketten Alacaklarım\"", "bucket-example": "Örn: \"Marketten Alacaklarım\"",
"cancel": "İptal", "cancel": "İptal",
"card-archived": "This card is moved to Archive.", "card-archived": "Bu kart arşive taşındı.",
"board-archived": "This board is moved to Archive.", "board-archived": "Bu pano arşive taşındı.",
"card-comments-title": "Bu kartta %s yorum var.", "card-comments-title": "Bu kartta %s yorum var.",
"card-delete-notice": "Silme işlemi kalıcıdır. Bu kartla ilişkili tüm eylemleri kaybedersiniz.", "card-delete-notice": "Silme işlemi kalıcıdır. Bu kartla ilişkili tüm eylemleri kaybedersiniz.",
"card-delete-pop": "Son hareketler alanındaki tüm veriler silinecek, ayrıca bu kartı yeniden açamayacaksın. Bu işlemin geri dönüşü yok.", "card-delete-pop": "Son hareketler alanındaki tüm veriler silinecek, ayrıca bu kartı yeniden açamayacaksın. Bu işlemin geri dönüşü yok.",
@ -147,8 +147,8 @@
"cards-count": "Kartlar", "cards-count": "Kartlar",
"casSignIn": "CAS ile giriş yapın", "casSignIn": "CAS ile giriş yapın",
"cardType-card": "Kart", "cardType-card": "Kart",
"cardType-linkedCard": "Linked Card", "cardType-linkedCard": "Bağlantılı kart",
"cardType-linkedBoard": "Linked Board", "cardType-linkedBoard": "Bağlantılı Pano",
"change": "Değiştir", "change": "Değiştir",
"change-avatar": "Avatar Değiştir", "change-avatar": "Avatar Değiştir",
"change-password": "Parola Değiştir", "change-password": "Parola Değiştir",
@ -181,14 +181,14 @@
"comment-placeholder": "Yorum Yaz", "comment-placeholder": "Yorum Yaz",
"comment-only": "Sadece yorum", "comment-only": "Sadece yorum",
"comment-only-desc": "Sadece kartlara yorum yazabilir.", "comment-only-desc": "Sadece kartlara yorum yazabilir.",
"no-comments": "No comments", "no-comments": "Yorum Yok",
"no-comments-desc": "Can not see comments and activities.", "no-comments-desc": "Yorumlar ve aktiviteleri göremiyorum.",
"computer": "Bilgisayar", "computer": "Bilgisayar",
"confirm-subtask-delete-dialog": "Are you sure you want to delete subtask?", "confirm-subtask-delete-dialog": "Alt görevi silmek istediğinizden emin misiniz?",
"confirm-checklist-delete-dialog": "Are you sure you want to delete checklist?", "confirm-checklist-delete-dialog": "Kontrol listesini silmek istediğinden emin misin?",
"copy-card-link-to-clipboard": "Kartın linkini kopyala", "copy-card-link-to-clipboard": "Kartın linkini kopyala",
"linkCardPopup-title": "Link Card", "linkCardPopup-title": "Bağlantı kartı",
"searchCardPopup-title": "Search Card", "searchCardPopup-title": "Kart Ara",
"copyCardPopup-title": "Kartı Kopyala", "copyCardPopup-title": "Kartı Kopyala",
"copyChecklistToManyCardsPopup-title": "Yapılacaklar Listesi şemasını birden çok karta kopyala", "copyChecklistToManyCardsPopup-title": "Yapılacaklar Listesi şemasını birden çok karta kopyala",
"copyChecklistToManyCardsPopup-instructions": "Hedef Kart Başlıkları ve Açıklamaları bu JSON formatında", "copyChecklistToManyCardsPopup-instructions": "Hedef Kart Başlıkları ve Açıklamaları bu JSON formatında",
@ -271,7 +271,7 @@
"filter-on": "Filtre aktif", "filter-on": "Filtre aktif",
"filter-on-desc": "Bu panodaki kartları filtreliyorsunuz. Fitreyi düzenlemek için tıklayın.", "filter-on-desc": "Bu panodaki kartları filtreliyorsunuz. Fitreyi düzenlemek için tıklayın.",
"filter-to-selection": "Seçime göre filtreleme yap", "filter-to-selection": "Seçime göre filtreleme yap",
"advanced-filter-label": "Advanced Filter", "advanced-filter-label": "Gelişmiş Filtreleme",
"advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i", "advanced-filter-description": "Advanced Filter allows to write a string containing following operators: == != <= >= && || ( ) A space is used as a separator between the Operators. You can filter for all Custom Fields by typing their names and values. For Example: Field1 == Value1. Note: If fields or values contains spaces, you need to encapsulate them into single quotes. For Example: 'Field 1' == 'Value 1'. For single control characters (' \\/) to be skipped, you can use \\. For example: Field1 == I\\'m. Also you can combine multiple conditions. For Example: F1 == V1 || F1 == V2. Normally all operators are interpreted from left to right. You can change the order by placing brackets. For Example: F1 == V1 && ( F2 == V2 || F2 == V3 ). Also you can search text fields using regex: F1 == /Tes.*/i",
"fullname": "Ad Soyad", "fullname": "Ad Soyad",
"header-logo-title": "Panolar sayfanıza geri dön.", "header-logo-title": "Panolar sayfanıza geri dön.",
@ -315,7 +315,7 @@
"leave-board-pop": "__boardTitle__ panosundan ayrılmak istediğinize emin misiniz? Panodaki tüm kartlardan kaldırılacaksınız.", "leave-board-pop": "__boardTitle__ panosundan ayrılmak istediğinize emin misiniz? Panodaki tüm kartlardan kaldırılacaksınız.",
"leaveBoardPopup-title": "Panodan ayrılmak istediğinize emin misiniz?", "leaveBoardPopup-title": "Panodan ayrılmak istediğinize emin misiniz?",
"link-card": "Bu kartın bağlantısı", "link-card": "Bu kartın bağlantısı",
"list-archive-cards": "Move all cards in this list to Archive", "list-archive-cards": "Bu listedeki tüm kartları arşive taşı",
"list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.", "list-archive-cards-pop": "This will remove all the cards in this list from the board. To view cards in Archive and bring them back to the board, click “Menu” > “Archive”.",
"list-move-cards": "Listedeki tüm kartları taşı", "list-move-cards": "Listedeki tüm kartları taşı",
"list-select-cards": "Listedeki tüm kartları seç", "list-select-cards": "Listedeki tüm kartları seç",
@ -345,9 +345,9 @@
"muted-info": "Bu panodaki hiçbir değişiklik hakkında bildirim almayacaksınız", "muted-info": "Bu panodaki hiçbir değişiklik hakkında bildirim almayacaksınız",
"my-boards": "Panolarım", "my-boards": "Panolarım",
"name": "Adı", "name": "Adı",
"no-archived-cards": "No cards in Archive.", "no-archived-cards": "Arşivde kart yok",
"no-archived-lists": "No lists in Archive.", "no-archived-lists": "Arşivde liste yok",
"no-archived-swimlanes": "No swimlanes in Archive.", "no-archived-swimlanes": "Arşivde kulvar yok",
"no-results": "Sonuç yok", "no-results": "Sonuç yok",
"normal": "Normal", "normal": "Normal",
"normal-desc": "Kartları görüntüleyebilir ve düzenleyebilir. Ayarları değiştiremez.", "normal-desc": "Kartları görüntüleyebilir ve düzenleyebilir. Ayarları değiştiremez.",
@ -383,7 +383,7 @@
"restore": "Geri Getir", "restore": "Geri Getir",
"save": "Kaydet", "save": "Kaydet",
"search": "Arama", "search": "Arama",
"rules": "Rules", "rules": "Kurallar",
"search-cards": "Bu tahta da ki kart başlıkları ve açıklamalarında arama yap", "search-cards": "Bu tahta da ki kart başlıkları ve açıklamalarında arama yap",
"search-example": "Aranılacak metin?", "search-example": "Aranılacak metin?",
"select-color": "Renk Seç", "select-color": "Renk Seç",
@ -427,7 +427,7 @@
"uploaded-avatar": "Avatar yüklendi", "uploaded-avatar": "Avatar yüklendi",
"username": "Kullanıcı adı", "username": "Kullanıcı adı",
"view-it": "Görüntüle", "view-it": "Görüntüle",
"warn-list-archived": "warning: this card is in an list at Archive", "warn-list-archived": "Uyarı: Bu kart arşivdeki bir listede",
"watch": "Takip Et", "watch": "Takip Et",
"watching": "Takip Ediliyor", "watching": "Takip Ediliyor",
"watching-info": "Bu pano hakkındaki tüm değişiklikler hakkında bildirim alacaksınız", "watching-info": "Bu pano hakkındaki tüm değişiklikler hakkında bildirim alacaksınız",
@ -484,8 +484,8 @@
"minutes": "dakika", "minutes": "dakika",
"seconds": "saniye", "seconds": "saniye",
"show-field-on-card": "Bu alanı kartta göster", "show-field-on-card": "Bu alanı kartta göster",
"automatically-field-on-card": "Auto create field to all cards", "automatically-field-on-card": "Tüm kartlara otomatik alan oluştur",
"showLabel-field-on-card": "Show field label on minicard", "showLabel-field-on-card": "Minikard üzerindeki alan etiketini göster",
"yes": "Evet", "yes": "Evet",
"no": "Hayır", "no": "Hayır",
"accounts": "Hesaplar", "accounts": "Hesaplar",
@ -504,119 +504,119 @@
"requested-by": "Talep Eden", "requested-by": "Talep Eden",
"board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.", "board-delete-notice": "Deleting is permanent. You will lose all lists, cards and actions associated with this board.",
"delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.", "delete-board-confirm-popup": "All lists, cards, labels, and activities will be deleted and you won't be able to recover the board contents. There is no undo.",
"boardDeletePopup-title": "Delete Board?", "boardDeletePopup-title": "Panoyu Sil?",
"delete-board": "Delete Board", "delete-board": "Panoyu Sil",
"default-subtasks-board": "Subtasks for __board__ board", "default-subtasks-board": "Subtasks for __board__ board",
"default": "Varsayılan", "default": "Varsayılan",
"queue": "Sıra", "queue": "Sıra",
"subtask-settings": "Subtasks Settings", "subtask-settings": "Alt Görev ayarları",
"boardSubtaskSettingsPopup-title": "Board Subtasks Settings", "boardSubtaskSettingsPopup-title": "Pano alt görev ayarları",
"show-subtasks-field": "Cards can have subtasks", "show-subtasks-field": "Kartların alt görevleri olabilir",
"deposit-subtasks-board": "Deposit subtasks to this board:", "deposit-subtasks-board": "Deposit subtasks to this board:",
"deposit-subtasks-list": "Landing list for subtasks deposited here:", "deposit-subtasks-list": "Alt görevlerin açılacağı liste:",
"show-parent-in-minicard": "Show parent in minicard:", "show-parent-in-minicard": "Mini kart içinde üst kartı göster",
"prefix-with-full-path": "Prefix with full path", "prefix-with-full-path": "Tam yolunu önüne ekle",
"prefix-with-parent": "Prefix with parent", "prefix-with-parent": "Prefix with parent",
"subtext-with-full-path": "Subtext with full path", "subtext-with-full-path": "Tam yolu ile alt metin",
"subtext-with-parent": "Subtext with parent", "subtext-with-parent": "üst öge ile alt metin",
"change-card-parent": "Change card's parent", "change-card-parent": "Kartın üst kartını değiştir",
"parent-card": "Parent card", "parent-card": "Ana kart",
"source-board": "Source board", "source-board": "Kaynak panosu",
"no-parent": "Don't show parent", "no-parent": "Üst ögeyi gösterme",
"activity-added-label": "added label '%s' to %s", "activity-added-label": "added label '%s' to %s",
"activity-removed-label": "removed label '%s' from %s", "activity-removed-label": "removed label '%s' from %s",
"activity-delete-attach": "deleted an attachment from %s", "activity-delete-attach": "deleted an attachment from %s",
"activity-added-label-card": "added label '%s'", "activity-added-label-card": "added label '%s'",
"activity-removed-label-card": "removed label '%s'", "activity-removed-label-card": "removed label '%s'",
"activity-delete-attach-card": "deleted an attachment", "activity-delete-attach-card": "Ek silindi",
"r-rule": "Rule", "r-rule": "Kural",
"r-add-trigger": "Add trigger", "r-add-trigger": "Tetikleyici ekle",
"r-add-action": "Add action", "r-add-action": "Eylem ekle",
"r-board-rules": "Board rules", "r-board-rules": "Pano Kuralları",
"r-add-rule": "Add rule", "r-add-rule": "Kural ekle",
"r-view-rule": "View rule", "r-view-rule": "Kuralı göster",
"r-delete-rule": "Delete rule", "r-delete-rule": "Kuralı sil",
"r-new-rule-name": "New rule title", "r-new-rule-name": "Yeni kural başlığı",
"r-no-rules": "No rules", "r-no-rules": "Kural yok",
"r-when-a-card-is": "When a card is", "r-when-a-card-is": "When a card is",
"r-added-to": "Added to", "r-added-to": "Added to",
"r-removed-from": "Removed from", "r-removed-from": "Removed from",
"r-the-board": "the board", "r-the-board": "pano",
"r-list": "list", "r-list": "liste",
"r-moved-to": "Moved to", "r-moved-to": "Moved to",
"r-moved-from": "Moved from", "r-moved-from": "Moved from",
"r-archived": "Moved to Archive", "r-archived": "Arşive taşındı",
"r-unarchived": "Restored from Archive", "r-unarchived": "Arşivden geri çıkarıldı",
"r-a-card": "a card", "r-a-card": "Kart",
"r-when-a-label-is": "When a label is", "r-when-a-label-is": "When a label is",
"r-when-the-label-is": "When the label is", "r-when-the-label-is": "When the label is",
"r-list-name": "List name", "r-list-name": "Liste İsmi",
"r-when-a-member": "When a member is", "r-when-a-member": "When a member is",
"r-when-the-member": "When the member", "r-when-the-member": "When the member",
"r-name": "name", "r-name": "isim",
"r-is": "is", "r-is": "is",
"r-when-a-attach": "When an attachment", "r-when-a-attach": "When an attachment",
"r-when-a-checklist": "When a checklist is", "r-when-a-checklist": "When a checklist is",
"r-when-the-checklist": "When the checklist", "r-when-the-checklist": "When the checklist",
"r-completed": "Completed", "r-completed": "Tamamlandı",
"r-made-incomplete": "Made incomplete", "r-made-incomplete": "Tamamlanmamış",
"r-when-a-item": "When a checklist item is", "r-when-a-item": "When a checklist item is",
"r-when-the-item": "When the checklist item", "r-when-the-item": "When the checklist item",
"r-checked": "Checked", "r-checked": "İşaretlendi",
"r-unchecked": "Unchecked", "r-unchecked": "İşaret Kaldırıldı",
"r-move-card-to": "Move card to", "r-move-card-to": "Kartı taşı",
"r-top-of": "Top of", "r-top-of": "En üst",
"r-bottom-of": "Bottom of", "r-bottom-of": "En alt",
"r-its-list": "its list", "r-its-list": "its list",
"r-archive": "Move to Archive", "r-archive": "Arşive Taşı",
"r-unarchive": "Restore from Archive", "r-unarchive": "Arşivden Geri Yükle",
"r-card": "card", "r-card": "Kart",
"r-add": "Ekle", "r-add": "Ekle",
"r-remove": "Remove", "r-remove": "Kaldır",
"r-label": "label", "r-label": "label",
"r-member": "member", "r-member": "üye",
"r-remove-all": "Remove all members from the card", "r-remove-all": "Remove all members from the card",
"r-checklist": "checklist", "r-checklist": "Kontrol Listesi",
"r-check-all": "Check all", "r-check-all": "Tümünü işaretle",
"r-uncheck-all": "Uncheck all", "r-uncheck-all": "Tüm işaretleri kaldır",
"r-items-check": "items of checklist", "r-items-check": "Kontrol Listesi maddeleri",
"r-check": "Check", "r-check": "işaretle",
"r-uncheck": "Uncheck", "r-uncheck": "İşareti Kaldır",
"r-item": "item", "r-item": "item",
"r-of-checklist": "of checklist", "r-of-checklist": "of checklist",
"r-send-email": "Send an email", "r-send-email": "E-Posta Gönder",
"r-to": "to", "r-to": "to",
"r-subject": "subject", "r-subject": "Konu",
"r-rule-details": "Rule details", "r-rule-details": "Kural Detayları",
"r-d-move-to-top-gen": "Move card to top of its list", "r-d-move-to-top-gen": "Move card to top of its list",
"r-d-move-to-top-spec": "Move card to top of list", "r-d-move-to-top-spec": "Move card to top of list",
"r-d-move-to-bottom-gen": "Move card to bottom of its list", "r-d-move-to-bottom-gen": "Move card to bottom of its list",
"r-d-move-to-bottom-spec": "Move card to bottom of list", "r-d-move-to-bottom-spec": "Move card to bottom of list",
"r-d-send-email": "Send email", "r-d-send-email": "E-Posta gönder",
"r-d-send-email-to": "to", "r-d-send-email-to": "to",
"r-d-send-email-subject": "subject", "r-d-send-email-subject": "Konu",
"r-d-send-email-message": "message", "r-d-send-email-message": "mesaj",
"r-d-archive": "Move card to Archive", "r-d-archive": "Kartı Arşive Taşı",
"r-d-unarchive": "Restore card from Archive", "r-d-unarchive": "Kartı arşivden geri yükle",
"r-d-add-label": "Add label", "r-d-add-label": "Etiket ekle",
"r-d-remove-label": "Remove label", "r-d-remove-label": "Etiketi kaldır",
"r-d-add-member": "Add member", "r-d-add-member": "Üye Ekle",
"r-d-remove-member": "Remove member", "r-d-remove-member": "Üye Sil",
"r-d-remove-all-member": "Remove all member", "r-d-remove-all-member": "Tüm Üyeleri Sil",
"r-d-check-all": "Check all items of a list", "r-d-check-all": "Check all items of a list",
"r-d-uncheck-all": "Uncheck all items of a list", "r-d-uncheck-all": "Uncheck all items of a list",
"r-d-check-one": "Check item", "r-d-check-one": "Check item",
"r-d-uncheck-one": "Uncheck item", "r-d-uncheck-one": "Uncheck item",
"r-d-check-of-list": "of checklist", "r-d-check-of-list": "of checklist",
"r-d-add-checklist": "Add checklist", "r-d-add-checklist": "Kontrol listesine ekle",
"r-d-remove-checklist": "Remove checklist", "r-d-remove-checklist": "Kontrol listesini kaldır",
"r-when-a-card-is-moved": "When a card is moved to another list", "r-when-a-card-is-moved": "When a card is moved to another list",
"ldap": "LDAP", "ldap": "LDAP",
"oauth2": "OAuth2", "oauth2": "Oauth2",
"cas": "CAS", "cas": "CAS",
"authentication-method": "Authentication method", "authentication-method": "Kimlik doğrulama yöntemi",
"authentication-type": "Authentication type", "authentication-type": "Kimlik doğrulama türü",
"custom-product-name": "Custom Product Name", "custom-product-name": "Özel Ürün Adı",
"layout": "Layout", "layout": "Düzen",
"hide-logo": "Hide Logo" "hide-logo": "Logoyu Gizle"
} }

View file

@ -11,10 +11,10 @@
"act-createCustomField": "创建了自定义字段 __customField__", "act-createCustomField": "创建了自定义字段 __customField__",
"act-createList": "添加列表 __list__ 至看板 __board__", "act-createList": "添加列表 __list__ 至看板 __board__",
"act-addBoardMember": "添加成员 __member__ 至看板 __board__", "act-addBoardMember": "添加成员 __member__ 至看板 __board__",
"act-archivedBoard": "__board__ moved to Archive", "act-archivedBoard": "__board__ 已被移入归档",
"act-archivedCard": "__card__ moved to Archive", "act-archivedCard": "__card__ 已被移入归档",
"act-archivedList": "__list__ moved to Archive", "act-archivedList": "__list__ 已被移入归档",
"act-archivedSwimlane": "__swimlane__ moved to Archive", "act-archivedSwimlane": "__swimlane__ 已被移入归档",
"act-importBoard": "导入看板 __board__", "act-importBoard": "导入看板 __board__",
"act-importCard": "导入卡片 __card__", "act-importCard": "导入卡片 __card__",
"act-importList": "导入列表 __list__", "act-importList": "导入列表 __list__",
@ -29,7 +29,7 @@
"activities": "活动", "activities": "活动",
"activity": "活动", "activity": "活动",
"activity-added": "添加 %s 至 %s", "activity-added": "添加 %s 至 %s",
"activity-archived": "%s moved to Archive", "activity-archived": "%s 已被移入归档",
"activity-attached": "添加附件 %s 至 %s", "activity-attached": "添加附件 %s 至 %s",
"activity-created": "创建 %s", "activity-created": "创建 %s",
"activity-customfield-created": "创建了自定义字段 %s", "activity-customfield-created": "创建了自定义字段 %s",
@ -79,7 +79,7 @@
"and-n-other-card_plural": "和其他 __count__ 个卡片", "and-n-other-card_plural": "和其他 __count__ 个卡片",
"apply": "应用", "apply": "应用",
"app-is-offline": "Wekan 正在加载,请稍等。刷新页面将导致数据丢失。如果 Wekan 无法加载,请检查 Wekan 服务器是否已经停止。", "app-is-offline": "Wekan 正在加载,请稍等。刷新页面将导致数据丢失。如果 Wekan 无法加载,请检查 Wekan 服务器是否已经停止。",
"archive": "Move to Archive", "archive": "归档",
"archive-all": "Move All to Archive", "archive-all": "Move All to Archive",
"archive-board": "Move Board to Archive", "archive-board": "Move Board to Archive",
"archive-card": "Move Card to Archive", "archive-card": "Move Card to Archive",
@ -568,7 +568,7 @@
"r-top-of": "的顶部", "r-top-of": "的顶部",
"r-bottom-of": "的尾部", "r-bottom-of": "的尾部",
"r-its-list": "其清单", "r-its-list": "其清单",
"r-archive": "Move to Archive", "r-archive": "归档",
"r-unarchive": "Restore from Archive", "r-unarchive": "Restore from Archive",
"r-card": "卡片", "r-card": "卡片",
"r-add": "添加", "r-add": "添加",

View file

@ -239,5 +239,35 @@ if (Meteor.isServer) {
cas: isCasEnabled(), cas: isCasEnabled(),
}; };
}, },
getDefaultAuthenticationMethod() {
return process.env.DEFAULT_AUTHENTICATION_METHOD;
},
// TODO: patch error : did not check all arguments during call
logoutWithTimer(userId) {
if (process.env.LOGOUT_WITH_TIMER) {
Jobs.run('logOut', userId, {
in: {
days: process.env.LOGOUT_IN,
},
on: {
hour: process.env.LOGOUT_ON_HOURS,
minute: process.env.LOGOUT_ON_MINUTES,
},
priority: 1,
});
}
},
});
Jobs.register({
logOut(userId) {
Meteor.users.update(
{_id: userId},
{$set: {'services.resume.loginTokens': []}}
);
this.success();
},
}); });
} }

View file

@ -520,10 +520,10 @@ if (Meteor.isServer) {
} }
const disableRegistration = Settings.findOne().disableRegistration; const disableRegistration = Settings.findOne().disableRegistration;
// If ldap, bypass the inviation code if the self registration isn't allowed. if (!disableRegistration) {
// TODO : pay attention if ldap field in the user model change to another content ex : ldap field to connection_type if (options.ldap) {
if (options.ldap || !disableRegistration) { user.authenticationMethod = 'ldap';
user.authenticationMethod = 'ldap'; }
return user; return user;
} }

View file

@ -1,6 +1,6 @@
{ {
"name": "wekan", "name": "wekan",
"version": "v1.78.0", "version": "v1.79.0",
"description": "Open-Source kanban", "description": "Open-Source kanban",
"private": true, "private": true,
"scripts": { "scripts": {

View file

@ -22,6 +22,9 @@
# If you disable Wekan API, Export Board does not work. # If you disable Wekan API, Export Board does not work.
export WITH_API='true' export WITH_API='true'
#--------------------------------------------- #---------------------------------------------
# CORS: Set Access-Control-Allow-Origin header. Example: *
#- CORS=*
#---------------------------------------------
## Optional: Integration with Matomo https://matomo.org that is installed to your server ## Optional: Integration with Matomo https://matomo.org that is installed to your server
## The address of the server where Matomo is hosted: ## The address of the server where Matomo is hosted:
##export MATOMO_ADDRESS=https://example.com/matomo ##export MATOMO_ADDRESS=https://example.com/matomo
@ -187,6 +190,17 @@
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example : # example :
#export LDAP_DEFAULT_DOMAIN= #export LDAP_DEFAULT_DOMAIN=
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
# example : LOGOUT_WITH_TIMER=true
#- LOGOUT_WITH_TIMER=
# LOGOUT_IN : The number of days
# example : LOGOUT_IN=1
#- LOGOUT_IN=
#- LOGOUT_ON_HOURS=
# LOGOUT_ON_MINUTES : The number of minutes
# example : LOGOUT_ON_MINUTES=55
#- LOGOUT_ON_MINUTES=
node main.js & >> ~/repos/wekan.log node main.js & >> ~/repos/wekan.log
cd ~/repos cd ~/repos
#done #done

View file

@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"), appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user. # The name of the app as it is displayed to the user.
appVersion = 180, appVersion = 181,
# Increment this for every release. # Increment this for every release.
appMarketingVersion = (defaultText = "1.78.0~2018-11-20"), appMarketingVersion = (defaultText = "1.79.0~2018-12-03"),
# Human-readable presentation of the app version. # Human-readable presentation of the app version.
minUpgradableAppVersion = 0, minUpgradableAppVersion = 0,

11
server/cors.js Normal file
View file

@ -0,0 +1,11 @@
Meteor.startup(() => {
if ( process.env.CORS ) {
// Listen to incoming HTTP requests, can only be used on the server
WebApp.rawConnectHandlers.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', process.env.CORS);
return next();
});
}
});

View file

@ -22,6 +22,7 @@ Meteor.publish('user-authenticationMethod', function(match) {
check(match, String); check(match, String);
return Users.find({$or: [{_id: match}, {email: match}, {username: match}]}, { return Users.find({$or: [{_id: match}, {email: match}, {username: match}]}, {
fields: { fields: {
'_id': 1,
'authenticationMethod': 1, 'authenticationMethod': 1,
}, },
}); });

View file

@ -3,7 +3,7 @@
# All supported keys are defined here together with descriptions and default values # All supported keys are defined here together with descriptions and default values
# list of supported keys # list of supported keys
keys="MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN" keys="MONGODB_BIND_UNIX_SOCKET MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API CORS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_BASEDN LDAP_LOGIN_FALLBACK LDAP_RECONNECT LDAP_TIMEOUT LDAP_IDLE_TIMEOUT LDAP_CONNECT_TIMEOUT LDAP_AUTHENTIFICATION LDAP_AUTHENTIFICATION_USERDN LDAP_AUTHENTIFICATION_PASSWORD LDAP_LOG_ENABLED LDAP_BACKGROUND_SYNC LDAP_BACKGROUND_SYNC_INTERVAL LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS LDAP_ENCRYPTION LDAP_CA_CERT LDAP_REJECT_UNAUTHORIZED LDAP_USER_SEARCH_FILTER LDAP_USER_SEARCH_SCOPE LDAP_USER_SEARCH_FIELD LDAP_SEARCH_PAGE_SIZE LDAP_SEARCH_SIZE_LIMIT LDAP_GROUP_FILTER_ENABLE LDAP_GROUP_FILTER_OBJECTCLASS LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT LDAP_GROUP_FILTER_GROUP_NAME LDAP_UNIQUE_IDENTIFIER_FIELD LDAP_UTF8_NAMES_SLUGIFY LDAP_USERNAME_FIELD LDAP_FULLNAME_FIELD LDAP_MERGE_EXISTING_USERS LDAP_SYNC_USER_DATA LDAP_SYNC_USER_DATA_FIELDMAP LDAP_SYNC_GROUP_ROLES LDAP_DEFAULT_DOMAIN LOGOUT_WITH_TIMER, LOGOUT_IN, LOGOUT_ON_HOURS, LOGOUT_ON_MINUTES"
# default values # default values
DESCRIPTION_MONGODB_BIND_UNIX_SOCKET="mongodb binding unix socket:\n"\ DESCRIPTION_MONGODB_BIND_UNIX_SOCKET="mongodb binding unix socket:\n"\
@ -52,6 +52,10 @@ DESCRIPTION_WITH_API="Enable/disable the api of wekan"
DEFAULT_WITH_API="true" DEFAULT_WITH_API="true"
KEY_WITH_API="with-api" KEY_WITH_API="with-api"
DESCRIPTION_CORS="Enable/disable CORS: Set Access-Control-Allow-Origin header. Example: *"
DEFAULT_CORS=""
KEY_CORS="cors"
DESCRIPTION_MATOMO_ADDRESS="The address of the server where matomo is hosted" DESCRIPTION_MATOMO_ADDRESS="The address of the server where matomo is hosted"
DEFAULT_MATOMO_ADDRESS="" DEFAULT_MATOMO_ADDRESS=""
KEY_MATOMO_ADDRESS="matomo-address" KEY_MATOMO_ADDRESS="matomo-address"
@ -269,3 +273,19 @@ KEY_LDAP_SYNC_GROUP_ROLES="ldap-sync-group-roles"
DESCRIPTION_LDAP_DEFAULT_DOMAIN="The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP" DESCRIPTION_LDAP_DEFAULT_DOMAIN="The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP"
DEFAULT_LDAP_DEFAULT_DOMAIN="" DEFAULT_LDAP_DEFAULT_DOMAIN=""
KEY_LDAP_DEFAULT_DOMAIN="ldap-default-domain" KEY_LDAP_DEFAULT_DOMAIN="ldap-default-domain"
DESCRIPTION_LOGOUT_WITH_TIMER="Enables or not the option logout with timer"
DEFAULT_LOGOUT_WITH_TIMER="false"
KEY_LOGOUT_WITH_TIMER="logout-with-timer"
DESCRIPTION_LOGOUT_IN="The number of days"
DEFAULT_LOGOUT_IN=""
KEY_LOGOUT_IN="logout-in"
DESCRIPTION_LOGOUT_ON_HOURS="The number of hours"
DEFAULT_LOGOUT_ON_HOURS=""
KEY_LOGOUT_ON_HOURS="logout-on-hours"
DESCRIPTION_LOGOUT_ON_MINUTES="The number of minutes"
DEFAULT_LOGOUT_ON_MINUTES=""
KEY_LOGOUT_ON_MINUTES="logout-on-minutes"

View file

@ -33,6 +33,11 @@ echo -e "\t$ snap set $SNAP_NAME WITH_API='true'"
echo -e "\t-Disable the API:" echo -e "\t-Disable the API:"
echo -e "\t$ snap set $SNAP_NAME WITH_API='false'" echo -e "\t$ snap set $SNAP_NAME WITH_API='false'"
echo -e "\n" echo -e "\n"
echo -e "To enable the CORS of wekan, to set Access-Control-Allow-Origin header:"
echo -e "\t$ snap set $SNAP_NAME CORS='*'"
echo -e "\t-Disable the CORS:"
echo -e "\t$ snap set $SNAP_NAME CORS=''"
echo -e "\n"
echo -e "Enable browser policy and allow one trusted URL that can have iframe that has Wekan embedded inside." echo -e "Enable browser policy and allow one trusted URL that can have iframe that has Wekan embedded inside."
echo -e "\t\t Setting this to false is not recommended, it also disables all other browser policy protections" echo -e "\t\t Setting this to false is not recommended, it also disables all other browser policy protections"
echo -e "\t\t and allows all iframing etc. See wekan/server/policy.js" echo -e "\t\t and allows all iframing etc. See wekan/server/policy.js"
@ -249,6 +254,22 @@ echo -e "Ldap Default Domain."
echo -e "The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP:" echo -e "The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP:"
echo -e "\t$ snap set $SNAP_NAME LDAP_DEFAULT_DOMAIN=''" echo -e "\t$ snap set $SNAP_NAME LDAP_DEFAULT_DOMAIN=''"
echo -e "\n" echo -e "\n"
echo -e "Logout with timer."
echo -e "Enable or not the option that allows to disconnect an user after a given time:"
echo -e "\t$ snap set $SNAP_NAME LOGOUT_WITH_TIMER='true'"
echo -e "\n"
echo -e "Logout in."
echo -e "Logout in how many days:"
echo -e "\t$ snap set $SNAP_NAME LOGOUT_IN='1'"
echo -e "\n"
echo -e "Logout on hours."
echo -e "Logout in how many hours:"
echo -e "\t$ snap set $SNAP_NAME LOGOUT_ON_HOURS='9'"
echo -e "\n"
echo -e "Logout on minutes."
echo -e "Logout in how many minutes:"
echo -e "\t$ snap set $SNAP_NAME LOGOUT_ON_MINUTES='5'"
echo -e "\n"
# parse config file for supported settings keys # parse config file for supported settings keys
echo -e "wekan supports settings keys" echo -e "wekan supports settings keys"
echo -e "values can be changed by calling\n$ snap set $SNAP_NAME <key name>='<key value>'" echo -e "values can be changed by calling\n$ snap set $SNAP_NAME <key name>='<key value>'"

View file

@ -14,7 +14,20 @@ confinement: strict
grade: stable grade: stable
architectures: architectures:
- amd64 - build-on: amd64
run-on: amd64
- build-on: i386
run-on: i386
build-error: ignore
- build-on: armhf
run-on: armhf
build-error: ignore
- build-on: arm64
run-on: arm64
build-error: ignore
plugs: plugs:
mongodb-plug: mongodb-plug:

View file

@ -4,175 +4,245 @@ SET MAIL_URL=smtp://user:pass@mailserver.example.com:25/
SET MAIL_FROM=admin@example.com SET MAIL_FROM=admin@example.com
SET PORT=2000 SET PORT=2000
REM If you disable Wekan API with false, Export Board does not work. REM # If you disable Wekan API with false, Export Board does not work.
SET WITH_API=true SET WITH_API=true
REM Optional: Integration with Matomo https://matomo.org that is installed to your server REM # Optional: Integration with Matomo https://matomo.org that is installed to your server
REM The address of the server where Matomo is hosted. REM # The address of the server where Matomo is hosted.
REM example: - MATOMO_ADDRESS=https://example.com/matomo REM # example: - MATOMO_ADDRESS=https://example.com/matomo
REM SET MATOMO_ADDRESS= REM SET MATOMO_ADDRESS=
REM The value of the site ID given in Matomo server for Wekan
REM example: - MATOMO_SITE_ID=12345 REM # The value of the site ID given in Matomo server for Wekan
REM # example: - MATOMO_SITE_ID=12345
REM SET MATOMO_SITE_ID= REM SET MATOMO_SITE_ID=
REM The option do not track which enables users to not be tracked by matomo
REM example: - MATOMO_DO_NOT_TRACK=false REM # The option do not track which enables users to not be tracked by matomo
REM # example: - MATOMO_DO_NOT_TRACK=false
REM SET MATOMO_DO_NOT_TRACK= REM SET MATOMO_DO_NOT_TRACK=
REM The option that allows matomo to retrieve the username:
REM example: MATOMO_WITH_USERNAME=true REM # The option that allows matomo to retrieve the username:
REM # example: MATOMO_WITH_USERNAME=true
REM SET MATOMO_WITH_USERNAME=false REM SET MATOMO_WITH_USERNAME=false
REM Enable browser policy and allow one trusted URL that can have iframe that has Wekan embedded inside. REM # Enable browser policy and allow one trusted URL that can have iframe that has Wekan embedded inside.
REM Setting this to false is not recommended, it also disables all other browser policy protections REM # Setting this to false is not recommended, it also disables all other browser policy protections
REM and allows all iframing etc. See wekan/server/policy.js REM # and allows all iframing etc. See wekan/server/policy.js
SET BROWSER_POLICY_ENABLED=true SET BROWSER_POLICY_ENABLED=true
REM When browser policy is enabled, HTML code at this Trusted URL can have iframe that embeds Wekan inside.
REM # When browser policy is enabled, HTML code at this Trusted URL can have iframe that embeds Wekan inside.
REM SET TRUSTED_URL= REM SET TRUSTED_URL=
REM What to send to Outgoing Webhook, or leave out. Example, that includes all that are default: cardId,listId,oldListId,boardId,comment,user,card,commentId . REM # What to send to Outgoing Webhook, or leave out. Example, that includes all that are default: cardId,listId,oldListId,boardId,comment,user,card,commentId .
REM example: WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId REM # example: WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId
REM SET WEBHOOKS_ATTRIBUTES= REM SET WEBHOOKS_ATTRIBUTES=
REM Enable the OAuth2 connection REM ------------------------------------------------------------
REM example: OAUTH2_ENABLED=true
REM # Enable the OAuth2 connection
REM # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2
REM # example: OAUTH2_ENABLED=true
REM SET OAUTH2_ENABLED=false REM SET OAUTH2_ENABLED=false
REM OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2
REM OAuth2 Client ID, for example from Rocket.Chat. Example: abcde12345 REM # OAuth2 Client ID, for example from Rocket.Chat. Example: abcde12345
REM example: OAUTH2_CLIENT_ID=abcde12345 REM # example: OAUTH2_CLIENT_ID=abcde12345
REM SET OAUTH2_CLIENT_ID= REM SET OAUTH2_CLIENT_ID=
REM OAuth2 Secret, for example from Rocket.Chat: Example: 54321abcde
REM example: OAUTH2_SECRET=54321abcde REM # OAuth2 Secret, for example from Rocket.Chat: Example: 54321abcde
REM # example: OAUTH2_SECRET=54321abcde
REM SET OAUTH2_SECRET= REM SET OAUTH2_SECRET=
REM OAuth2 Server URL, for example Rocket.Chat. Example: https://chat.example.com
REM example: OAUTH2_SERVER_URL=https://chat.example.com REM # OAuth2 Server URL, for example Rocket.Chat. Example: https://chat.example.com
REM # example: OAUTH2_SERVER_URL=https://chat.example.com
REM SET OAUTH2_SERVER_URL= REM SET OAUTH2_SERVER_URL=
REM OAuth2 Authorization Endpoint. Example: /oauth/authorize
REM example: OAUTH2_AUTH_ENDPOINT=/oauth/authorize REM # OAuth2 Authorization Endpoint. Example: /oauth/authorize
REM # example: OAUTH2_AUTH_ENDPOINT=/oauth/authorize
REM SET OAUTH2_AUTH_ENDPOINT= REM SET OAUTH2_AUTH_ENDPOINT=
REM OAuth2 Userinfo Endpoint. Example: /oauth/userinfo
REM example: OAUTH2_USERINFO_ENDPOINT=/oauth/userinfo REM # OAuth2 Userinfo Endpoint. Example: /oauth/userinfo
REM # example: OAUTH2_USERINFO_ENDPOINT=/oauth/userinfo
REM SET OAUTH2_USERINFO_ENDPOINT= REM SET OAUTH2_USERINFO_ENDPOINT=
REM OAuth2 Token Endpoint. Example: /oauth/token
REM example: OAUTH2_TOKEN_ENDPOINT=/oauth/token REM # OAuth2 Token Endpoint. Example: /oauth/token
REM # example: OAUTH2_TOKEN_ENDPOINT=/oauth/token
REM SET OAUTH2_TOKEN_ENDPOINT= REM SET OAUTH2_TOKEN_ENDPOINT=
REM LDAP_ENABLE : Enable or not the connection by the LDAP REM ------------------------------------------------------------
REM example : LDAP_ENABLE=true
REM # LDAP_ENABLE : Enable or not the connection by the LDAP
REM # example : LDAP_ENABLE=true
REM SET LDAP_ENABLE=false REM SET LDAP_ENABLE=false
REM LDAP_PORT : The port of the LDAP server
REM example : LDAP_PORT=389 REM # LDAP_PORT : The port of the LDAP server
REM # example : LDAP_PORT=389
REM SET LDAP_PORT=389 REM SET LDAP_PORT=389
REM LDAP_HOST : The host server for the LDAP server
REM example : LDAP_HOST=localhost REM # LDAP_HOST : The host server for the LDAP server
REM # example : LDAP_HOST=localhost
REM SET LDAP_HOST= REM SET LDAP_HOST=
REM LDAP_BASEDN : The base DN for the LDAP Tree
REM example : LDAP_BASEDN=ou=user,dc=example,dc=org REM # LDAP_BASEDN : The base DN for the LDAP Tree
REM # example : LDAP_BASEDN=ou=user,dc=example,dc=org
REM SET LDAP_BASEDN= REM SET LDAP_BASEDN=
REM LDAP_LOGIN_FALLBACK : Fallback on the default authentication method
REM example : LDAP_LOGIN_FALLBACK=true REM # LDAP_LOGIN_FALLBACK : Fallback on the default authentication method
REM # example : LDAP_LOGIN_FALLBACK=true
REM SET LDAP_LOGIN_FALLBACK=false REM SET LDAP_LOGIN_FALLBACK=false
REM LDAP_RECONNECT : Reconnect to the server if the connection is lost
REM example : LDAP_RECONNECT=false REM # LDAP_RECONNECT : Reconnect to the server if the connection is lost
REM # example : LDAP_RECONNECT=false
REM SET LDAP_RECONNECT=true REM SET LDAP_RECONNECT=true
REM LDAP_TIMEOUT : Overall timeout, in milliseconds
REM example : LDAP_TIMEOUT=12345 REM # LDAP_TIMEOUT : Overall timeout, in milliseconds
REM # example : LDAP_TIMEOUT=12345
REM SET LDAP_TIMEOUT=10000 REM SET LDAP_TIMEOUT=10000
REM LDAP_IDLE_TIMEOUT : Specifies the timeout for idle LDAP connections in milliseconds
REM example : LDAP_IDLE_TIMEOUT=12345 REM # LDAP_IDLE_TIMEOUT : Specifies the timeout for idle LDAP connections in milliseconds
REM # example : LDAP_IDLE_TIMEOUT=12345
REM SET LDAP_IDLE_TIMEOUT=10000 REM SET LDAP_IDLE_TIMEOUT=10000
REM LDAP_CONNECT_TIMEOUT : Connection timeout, in milliseconds
REM example : LDAP_CONNECT_TIMEOUT=12345 REM # LDAP_CONNECT_TIMEOUT : Connection timeout, in milliseconds
REM # example : LDAP_CONNECT_TIMEOUT=12345
REM SET LDAP_CONNECT_TIMEOUT=10000 REM SET LDAP_CONNECT_TIMEOUT=10000
REM LDAP_AUTHENTIFICATION : If the LDAP needs a user account to search
REM example : LDAP_AUTHENTIFICATION=true REM # LDAP_AUTHENTIFICATION : If the LDAP needs a user account to search
REM # example : LDAP_AUTHENTIFICATION=true
REM SET LDAP_AUTHENTIFICATION=false REM SET LDAP_AUTHENTIFICATION=false
REM LDAP_AUTHENTIFICATION_USERDN : The search user DN
REM example : LDAP_AUTHENTIFICATION_USERDN=cn=admin,dc=example,dc=org REM # LDAP_AUTHENTIFICATION_USERDN : The search user DN
REM # example: LDAP_AUTHENTIFICATION_USERDN=cn=admin,dc=example,dc=org
REM SET LDAP_AUTHENTIFICATION_USERDN= REM SET LDAP_AUTHENTIFICATION_USERDN=
REM LDAP_AUTHENTIFICATION_PASSWORD : The password for the search user
REM example : AUTHENTIFICATION_PASSWORD=admin REM # LDAP_AUTHENTIFICATION_PASSWORD : The password for the search user
REM # example : AUTHENTIFICATION_PASSWORD=admin
REM SET LDAP_AUTHENTIFICATION_PASSWORD= REM SET LDAP_AUTHENTIFICATION_PASSWORD=
REM LDAP_LOG_ENABLED : Enable logs for the module
REM example : LDAP_LOG_ENABLED=true REM # LDAP_LOG_ENABLED : Enable logs for the module
REM # example : LDAP_LOG_ENABLED=true
REM SET LDAP_LOG_ENABLED=false REM SET LDAP_LOG_ENABLED=false
REM LDAP_BACKGROUND_SYNC : If the sync of the users should be done in the background
REM example : LDAP_BACKGROUND_SYNC=true REM # LDAP_BACKGROUND_SYNC : If the sync of the users should be done in the background
REM # example : LDAP_BACKGROUND_SYNC=true
REM SET LDAP_BACKGROUND_SYNC=false REM SET LDAP_BACKGROUND_SYNC=false
REM LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
REM example : LDAP_BACKGROUND_SYNC_INTERVAL=12345 REM # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
REM # example : LDAP_BACKGROUND_SYNC_INTERVAL=12345
REM SET LDAP_BACKGROUND_SYNC_INTERVAL=100 REM SET LDAP_BACKGROUND_SYNC_INTERVAL=100
REM LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED :
REM example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true REM # LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED :
REM # example : LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true
REM SET LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false REM SET LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false
REM LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS :
REM example : LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true REM # LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS :
REM # example : LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true
REM SET LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false REM SET LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false
REM LDAP_ENCRYPTION : If using LDAPS
REM example : LDAP_ENCRYPTION=ssl REM # LDAP_ENCRYPTION : If using LDAPS
REM # example : LDAP_ENCRYPTION=ssl
REM SET LDAP_ENCRYPTION=false REM SET LDAP_ENCRYPTION=false
REM LDAP_CA_CERT : The certification for the LDAPS server. Certificate needs to be included in this docker-compose.yml file.
REM example : LDAP_CA_CERT=-----BEGIN CERTIFICATE-----MIIE+zCCA+OgAwIBAgIkAhwR/6TVLmdRY6hHxvUFWc0+Enmu/Hu6cj+G2FIdAgIC...-----END CERTIFICATE----- REM # LDAP_CA_CERT : The certification for the LDAPS server. Certificate needs to be included in this docker-compose.yml file.
REM # example : LDAP_CA_CERT=-----BEGIN CERTIFICATE-----MIIE+zCCA+OgAwIBAgIkAhwR/6TVLmdRY6hHxvUFWc0+Enmu/Hu6cj+G2FIdAgIC...-----END CERTIFICATE-----
REM SET LDAP_CA_CERT= REM SET LDAP_CA_CERT=
REM LDAP_REJECT_UNAUTHORIZED : Reject Unauthorized Certificate
REM example : LDAP_REJECT_UNAUTHORIZED=true REM # LDAP_REJECT_UNAUTHORIZED : Reject Unauthorized Certificate
REM # example : LDAP_REJECT_UNAUTHORIZED=true
REM SET LDAP_REJECT_UNAUTHORIZED=false REM SET LDAP_REJECT_UNAUTHORIZED=false
REM LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed
REM example : LDAP_USER_SEARCH_FILTER= REM # LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed
REM # example : LDAP_USER_SEARCH_FILTER=
REM SET LDAP_USER_SEARCH_FILTER= REM SET LDAP_USER_SEARCH_FILTER=
REM LDAP_USER_SEARCH_SCOPE : base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree)
REM example : LDAP_USER_SEARCH_SCOPE=one REM # LDAP_USER_SEARCH_SCOPE : base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree)
REM # example : LDAP_USER_SEARCH_SCOPE=one
REM SET LDAP_USER_SEARCH_SCOPE= REM SET LDAP_USER_SEARCH_SCOPE=
REM LDAP_USER_SEARCH_FIELD : Which field is used to find the user
REM example : LDAP_USER_SEARCH_FIELD=uid REM # LDAP_USER_SEARCH_FIELD : Which field is used to find the user
REM # example : LDAP_USER_SEARCH_FIELD=uid
REM SET LDAP_USER_SEARCH_FIELD= REM SET LDAP_USER_SEARCH_FIELD=
REM LDAP_SEARCH_PAGE_SIZE : Used for pagination (0=unlimited)
REM example : LDAP_SEARCH_PAGE_SIZE=12345 REM # LDAP_SEARCH_PAGE_SIZE : Used for pagination (0=unlimited)
REM # example : LDAP_SEARCH_PAGE_SIZE=12345
REM SET LDAP_SEARCH_PAGE_SIZE=0 REM SET LDAP_SEARCH_PAGE_SIZE=0
REM LDAP_SEARCH_SIZE_LIMIT : The limit number of entries (0=unlimited)
REM example : LDAP_SEARCH_SIZE_LIMIT=12345 REM # LDAP_SEARCH_SIZE_LIMIT : The limit number of entries (0=unlimited)
REM #33 example : LDAP_SEARCH_SIZE_LIMIT=12345
REM SET LDAP_SEARCH_SIZE_LIMIT=0 REM SET LDAP_SEARCH_SIZE_LIMIT=0
REM LDAP_GROUP_FILTER_ENABLE : Enable group filtering
REM example : LDAP_GROUP_FILTER_ENABLE=true REM # LDAP_GROUP_FILTER_ENABLE : Enable group filtering
REM # example : LDAP_GROUP_FILTER_ENABLE=true
REM SET LDAP_GROUP_FILTER_ENABLE=false REM SET LDAP_GROUP_FILTER_ENABLE=false
REM LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering
REM example : LDAP_GROUP_FILTER_OBJECTCLASS=group REM # LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering
REM # example : LDAP_GROUP_FILTER_OBJECTCLASS=group
REM SET LDAP_GROUP_FILTER_OBJECTCLASS= REM SET LDAP_GROUP_FILTER_OBJECTCLASS=
REM LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE :
REM example : REM # LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE :
REM # example :
REM SET LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE= REM SET LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE=
REM LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE :
REM example : REM # LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE :
REM # example :
REM SET LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE= REM SET LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE=
REM LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT :
REM example : REM # LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT :
REM # example :
REM SET LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT= REM SET LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT=
REM LDAP_GROUP_FILTER_GROUP_NAME :
REM example : REM # LDAP_GROUP_FILTER_GROUP_NAME :
REM # example :
REM SET LDAP_GROUP_FILTER_GROUP_NAME= REM SET LDAP_GROUP_FILTER_GROUP_NAME=
REM LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier)
REM example : LDAP_UNIQUE_IDENTIFIER_FIELD=guid REM # LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier)
REM # example : LDAP_UNIQUE_IDENTIFIER_FIELD=guid
REM SET LDAP_UNIQUE_IDENTIFIER_FIELD= REM SET LDAP_UNIQUE_IDENTIFIER_FIELD=
REM LDAP_UTF8_NAMES_SLUGIFY : Convert the username to utf8
REM example : LDAP_UTF8_NAMES_SLUGIFY=false REM # LDAP_UTF8_NAMES_SLUGIFY : Convert the username to utf8
REM # example : LDAP_UTF8_NAMES_SLUGIFY=false
REM SET LDAP_UTF8_NAMES_SLUGIFY=true REM SET LDAP_UTF8_NAMES_SLUGIFY=true
REM LDAP_USERNAME_FIELD : Which field contains the ldap username
REM example : LDAP_USERNAME_FIELD=username REM # LDAP_USERNAME_FIELD : Which field contains the ldap username
REM # example : LDAP_USERNAME_FIELD=username
REM SET LDAP_USERNAME_FIELD= REM SET LDAP_USERNAME_FIELD=
REM LDAP_MERGE_EXISTING_USERS :
REM example : LDAP_MERGE_EXISTING_USERS=true REM # LDAP_MERGE_EXISTING_USERS :
REM # example : LDAP_MERGE_EXISTING_USERS=true
REM SET LDAP_MERGE_EXISTING_USERS=false REM SET LDAP_MERGE_EXISTING_USERS=false
REM LDAP_SYNC_USER_DATA :
REM example : LDAP_SYNC_USER_DATA=true REM # LDAP_SYNC_USER_DATA :
REM # example : LDAP_SYNC_USER_DATA=true
REM SET LDAP_SYNC_USER_DATA=false REM SET LDAP_SYNC_USER_DATA=false
REM LDAP_SYNC_USER_DATA_FIELDMAP :
REM example : LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name", "mail":"email"} REM # LDAP_SYNC_USER_DATA_FIELDMAP :
REM # example : LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name", "mail":"email"}
REM SET LDAP_SYNC_USER_DATA_FIELDMAP= REM SET LDAP_SYNC_USER_DATA_FIELDMAP=
REM LDAP_SYNC_GROUP_ROLES :
REM example : REM # LDAP_SYNC_GROUP_ROLES :
REM SET LDAP_SYNC_GROUP_ROLES= REM # example :
REM LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP REM # SET LDAP_SYNC_GROUP_ROLES=
REM example :
REM # LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
REM # example :
REM SET LDAP_DEFAULT_DOMAIN= REM SET LDAP_DEFAULT_DOMAIN=
REM ------------------------------------------------
REM # LOGOUT_WITH_TIMER : Enables or not the option logout with timer
REM # example : LOGOUT_WITH_TIMER=true
REM SET LOGOUT_WITH_TIMER=
REM # LOGOUT_IN : The number of days
REM # example : LOGOUT_IN=1
REM SET LOGOUT_IN=
REM # LOGOUT_ON_HOURS : The number of hours
REM # example : LOGOUT_ON_HOURS=9
REM SET LOGOUT_ON_HOURS=
REM # LOGOUT_ON_MINUTES : The number of minutes
REM # example : LOGOUT_ON_MINUTES=55
REM SET LOGOUT_ON_MINUTES=
cd .build\bundle cd .build\bundle
node main.js node main.js
cd ..\.. cd ..\..

View file

@ -1,206 +1,225 @@
#!/bin/bash #!/bin/bash
function wekan_repo_check(){ function wekan_repo_check(){
git_remotes="$(git remote show 2>/dev/null)" git_remotes="$(git remote show 2>/dev/null)"
res="" res=""
for i in $git_remotes; do for i in $git_remotes; do
res="$(git remote get-url $i | sed 's/.*wekan\/wekan.*/wekan\/wekan/')" res="$(git remote get-url $i | sed 's/.*wekan\/wekan.*/wekan\/wekan/')"
if [[ "$res" == "wekan/wekan" ]]; then if [[ "$res" == "wekan/wekan" ]]; then
break break
fi fi
done done
if [[ "$res" != "wekan/wekan" ]]; then if [[ "$res" != "wekan/wekan" ]]; then
echo "$PWD is not a wekan repository" echo "$PWD is not a wekan repository"
exit; exit;
fi fi
} }
# If you want to restart even on crash, uncomment while and done lines. # If you want to restart even on crash, uncomment while and done lines.
#while true; do #while true; do
wekan_repo_check wekan_repo_check
cd .build/bundle cd .build/bundle
export MONGO_URL='mongodb://127.0.0.1:27019/wekan' export MONGO_URL='mongodb://127.0.0.1:27019/wekan'
# Production: https://example.com/wekan #---------------------------------------------
# Local: http://localhost:2000 # Production: https://example.com/wekan
#export ipaddress=$(ifdata -pa eth0) # Local: http://localhost:2000
export ROOT_URL='http://localhost:2000' #export ipaddress=$(ifdata -pa eth0)
# https://github.com/wekan/wekan/wiki/Troubleshooting-Mail export ROOT_URL='http://localhost:2000'
# https://github.com/wekan/wekan-mongodb/blob/master/docker-compose.yml #---------------------------------------------
export MAIL_URL='smtp://user:pass@mailserver.example.com:25/' # https://github.com/wekan/wekan/wiki/Troubleshooting-Mail
#export KADIRA_OPTIONS_ENDPOINT=http://127.0.0.1:11011 # https://github.com/wekan/wekan-mongodb/blob/master/docker-compose.yml
# This is local port where Wekan Node.js runs, same as below on Caddyfile settings. export MAIL_URL='smtp://user:pass@mailserver.example.com:25/'
export PORT=2000 #---------------------------------------------
# Wekan Export Board works when WITH_API=true. #export KADIRA_OPTIONS_ENDPOINT=http://127.0.0.1:11011
# If you disable Wekan API with false, Export Board does not work. #---------------------------------------------
export WITH_API='true' # This is local port where Wekan Node.js runs, same as below on Caddyfile settings.
#--------------------------------------------- export PORT=2000
## Optional: Integration with Matomo https://matomo.org that is installed to your server #---------------------------------------------
## The address of the server where Matomo is hosted: # Wekan Export Board works when WITH_API=true.
##export MATOMO_ADDRESS=https://example.com/matomo # If you disable Wekan API with false, Export Board does not work.
#export MATOMO_ADDRESS= export WITH_API='true'
## The value of the site ID given in Matomo server for Wekan #---------------------------------------------
# Example: export MATOMO_SITE_ID=123456789 # CORS: Set Access-Control-Allow-Origin header. Example: *
#export MATOMO_SITE_ID='' #- CORS=*
## The option do not track which enables users to not be tracked by matomo" #---------------------------------------------
#Example: export MATOMO_DO_NOT_TRACK=false ## Optional: Integration with Matomo https://matomo.org that is installed to your server
#export MATOMO_DO_NOT_TRACK=true ## The address of the server where Matomo is hosted:
## The option that allows matomo to retrieve the username: ##export MATOMO_ADDRESS=https://example.com/matomo
# Example: export MATOMO_WITH_USERNAME=true #export MATOMO_ADDRESS=
#export MATOMO_WITH_USERNAME='false' ## The value of the site ID given in Matomo server for Wekan
# Enable browser policy and allow one trusted URL that can have iframe that has Wekan embedded inside. # Example: export MATOMO_SITE_ID=123456789
# Setting this to false is not recommended, it also disables all other browser policy protections #export MATOMO_SITE_ID=''
# and allows all iframing etc. See wekan/server/policy.js ## The option do not track which enables users to not be tracked by matomo"
# Default value: true #Example: export MATOMO_DO_NOT_TRACK=false
export BROWSER_POLICY_ENABLED=true #export MATOMO_DO_NOT_TRACK=true
# When browser policy is enabled, HTML code at this Trusted URL can have iframe that embeds Wekan inside. ## The option that allows matomo to retrieve the username:
# Example: export TRUSTED_URL=http://example.com # Example: export MATOMO_WITH_USERNAME=true
export TRUSTED_URL='' #export MATOMO_WITH_USERNAME='false'
# What to send to Outgoing Webhook, or leave out. Example, that includes all that are default: cardId,listId,oldListId,boardId,comment,user,card,commentId . # Enable browser policy and allow one trusted URL that can have iframe that has Wekan embedded inside.
# Example: export WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId # Setting this to false is not recommended, it also disables all other browser policy protections
export WEBHOOKS_ATTRIBUTES='' # and allows all iframing etc. See wekan/server/policy.js
#--------------------------------------------- # Default value: true
# OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2 export BROWSER_POLICY_ENABLED=true
# OAuth2 Client ID, for example from Rocket.Chat. Example: abcde12345 # When browser policy is enabled, HTML code at this Trusted URL can have iframe that embeds Wekan inside.
# example: export OAUTH2_CLIENT_ID=abcde12345 # Example: export TRUSTED_URL=http://example.com
#export OAUTH2_CLIENT_ID='' export TRUSTED_URL=''
# OAuth2 Secret, for example from Rocket.Chat: Example: 54321abcde # What to send to Outgoing Webhook, or leave out. Example, that includes all that are default: cardId,listId,oldListId,boardId,comment,user,card,commentId .
# example: export OAUTH2_SECRET=54321abcde # Example: export WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId
#export OAUTH2_SECRET='' export WEBHOOKS_ATTRIBUTES=''
# OAuth2 Server URL, for example Rocket.Chat. Example: https://chat.example.com #---------------------------------------------
# example: export OAUTH2_SERVER_URL=https://chat.example.com # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2
#export OAUTH2_SERVER_URL='' # OAuth2 Client ID, for example from Rocket.Chat. Example: abcde12345
# OAuth2 Authorization Endpoint. Example: /oauth/authorize # example: export OAUTH2_CLIENT_ID=abcde12345
# example: export OAUTH2_AUTH_ENDPOINT=/oauth/authorize #export OAUTH2_CLIENT_ID=''
#export OAUTH2_AUTH_ENDPOINT='' # OAuth2 Secret, for example from Rocket.Chat: Example: 54321abcde
# OAuth2 Userinfo Endpoint. Example: /oauth/userinfo # example: export OAUTH2_SECRET=54321abcde
# example: export OAUTH2_USERINFO_ENDPOINT=/oauth/userinfo #export OAUTH2_SECRET=''
#export OAUTH2_USERINFO_ENDPOINT='' # OAuth2 Server URL, for example Rocket.Chat. Example: https://chat.example.com
# OAuth2 Token Endpoint. Example: /oauth/token # example: export OAUTH2_SERVER_URL=https://chat.example.com
# example: export OAUTH2_TOKEN_ENDPOINT=/oauth/token #export OAUTH2_SERVER_URL=''
#export OAUTH2_TOKEN_ENDPOINT='' # OAuth2 Authorization Endpoint. Example: /oauth/authorize
#--------------------------------------------- # example: export OAUTH2_AUTH_ENDPOINT=/oauth/authorize
# LDAP_ENABLE : Enable or not the connection by the LDAP #export OAUTH2_AUTH_ENDPOINT=''
# example : export LDAP_ENABLE=true # OAuth2 Userinfo Endpoint. Example: /oauth/userinfo
#export LDAP_ENABLE=false # example: export OAUTH2_USERINFO_ENDPOINT=/oauth/userinfo
# LDAP_PORT : The port of the LDAP server #export OAUTH2_USERINFO_ENDPOINT=''
# example : export LDAP_PORT=389 # OAuth2 Token Endpoint. Example: /oauth/token
#export LDAP_PORT=389 # example: export OAUTH2_TOKEN_ENDPOINT=/oauth/token
# LDAP_HOST : The host server for the LDAP server #export OAUTH2_TOKEN_ENDPOINT=''
# example : export LDAP_HOST=localhost #---------------------------------------------
#export LDAP_HOST= # LDAP_ENABLE : Enable or not the connection by the LDAP
# LDAP_BASEDN : The base DN for the LDAP Tree # example : export LDAP_ENABLE=true
# example : export LDAP_BASEDN=ou=user,dc=example,dc=org #export LDAP_ENABLE=false
#export LDAP_BASEDN= # LDAP_PORT : The port of the LDAP server
# LDAP_LOGIN_FALLBACK : Fallback on the default authentication method # example : export LDAP_PORT=389
# example : export LDAP_LOGIN_FALLBACK=true #export LDAP_PORT=389
#export LDAP_LOGIN_FALLBACK=false # LDAP_HOST : The host server for the LDAP server
# LDAP_RECONNECT : Reconnect to the server if the connection is lost # example : export LDAP_HOST=localhost
# example : export LDAP_RECONNECT=false #export LDAP_HOST=
#export LDAP_RECONNECT=true # LDAP_BASEDN : The base DN for the LDAP Tree
# LDAP_TIMEOUT : Overall timeout, in milliseconds # example : export LDAP_BASEDN=ou=user,dc=example,dc=org
# example : export LDAP_TIMEOUT=12345 #export LDAP_BASEDN=
#export LDAP_TIMEOUT=10000 # LDAP_LOGIN_FALLBACK : Fallback on the default authentication method
# LDAP_IDLE_TIMEOUT : Specifies the timeout for idle LDAP connections in milliseconds # example : export LDAP_LOGIN_FALLBACK=true
# example : export LDAP_IDLE_TIMEOUT=12345 #export LDAP_LOGIN_FALLBACK=false
#export LDAP_IDLE_TIMEOUT=10000 # LDAP_RECONNECT : Reconnect to the server if the connection is lost
# LDAP_CONNECT_TIMEOUT : Connection timeout, in milliseconds # example : export LDAP_RECONNECT=false
# example : export LDAP_CONNECT_TIMEOUT=12345 #export LDAP_RECONNECT=true
#export LDAP_CONNECT_TIMEOUT=10000 # LDAP_TIMEOUT : Overall timeout, in milliseconds
# LDAP_AUTHENTIFICATION : If the LDAP needs a user account to search # example : export LDAP_TIMEOUT=12345
# example : export LDAP_AUTHENTIFICATION=true #export LDAP_TIMEOUT=10000
#export LDAP_AUTHENTIFICATION=false # LDAP_IDLE_TIMEOUT : Specifies the timeout for idle LDAP connections in milliseconds
# LDAP_AUTHENTIFICATION_USERDN : The search user DN # example : export LDAP_IDLE_TIMEOUT=12345
# example : export LDAP_AUTHENTIFICATION_USERDN=cn=admin,dc=example,dc=org #export LDAP_IDLE_TIMEOUT=10000
#export LDAP_AUTHENTIFICATION_USERDN= # LDAP_CONNECT_TIMEOUT : Connection timeout, in milliseconds
# LDAP_AUTHENTIFICATION_PASSWORD : The password for the search user # example : export LDAP_CONNECT_TIMEOUT=12345
# example : AUTHENTIFICATION_PASSWORD=admin #export LDAP_CONNECT_TIMEOUT=10000
#export LDAP_AUTHENTIFICATION_PASSWORD= # LDAP_AUTHENTIFICATION : If the LDAP needs a user account to search
# LDAP_LOG_ENABLED : Enable logs for the module # example : export LDAP_AUTHENTIFICATION=true
# example : export LDAP_LOG_ENABLED=true #export LDAP_AUTHENTIFICATION=false
#export LDAP_LOG_ENABLED=false # LDAP_AUTHENTIFICATION_USERDN : The search user DN
# LDAP_BACKGROUND_SYNC : If the sync of the users should be done in the background # example : export LDAP_AUTHENTIFICATION_USERDN=cn=admin,dc=example,dc=org
# example : export LDAP_BACKGROUND_SYNC=true #export LDAP_AUTHENTIFICATION_USERDN=
#export LDAP_BACKGROUND_SYNC=false # LDAP_AUTHENTIFICATION_PASSWORD : The password for the search user
# LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds # example : AUTHENTIFICATION_PASSWORD=admin
# example : export LDAP_BACKGROUND_SYNC_INTERVAL=12345 #export LDAP_AUTHENTIFICATION_PASSWORD=
#export LDAP_BACKGROUND_SYNC_INTERVAL=100 # LDAP_LOG_ENABLED : Enable logs for the module
# LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED : # example : export LDAP_LOG_ENABLED=true
# example : export LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true #export LDAP_LOG_ENABLED=false
#export LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false # LDAP_BACKGROUND_SYNC : If the sync of the users should be done in the background
# LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS : # example : export LDAP_BACKGROUND_SYNC=true
# example : export LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true #export LDAP_BACKGROUND_SYNC=false
#export LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false # LDAP_BACKGROUND_SYNC_INTERVAL : At which interval does the background task sync in milliseconds
# LDAP_ENCRYPTION : If using LDAPS # example : export LDAP_BACKGROUND_SYNC_INTERVAL=12345
# example : export LDAP_ENCRYPTION=ssl #export LDAP_BACKGROUND_SYNC_INTERVAL=100
#export LDAP_ENCRYPTION=false # LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED :
# LDAP_CA_CERT : The certification for the LDAPS server. Certificate needs to be included in this docker-compose.yml file. # example : export LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=true
# example : export LDAP_CA_CERT=-----BEGIN CERTIFICATE-----MIIE+zCCA+OgAwIBAgIkAhwR/6TVLmdRY6hHxvUFWc0+Enmu/Hu6cj+G2FIdAgIC...-----END CERTIFICATE----- #export LDAP_BACKGROUND_SYNC_KEEP_EXISTANT_USERS_UPDATED=false
#export LDAP_CA_CERT= # LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS :
# LDAP_REJECT_UNAUTHORIZED : Reject Unauthorized Certificate # example : export LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=true
# example : export LDAP_REJECT_UNAUTHORIZED=true #export LDAP_BACKGROUND_SYNC_IMPORT_NEW_USERS=false
#export LDAP_REJECT_UNAUTHORIZED=false # LDAP_ENCRYPTION : If using LDAPS
# LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed # example : export LDAP_ENCRYPTION=ssl
# example : export LDAP_USER_SEARCH_FILTER= #export LDAP_ENCRYPTION=false
#export LDAP_USER_SEARCH_FILTER= # LDAP_CA_CERT : The certification for the LDAPS server. Certificate needs to be included in this docker-compose.yml file.
# LDAP_USER_SEARCH_SCOPE : base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree) # example : export LDAP_CA_CERT=-----BEGIN CERTIFICATE-----MIIE+zCCA+OgAwIBAgIkAhwR/6TVLmdRY6hHxvUFWc0+Enmu/Hu6cj+G2FIdAgIC...-----END CERTIFICATE-----
# example : export LDAP_USER_SEARCH_SCOPE=one #export LDAP_CA_CERT=
#export LDAP_USER_SEARCH_SCOPE= # LDAP_REJECT_UNAUTHORIZED : Reject Unauthorized Certificate
# LDAP_USER_SEARCH_FIELD : Which field is used to find the user # example : export LDAP_REJECT_UNAUTHORIZED=true
# example : export LDAP_USER_SEARCH_FIELD=uid #export LDAP_REJECT_UNAUTHORIZED=false
#export LDAP_USER_SEARCH_FIELD= # LDAP_USER_SEARCH_FILTER : Optional extra LDAP filters. Don't forget the outmost enclosing parentheses if needed
# LDAP_SEARCH_PAGE_SIZE : Used for pagination (0=unlimited) # example : export LDAP_USER_SEARCH_FILTER=
# example : export LDAP_SEARCH_PAGE_SIZE=12345 #export LDAP_USER_SEARCH_FILTER=
#export LDAP_SEARCH_PAGE_SIZE=0 # LDAP_USER_SEARCH_SCOPE : base (search only in the provided DN), one (search only in the provided DN and one level deep), or sub (search the whole subtree)
# LDAP_SEARCH_SIZE_LIMIT : The limit number of entries (0=unlimited) # example : export LDAP_USER_SEARCH_SCOPE=one
# example : export LDAP_SEARCH_SIZE_LIMIT=12345 #export LDAP_USER_SEARCH_SCOPE=
#export LDAP_SEARCH_SIZE_LIMIT=0 # LDAP_USER_SEARCH_FIELD : Which field is used to find the user
# LDAP_GROUP_FILTER_ENABLE : Enable group filtering # example : export LDAP_USER_SEARCH_FIELD=uid
# example : export LDAP_GROUP_FILTER_ENABLE=true #export LDAP_USER_SEARCH_FIELD=
#export LDAP_GROUP_FILTER_ENABLE=false # LDAP_SEARCH_PAGE_SIZE : Used for pagination (0=unlimited)
# LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering # example : export LDAP_SEARCH_PAGE_SIZE=12345
# example : export LDAP_GROUP_FILTER_OBJECTCLASS=group #export LDAP_SEARCH_PAGE_SIZE=0
#export LDAP_GROUP_FILTER_OBJECTCLASS= # LDAP_SEARCH_SIZE_LIMIT : The limit number of entries (0=unlimited)
# LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE : # example : export LDAP_SEARCH_SIZE_LIMIT=12345
# example : #export LDAP_SEARCH_SIZE_LIMIT=0
#export LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE= # LDAP_GROUP_FILTER_ENABLE : Enable group filtering
# LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE : # example : export LDAP_GROUP_FILTER_ENABLE=true
# example : #export LDAP_GROUP_FILTER_ENABLE=false
#export LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE= # LDAP_GROUP_FILTER_OBJECTCLASS : The object class for filtering
# LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT : # example : export LDAP_GROUP_FILTER_OBJECTCLASS=group
# example : #export LDAP_GROUP_FILTER_OBJECTCLASS=
#export LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT= # LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE :
# LDAP_GROUP_FILTER_GROUP_NAME : # example :
# example : #export LDAP_GROUP_FILTER_GROUP_ID_ATTRIBUTE=
#export LDAP_GROUP_FILTER_GROUP_NAME= # LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE :
# LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier) # example :
# example : export LDAP_UNIQUE_IDENTIFIER_FIELD=guid #export LDAP_GROUP_FILTER_GROUP_MEMBER_ATTRIBUTE=
#export LDAP_UNIQUE_IDENTIFIER_FIELD= # LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT :
# LDAP_UTF8_NAMES_SLUGIFY : Convert the username to utf8 # example :
# example : export LDAP_UTF8_NAMES_SLUGIFY=false #export LDAP_GROUP_FILTER_GROUP_MEMBER_FORMAT=
#export LDAP_UTF8_NAMES_SLUGIFY=true # LDAP_GROUP_FILTER_GROUP_NAME :
# LDAP_USERNAME_FIELD : Which field contains the ldap username # example :
# example : export LDAP_USERNAME_FIELD=username #export LDAP_GROUP_FILTER_GROUP_NAME=
#export LDAP_USERNAME_FIELD= # LDAP_UNIQUE_IDENTIFIER_FIELD : This field is sometimes class GUID (Globally Unique Identifier)
# LDAP_FULLNAME_FIELD : Which field contains the ldap fullname # example : export LDAP_UNIQUE_IDENTIFIER_FIELD=guid
# example : export LDAP_FULLNAME_FIELD=fullname #export LDAP_UNIQUE_IDENTIFIER_FIELD=
#export LDAP_FULLNAME_FIELD= # LDAP_UTF8_NAMES_SLUGIFY : Convert the username to utf8
# LDAP_MERGE_EXISTING_USERS : # example : export LDAP_UTF8_NAMES_SLUGIFY=false
# example : export LDAP_MERGE_EXISTING_USERS=true #export LDAP_UTF8_NAMES_SLUGIFY=true
#export LDAP_MERGE_EXISTING_USERS=false # LDAP_USERNAME_FIELD : Which field contains the ldap username
# LDAP_SYNC_USER_DATA : # example : export LDAP_USERNAME_FIELD=username
# example : export LDAP_SYNC_USER_DATA=true #export LDAP_USERNAME_FIELD=
#export LDAP_SYNC_USER_DATA=false # LDAP_FULLNAME_FIELD : Which field contains the ldap fullname
# LDAP_SYNC_USER_DATA_FIELDMAP : # example : export LDAP_FULLNAME_FIELD=fullname
# example : export LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name", "mail":"email"} #export LDAP_FULLNAME_FIELD=
#export LDAP_SYNC_USER_DATA_FIELDMAP= # LDAP_MERGE_EXISTING_USERS :
# LDAP_SYNC_GROUP_ROLES : # example : export LDAP_MERGE_EXISTING_USERS=true
# example : #export LDAP_MERGE_EXISTING_USERS=false
#export LDAP_SYNC_GROUP_ROLES= # LDAP_SYNC_USER_DATA :
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP # example : export LDAP_SYNC_USER_DATA=true
# example : #export LDAP_SYNC_USER_DATA=false
#export LDAP_DEFAULT_DOMAIN= # LDAP_SYNC_USER_DATA_FIELDMAP :
node main.js # example : export LDAP_SYNC_USER_DATA_FIELDMAP={"cn":"name", "mail":"email"}
# & >> ../../wekan.log #export LDAP_SYNC_USER_DATA_FIELDMAP=
cd ../.. # LDAP_SYNC_GROUP_ROLES :
# example :
#export LDAP_SYNC_GROUP_ROLES=
# LDAP_DEFAULT_DOMAIN : The default domain of the ldap it is used to create email if the field is not map correctly with the LDAP_SYNC_USER_DATA_FIELDMAP
# example :
#export LDAP_DEFAULT_DOMAIN=
# LOGOUT_WITH_TIMER : Enables or not the option logout with timer
# example : LOGOUT_WITH_TIMER=true
#- LOGOUT_WITH_TIMER=
# LOGOUT_IN : The number of days
# example : LOGOUT_IN=1
#- LOGOUT_IN=
#- LOGOUT_ON_HOURS=
# LOGOUT_ON_MINUTES : The number of minutes
# example : LOGOUT_ON_MINUTES=55
#- LOGOUT_ON_MINUTES=
node main.js
# & >> ../../wekan.log
cd ../..
#done #done