merge with master

This commit is contained in:
viehlieb 2022-07-18 15:09:18 +02:00
commit b36920e657
32 changed files with 764 additions and 316 deletions

View file

@ -10,7 +10,7 @@ ENV DEBIAN_FRONTEND=noninteractive
ENV \
DEBUG=false \
NODE_VERSION=v14.19.3 \
NODE_VERSION=v14.20.0 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \

View file

@ -81,7 +81,7 @@ parts:
wekan:
source: .
plugin: nodejs
node-engine: 14.19.3
node-engine: 14.20.0
node-packages:
- node-gyp
- node-pre-gyp

View file

@ -80,7 +80,7 @@ konecty:mongo-counter
percolate:synced-cron
cfs:filesystem
ostrio:cookies
ostrio:files@2.0.1
ostrio:files@2.0.1!
rajit:bootstrap3-datepicker-fi
rajit:bootstrap3-datepicker-ar
rajit:bootstrap3-datepicker-bg

View file

@ -125,7 +125,7 @@ ongoworks:speakingurl@1.1.0
ordered-dict@1.1.0
ostrio:cookies@2.7.2
ostrio:cstorage@4.0.1
ostrio:files@2.2.1
ostrio:files@2.0.1
ostrio:i18n@3.2.0
pascoual:pdfkit@1.0.7
peerlibrary:assert@0.3.0

View file

@ -3,7 +3,7 @@ sudo: required
env:
TRAVIS_DOCKER_COMPOSE_VERSION: 1.24.0
TRAVIS_NODE_VERSION: 14.19.3
TRAVIS_NODE_VERSION: 14.20.0
TRAVIS_NPM_VERSION: latest
before_install:

View file

@ -1,7 +1,42 @@
[Mac ChangeLog](https://github.com/wekan/wekan/wiki/Mac)
Required versions of Node.js, MongoDB etc are listed at https://wekan.github.io
Download section.
[How to upgrade WeKan](https://github.com/wekan/wekan/issues/4585)
# Upcoming WeKan ® release
This release adds the following new features:
- [Added LaTex support to all input fields with markdown-it-mathjax3](https://github.com/wekan/wekan/commit/e81900178e62d36672952a8f0707c5297dcd7767).
Examples: https://github.com/wekan/wekan/wiki/LaTeX .
Thanks to DoktorScience.
Thanks to above GitHub users for their contributions and translators for their translations.
# v6.30 2022-07-11 WeKan ® release
This release adds the following new features:
- [Automatic login with OIDC](https://github.com/wekan/wekan/pull/4588).
Thanks to Viehlieb.
- [OIDC/OAuth2 autologin settings for Docker/Snap/Source/Bundle platforms](https://github.com/wekan/wekan/commit/284f4401369aadcec72e67fa935dfc3a9fead721).
Thanks to xet7.
and tries to fix the following bugs:
- [Try to fix Snap](https://github.com/wekan/wekan/commit/17f8f8f14ff205d0cbb316c63a2da36f61ba4a1d).
Thanks to xet7.
- [On CentOS 7 Docker there is seccomp issue with glibc 6, so setting it to unconfined to get WeKan working](https://github.com/wekan/wekan/commit/054d420dc97cadee6ed7896c608d95a6fe09dc9d).
Thanks to m-brangeon.
- [Fix uploading attachments](https://github.com/wekan/wekan/commit/69d454dd035a989266175eb4268ffc3d7891eb95).
Thanks to BabyFnord and xet7.
Thanks to above GitHub users for their contributions and translators for their translations.
# v6.29 2022-07-11 WeKan ® release
This release adds the following features:
- [Resizeable size of list width and height. Size is not saved yet. In Progress](https://github.com/wekan/wekan/commit/01d0dd3b1dd0a3c9764e7c9d31eab739db2d3ad8).
@ -11,11 +46,13 @@ This release adds the following features:
and adds the following updates:
- [Updated to Node.js v14.20.0](https://github.com/wekan/wekan/commit/239dd1a3411a3d4f51b109e1a0505a5a23bc72ee).
Thanks to Node.js developers.
- [Docker base image to Ubuntu 22.04](https://github.com/wekan/wekan/commit/6b4ffa69c64f0186a8b1b3ac175b633ac7c24263).
Thanks to Ubuntu developers.
- Updated ostrio:files.
[Part 1](https://github.com/wekan/wekan/commit/0d67a86f2c9c1c9696d8507c60e53d47a226a6ad),
[Part 1](https://github.com/wekan/wekan/commit/c3bfcb78e9047a84d43041bebcec56718eaa140b).
[Part 2](https://github.com/wekan/wekan/commit/c3bfcb78e9047a84d43041bebcec56718eaa140b).
Thanks to developers of dependencies.
- [Updated dependencies](https://github.com/wekan/wekan/commit/ae09f0f0083a96c2211fdc02e60b4ff6a2f413ca).
Thanks to developers of dependencies.

View file

@ -16,7 +16,7 @@ ARG DEBIAN_FRONTEND=noninteractive
ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-essential git ca-certificates python3" \
DEBUG=false \
NODE_VERSION=v14.19.3 \
NODE_VERSION=v14.20.0 \
METEOR_RELEASE=1.10.2 \
USE_EDGE=false \
METEOR_EDGE=1.5-beta.17 \
@ -50,6 +50,7 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
TRUSTED_URL="" \
WEBHOOKS_ATTRIBUTES="" \
OAUTH2_ENABLED=false \
OIDC_REDIRECTION_ENABLED=false \
OAUTH2_CA_CERT="" \
OAUTH2_ADFS_ENABLED=false \
OAUTH2_LOGIN_STYLE=redirect \
@ -147,6 +148,10 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
NODE_OPTIONS="--max_old_space_size=4096" \
WRITABLE_PATH=/data
#---------------------------------------------
# == at docker-compose.yml: AUTOLOGIN WITH OIDC/OAUTH2 ====
# https://github.com/wekan/wekan/wiki/autologin
#- OIDC_REDIRECTION_ENABLED=true
#---------------------------------------------------------------------
# https://github.com/wekan/wekan/issues/3585#issuecomment-1021522132
# Add more Node heap:

View file

@ -4,7 +4,7 @@ FROM amd64/alpine:3.7 AS builder
ENV QEMU_VERSION=v4.2.0-6 \
QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v14.19.3 \
NODE_VERSION=v14.20.0 \
WEKAN_VERSION=latest \
WEKAN_ARCHITECTURE=arm64 \
NODE_OPTIONS="--max_old_space_size=4096"
@ -49,7 +49,7 @@ LABEL maintainer="wekan"
# Set the environment variables (defaults where required)
ENV QEMU_ARCHITECTURE=aarch64 \
NODE_ARCHITECTURE=linux-arm64 \
NODE_VERSION=v14.19.3 \
NODE_VERSION=v14.20.0 \
NODE_ENV=production \
NPM_VERSION=latest \
WITH_API=true \

View file

@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
appVersion: "v6.28.0"
appVersion: "v6.30.0"
files:
userUploads:
- README.md

View file

@ -21,7 +21,7 @@ const validator = {
// let isSettingDatabaseFctCallDone = false;
Template.userFormsLayout.onCreated(function() {
Template.userFormsLayout.onCreated(function () {
const templateInstance = this;
templateInstance.currentSetting = new ReactiveVar();
templateInstance.isLoading = new ReactiveVar(false);
@ -37,7 +37,7 @@ Template.userFormsLayout.onCreated(function() {
}
// isSettingDatabaseFctCallDone = true;
if(currSetting && currSetting !== undefined && currSetting.customLoginLogoImageUrl !== undefined)
if (currSetting && currSetting !== undefined && currSetting.customLoginLogoImageUrl !== undefined)
document.getElementById("isSettingDatabaseCallDone").style.display = 'none';
else
document.getElementById("isSettingDatabaseCallDone").style.display = 'block';
@ -50,36 +50,17 @@ Template.userFormsLayout.onCreated(function() {
}
});
if(!Meteor.user()?.profile)
{
Meteor.call('isOidcRedirectionEnabled', (_, result) => {
serviceName = 'oidc';
if (result)
{
methodName = "loginWithOidc";
var loginWithService = Meteor[methodName];
AccountsTemplates.options.socialLoginStyle = 'redirect';
options = {
loginStyle: AccountsTemplates.options.socialLoginStyle,
};
loginWithService(options, function(err) {
AccountsTemplates.setDisabled(false);
if (err && err instanceof Accounts.LoginCancelledError)
{
}
else if (err && err instanceof ServiceConfiguration.ConfigError)
{
if (Accounts._loginButtonsSession) return Accounts._loginButtonsSession.configureService('oidc');
}
else
{
AccountsTemplates.submitCallback(err, state);
}
});
}
else console.log("oidc redirect not set");
});
if (!Meteor.user()?.profile) {
Meteor.call('isOidcRedirectionEnabled', (_, result) => {
if (result) {
AccountsTemplates.options.socialLoginStyle = 'redirect';
options = {
loginStyle: AccountsTemplates.options.socialLoginStyle,
};
Meteor.loginWithOidc(options);
}
else console.log("oidc redirect not set");
});
}
Meteor.call('isDisableRegistration', (_, result) => {
if (result) {
@ -112,22 +93,22 @@ Template.userFormsLayout.helpers({
// return isSettingDatabaseFctCallDone;
// },
isLegalNoticeLinkExist(){
isLegalNoticeLinkExist() {
const currSet = Template.instance().currentSetting.get();
if(currSet && currSet !== undefined && currSet != null){
if (currSet && currSet !== undefined && currSet != null) {
return currSet.legalNotice !== undefined && currSet.legalNotice.trim() != "";
}
else
return false;
},
getLegalNoticeWithWritTraduction(){
getLegalNoticeWithWritTraduction() {
let spanLegalNoticeElt = $("#legalNoticeSpan");
if(spanLegalNoticeElt != null && spanLegalNoticeElt != undefined){
if (spanLegalNoticeElt != null && spanLegalNoticeElt != undefined) {
spanLegalNoticeElt.html(TAPi18n.__('acceptance_of_our_legalNotice', {}));
}
let atLinkLegalNoticeElt = $("#legalNoticeAtLink");
if(atLinkLegalNoticeElt != null && atLinkLegalNoticeElt != undefined){
if (atLinkLegalNoticeElt != null && atLinkLegalNoticeElt != undefined) {
atLinkLegalNoticeElt.html(TAPi18n.__('legalNotice', {}));
}
return true;
@ -178,41 +159,41 @@ Template.userFormsLayout.events({
}
isCheckDone = false;
},
'click #at-signUp'(event, templateInstance){
'click #at-signUp'(event, templateInstance) {
isCheckDone = false;
},
'DOMSubtreeModified #at-oidc'(event){
if(alreadyCheck <= 2){
'DOMSubtreeModified #at-oidc'(event) {
if (alreadyCheck <= 2) {
let currSetting = Settings.findOne();
let oidcBtnElt = $("#at-oidc");
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
if (currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined) {
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
if(alreadyCheck == 1){
if (alreadyCheck == 1) {
alreadyCheck++;
oidcBtnElt.html("");
}
else{
else {
alreadyCheck++;
oidcBtnElt.html(htmlvalue);
}
}
}
else{
else {
alreadyCheck = 1;
}
},
'DOMSubtreeModified .at-form'(event){
if(alreadyCheck <= 2 && !isCheckDone){
if(document.getElementById("at-oidc") != null){
'DOMSubtreeModified .at-form'(event) {
if (alreadyCheck <= 2 && !isCheckDone) {
if (document.getElementById("at-oidc") != null) {
let currSetting = Settings.findOne();
let oidcBtnElt = $("#at-oidc");
if(currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined){
if (currSetting && currSetting !== undefined && currSetting.oidcBtnText !== undefined && oidcBtnElt != null && oidcBtnElt != undefined) {
let htmlvalue = "<i class='fa fa-oidc'></i>" + currSetting.oidcBtnText;
if(alreadyCheck == 1){
if (alreadyCheck == 1) {
alreadyCheck++;
oidcBtnElt.html("");
}
else{
else {
alreadyCheck++;
isCheckDone = true;
oidcBtnElt.html(htmlvalue);
@ -220,7 +201,7 @@ Template.userFormsLayout.events({
}
}
}
else{
else {
alreadyCheck = 1;
}
},
@ -252,7 +233,7 @@ async function authentication(event, templateInstance) {
switch (result) {
case 'ldap':
return new Promise(resolve => {
Meteor.loginWithLDAP(match, password, function() {
Meteor.loginWithLDAP(match, password, function () {
resolve(FlowRouter.go('/'));
});
});
@ -264,7 +245,7 @@ async function authentication(event, templateInstance) {
{
provider,
},
function() {
function () {
resolve(FlowRouter.go('/'));
},
);
@ -272,7 +253,7 @@ async function authentication(event, templateInstance) {
case 'cas':
return new Promise(resolve => {
Meteor.loginWithCas(match, password, function() {
Meteor.loginWithCas(match, password, function () {
resolve(FlowRouter.go('/'));
});
});
@ -298,7 +279,6 @@ function getUserAuthenticationMethod(defaultAuthenticationMethod, match) {
Meteor.subscribe('user-authenticationMethod', match, {
onReady() {
const user = Users.findOne();
const authenticationMethod = user
? user.authenticationMethod
: defaultAuthenticationMethod;

View file

@ -127,6 +127,12 @@ services:
# image: wekanteam/wekan
#-------------------------------------------------------------------------------------
container_name: wekan-app
# On CentOS 7 there is seccomp issue with glibc 6, so setting it to unconfined
# to get WeKan working. See:
# - https://github.com/wekan/wekan/issues/4585
# - https://github.com/wekan/wekan/issues/4587
security_opt:
- seccomp:unconfined
restart: always
networks:
- wekan-tier
@ -336,6 +342,10 @@ services:
#-----------------------------------------------------------------
# ==== Debug OIDC OAuth2 etc ====
#- DEBUG=true
#---------------------------------------------
# ==== AUTOLOGIN WITH OIDC/OAUTH2 ====
# https://github.com/wekan/wekan/wiki/autologin
#- OIDC_REDIRECTION_ENABLED=true
#-----------------------------------------------------------------
# ==== OAUTH2 ORACLE on premise identity manager OIM ====
#- ORACLE_OIM_ENABLED=true

View file

@ -1,5 +1,5 @@
apiVersion: v2
appVersion: "6.28"
appVersion: "6.30"
dependencies:
- condition: mongodb.enabled
name: mongodb

View file

@ -14,7 +14,7 @@ serviceAccounts:
##
image:
repository: quay.io/wekan/wekan
tag: v6.28
tag: v6.30
pullPolicy: IfNotPresent
## Configuration for wekan component

View file

@ -3,7 +3,7 @@
"act-activity-notify": "اعلان فعالیت",
"act-addAttachment": "افزودن پیوست __attachment__ به کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__",
"act-deleteAttachment": "پاک کردن پیوست __attachment__ از کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__",
"act-addSubtask": "فزودن کار فرعی __subtask__ به کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__",
"act-addSubtask": "افزودن کار فرعی __subtask__ به کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__",
"act-addLabel": "افزودن برچسب __label__ به کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__",
"act-addedLabel": "برچسب اضافه شده __label__ به کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__",
"act-removeLabel": "برداشتن برچسب __label__ از کارت __card__ در لیست __list__ at swimlane __swimlane__ در برد __board__",
@ -208,12 +208,12 @@
"poker-twenty": "20",
"poker-forty": "40",
"poker-oneHundred": "100",
"poker-unsure": "?",
"poker-unsure": "؟",
"poker-finish": "پایان",
"poker-result-votes": "Votes",
"poker-result-who": "Who",
"poker-replay": "Replay",
"set-estimation": "Set Estimation",
"poker-result-votes": "آراء",
"poker-result-who": "چه کسی",
"poker-replay": "بازپخش",
"set-estimation": "اعلام تخمین",
"deletePokerPopup-title": "Delete planning poker?",
"poker-delete-pop": "Deleting is permanent. You will lose all actions associated with this planning poker.",
"cardDeletePopup-title": "Delete Card?",

View file

@ -229,6 +229,12 @@ if (Meteor.isServer) {
]);
}
function loadOidcConfig(service){
check(service, String);
var config = ServiceConfiguration.configurations.findOne({service: service});
return config;
}
function sendInvitationEmail(_id) {
const icode = InvitationCodes.findOne(_id);
const author = Users.findOne(Meteor.userId());
@ -509,8 +515,11 @@ if (Meteor.isServer) {
return process.env.PASSWORD_LOGIN_ENABLED === 'false';
},
isOidcRedirectionEnabled(){
return process.env.OIDC_REDIRECTION_ENABLED === 'true';
return process.env.OIDC_REDIRECTION_ENABLED === 'true' && Object.keys(loadOidcConfig("oidc")).length > 0;
},
getServiceConfiguration(service){
return loadOidcConfig(service);
}
});
}

692
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
{
"name": "wekan",
"version": "v6.28.0",
"version": "v6.30.0",
"description": "Open-Source kanban",
"private": true,
"repository": {
@ -45,6 +45,7 @@
"ldapjs": "^2.3.1",
"markdown-it": "^12.3.2",
"markdown-it-emoji": "^2.0.0",
"markdown-it-mathjax3": "^4.3.1",
"meteor-accounts-t9n": "^2.6.0",
"meteor-node-stubs": "^1.1.0",
"moment": "^2.29.3",

View file

@ -36,7 +36,9 @@ for(var i=0; i<urlschemes.length;i++){
}
var emoji = require('markdown-it-emoji');
var mathjax = require('markdown-it-mathjax3');
Markdown.use(emoji);
Markdown.use(mathjax);
Markdown.use(markdownItMermaid);
if (Package.ui) {

View file

@ -7,10 +7,7 @@ if (Meteor.isClient) {
callback = options;
options = null;
}
console.log(options.loginStyle);
console.log(callback);
var credentialRequestCompleteCallback = Accounts.oauth.credentialRequestCompleteHandler(callback);
console.log("credentialCallback",credentialRequestCompleteCallback);
Oidc.requestCredential(options, credentialRequestCompleteCallback);
};
}

View file

@ -12,56 +12,61 @@ Oidc.requestCredential = function (options, credentialRequestCompleteCallback) {
options = {};
}
var config = ServiceConfiguration.configurations.findOne({service: 'oidc'});
if (!config) {
credentialRequestCompleteCallback && credentialRequestCompleteCallback(
new ServiceConfiguration.ConfigError('Service oidc not configured.'));
return;
}
Meteor.call("getServiceConfiguration", "oidc",(_, result) => {
if (result) {
var config = result;
var credentialToken = Random.secret();
var loginStyle = OAuth._loginStyle('oidc', config, options);
// options
options = options || {};
options.client_id = config.clientId;
options.response_type = options.response_type || 'code';
options.redirect_uri = OAuth._redirectUri('oidc', config);
options.state = OAuth._stateParam(loginStyle, credentialToken, options.redirectUrl);
options.scope = config.requestPermissions || 'openid profile email';
var credentialToken = Random.secret();
var loginStyle = OAuth._loginStyle('oidc', config, options);
if (config.loginStyle && config.loginStyle == 'popup') {
options.display = 'popup';
}
// options
options = options || {};
options.client_id = config.clientId;
options.response_type = options.response_type || 'code';
options.redirect_uri = OAuth._redirectUri('oidc', config);
options.state = OAuth._stateParam(loginStyle, credentialToken, options.redirectUrl);
options.scope = config.requestPermissions || 'openid profile email';
var loginUrl = config.serverUrl + config.authorizationEndpoint;
// check if the loginUrl already contains a "?"
var first = loginUrl.indexOf('?') === -1;
for (var k in options) {
if (first) {
loginUrl += '?';
first = false;
}
else {
loginUrl += '&'
}
loginUrl += encodeURIComponent(k) + '=' + encodeURIComponent(options[k]);
}
if (config.loginStyle && config.loginStyle == 'popup') {
options.display = 'popup';
}
//console.log('XXX: loginURL: ' + loginUrl)
var loginUrl = config.serverUrl + config.authorizationEndpoint;
// check if the loginUrl already contains a "?"
var first = loginUrl.indexOf('?') === -1;
for (var k in options) {
if (first) {
loginUrl += '?';
first = false;
options.popupOptions = options.popupOptions || {};
var popupOptions = {
width: options.popupOptions.width || 320,
height: options.popupOptions.height || 450
};
OAuth.launchLogin({
loginService: 'oidc',
loginStyle: loginStyle,
loginUrl: loginUrl,
credentialRequestCompleteCallback: credentialRequestCompleteCallback,
credentialToken: credentialToken,
popupOptions: popupOptions,
});
}
else {
loginUrl += '&'
else
{
credentialRequestCompleteCallback && credentialRequestCompleteCallback(
new ServiceConfiguration.ConfigError('Service oidc not configured.'));
return;
}
loginUrl += encodeURIComponent(k) + '=' + encodeURIComponent(options[k]);
}
//console.log('XXX: loginURL: ' + loginUrl)
options.popupOptions = options.popupOptions || {};
var popupOptions = {
width: options.popupOptions.width || 320,
height: options.popupOptions.height || 450
};
OAuth.launchLogin({
loginService: 'oidc',
loginStyle: loginStyle,
loginUrl: loginUrl,
credentialRequestCompleteCallback: credentialRequestCompleteCallback,
credentialToken: credentialToken,
popupOptions: popupOptions,
});
};

View file

@ -7,7 +7,7 @@
<meta charset="utf-8">
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>Wekan REST API v6.28</title>
<title>Wekan REST API v6.30</title>
<style>
</style>
@ -1558,7 +1558,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<ul class="toc-list-h1">
<li>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v6.28">Wekan REST API v6.28</a>
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v6.30">Wekan REST API v6.30</a>
</li>
@ -2156,7 +2156,7 @@ var n=this.pipeline.run(e.tokenizer(t)),r=new e.Vector,i=[],o=this._fields.reduc
<div class="page-wrapper">
<div class="dark-box"></div>
<div class="content">
<h1 id="wekan-rest-api">Wekan REST API v6.28</h1>
<h1 id="wekan-rest-api">Wekan REST API v6.30</h1>
<blockquote>
<p>Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.</p>
</blockquote>
@ -15280,6 +15280,8 @@ System.out.println(response.toString());
<span class="hljs-attr">&quot;swimlaneId&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;createdAt&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;sort&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;width&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;height&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;updatedAt&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;modifiedAt&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;wipLimit&quot;</span>: {
@ -20996,6 +20998,8 @@ UserSecurity
<span class="hljs-attr">&quot;swimlaneId&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;createdAt&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;sort&quot;</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">&quot;width&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;height&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;updatedAt&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;modifiedAt&quot;</span>: <span class="hljs-string">&quot;string&quot;</span>,
<span class="hljs-attr">&quot;wipLimit&quot;</span>: {
@ -21078,6 +21082,20 @@ UserSecurity
<td>is the list sorted</td>
</tr>
<tr>
<td>width</td>
<td>string¦null</td>
<td>false</td>
<td>none</td>
<td>list width, default 270px</td>
</tr>
<tr>
<td>height</td>
<td>string¦null</td>
<td>false</td>
<td>none</td>
<td>list height</td>
</tr>
<tr>
<td>updatedAt</td>
<td>string¦null</td>
<td>false</td>

View file

@ -1,7 +1,7 @@
swagger: '2.0'
info:
title: Wekan REST API
version: v6.28
version: v6.30
description: |
The REST API allows you to control and extend Wekan with ease.
@ -3745,6 +3745,16 @@ definitions:
is the list sorted
type: number
x-nullable: true
width:
description: |
list width, default 270px
type: string
x-nullable: true
height:
description: |
list height
type: string
x-nullable: true
updatedAt:
description: |
last update of the list

View file

@ -15,8 +15,8 @@ REM Install chocolatey
choco install -y git curl python2 dotnet4.5.2 nano mongodb-4 mongoclient
curl -O https://nodejs.org/dist/v14.19.3/node-v14.19.3-x64.msi
call node-v14.19.3-x64.msi
curl -O https://nodejs.org/dist/v14.20.0/node-v14.20.0-x64.msi
call node-v14.20.0-x64.msi
call npm config -g set msvs_version 2015
call meteor npm config -g set msvs_version 2015

View file

@ -43,7 +43,7 @@ do
#curl -0 -L https://npmjs.org/install.sh | sudo sh
#sudo chown -R $(id -u):$(id -g) $HOME/.npm
sudo npm -g install n
sudo n 14.19.3
sudo n 14.20.0
#sudo npm -g install npm
## Latest npm with Meteor 2.2
sudo npm -g install node-gyp

View file

@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
appVersion = 628,
appVersion = 630,
# Increment this for every release.
appMarketingVersion = (defaultText = "6.28.0~2022-06-08"),
appMarketingVersion = (defaultText = "6.30.0~2022-07-11"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,

View file

@ -3,7 +3,7 @@
# All supported keys are defined here together with descriptions and default values
# list of supported keys
keys="DEBUG MONGO_LOG_DESTINATION MONGO_URL MONGODB_BIND_UNIX_SOCKET MONGO_URL MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM MAIL_SERVICE MAIL_SERVICE_USER MAIL_SERVICE_PASSWORD ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API RICHER_CARD_COMMENT_EDITOR CARD_OPENED_WEBHOOK_ENABLED ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS MAX_IMAGE_PIXEL IMAGE_COMPRESS_RATIO BIGEVENTS_PATTERN NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE NOTIFY_DUE_DAYS_BEFORE_AND_AFTER NOTIFY_DUE_AT_HOUR_OF_DAY EMAIL_NOTIFICATION_TIMEOUT CORS CORS_ALLOW_HEADERS CORS_EXPOSE_HEADERS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OAUTH2_CA_CERT OAUTH2_LOGIN_STYLE OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_ID_TOKEN_WHITELIST_FIELDS OAUTH2_EMAIL_MAP OAUTH2_REQUEST_PERMISSIONS OAUTH2_ADFS_ENABLED LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_AD_SIMPLE_AUTH 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_AUTHENTICATION LDAP_USER_AUTHENTICATION_FIELD 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 LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD PASSWORD_LOGIN_ENABLED CAS_ENABLED CAS_BASE_URL CAS_LOGIN_URL CAS_VALIDATE_URL SAML_ENABLED SAML_PROVIDER SAML_ENTRYPOINT SAML_ISSUER SAML_CERT SAML_IDPSLO_REDIRECTURL SAML_PRIVATE_KEYFILE SAML_PUBLIC_CERTFILE SAML_IDENTIFIER_FORMAT SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE SAML_ATTRIBUTES ORACLE_OIM_ENABLED RESULTS_PER_PAGE WAIT_SPINNER NODE_OPTIONS"
keys="DEBUG MONGO_LOG_DESTINATION MONGO_URL MONGODB_BIND_UNIX_SOCKET MONGO_URL MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM MAIL_SERVICE MAIL_SERVICE_USER MAIL_SERVICE_PASSWORD ROOT_URL PORT DISABLE_MONGODB CADDY_ENABLED CADDY_BIND_PORT WITH_API RICHER_CARD_COMMENT_EDITOR CARD_OPENED_WEBHOOK_ENABLED ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURES_BEFORE ACCOUNTS_LOCKOUT_KNOWN_USERS_PERIOD ACCOUNTS_LOCKOUT_KNOWN_USERS_FAILURE_WINDOW ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURES_BERORE ACCOUNTS_LOCKOUT_UNKNOWN_USERS_LOCKOUT_PERIOD ACCOUNTS_LOCKOUT_UNKNOWN_USERS_FAILURE_WINDOW ACCOUNTS_COMMON_LOGIN_EXPIRATION_IN_DAYS MAX_IMAGE_PIXEL IMAGE_COMPRESS_RATIO BIGEVENTS_PATTERN NOTIFICATION_TRAY_AFTER_READ_DAYS_BEFORE_REMOVE NOTIFY_DUE_DAYS_BEFORE_AND_AFTER NOTIFY_DUE_AT_HOUR_OF_DAY EMAIL_NOTIFICATION_TIMEOUT CORS CORS_ALLOW_HEADERS CORS_EXPOSE_HEADERS MATOMO_ADDRESS MATOMO_SITE_ID MATOMO_DO_NOT_TRACK MATOMO_WITH_USERNAME BROWSER_POLICY_ENABLED TRUSTED_URL WEBHOOKS_ATTRIBUTES OAUTH2_ENABLED OIDC_REDIRECTION_ENABLED OAUTH2_CA_CERT OAUTH2_LOGIN_STYLE OAUTH2_CLIENT_ID OAUTH2_SECRET OAUTH2_SERVER_URL OAUTH2_AUTH_ENDPOINT OAUTH2_USERINFO_ENDPOINT OAUTH2_TOKEN_ENDPOINT OAUTH2_ID_MAP OAUTH2_USERNAME_MAP OAUTH2_FULLNAME_MAP OAUTH2_ID_TOKEN_WHITELIST_FIELDS OAUTH2_EMAIL_MAP OAUTH2_REQUEST_PERMISSIONS OAUTH2_ADFS_ENABLED LDAP_ENABLE LDAP_PORT LDAP_HOST LDAP_AD_SIMPLE_AUTH 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_AUTHENTICATION LDAP_USER_AUTHENTICATION_FIELD 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 LDAP_EMAIL_MATCH_ENABLE LDAP_EMAIL_MATCH_REQUIRE LDAP_EMAIL_MATCH_VERIFIED LDAP_EMAIL_FIELD LDAP_SYNC_ADMIN_STATUS LDAP_SYNC_ADMIN_GROUPS HEADER_LOGIN_ID HEADER_LOGIN_FIRSTNAME HEADER_LOGIN_LASTNAME HEADER_LOGIN_EMAIL LOGOUT_WITH_TIMER LOGOUT_IN LOGOUT_ON_HOURS LOGOUT_ON_MINUTES DEFAULT_AUTHENTICATION_METHOD PASSWORD_LOGIN_ENABLED CAS_ENABLED CAS_BASE_URL CAS_LOGIN_URL CAS_VALIDATE_URL SAML_ENABLED SAML_PROVIDER SAML_ENTRYPOINT SAML_ISSUER SAML_CERT SAML_IDPSLO_REDIRECTURL SAML_PRIVATE_KEYFILE SAML_PUBLIC_CERTFILE SAML_IDENTIFIER_FORMAT SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE SAML_ATTRIBUTES ORACLE_OIM_ENABLED RESULTS_PER_PAGE WAIT_SPINNER NODE_OPTIONS"
#DESCRIPTION_WRITABLE_PATH="Writable path. Default: $SNAP_COMMON/files"
#DEFAULT_WRITABLE_PATH="$SNAP_COMMON/files"
@ -209,6 +209,10 @@ DESCRIPTION_OAUTH2_ENABLED="Enable the OAuth2 connection. Default: false"
DEFAULT_OAUTH2_ENABLED="false"
KEY_OAUTH2_ENABLED="oauth2-enabled"
DESCRIPTION_OIDC_REDIRECTION_ENABLED="Enable the OIDC/OAuth2 autologin. See https://github.com/wekan/wekan/wiki/autologin . Default: false"
DEFAULT_OIDC_REDIRECTION_ENABLED="false"
KEY_OIDC_REDIRECTION_ENABLED="oidc-redirection-enabled"
DESCRIPTION_OAUTH2_CA_CERT="Optional OAuth2 CA Cert, see https://github.com/wekan/wekan/issues/3299."
DEFAULT_OAUTH2_CA_CERT=""
KEY_OAUTH2_CA_CERT="oauth2-ca-cert"

View file

@ -214,6 +214,12 @@ echo -e "\t$ snap set $SNAP_NAME oauth2-enabled='true'"
echo -e "\t-Disable the OAuth2 of Wekan:"
echo -e "\t$ snap unset $SNAP_NAME oauth2-enabled"
echo -e "\n"
echo -e "OIDC/OAuth2 redirection to autologin, see https://github.com/wekan/wekan/wiki/autologin"
echo -e "To enable the autologin of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oidc-redirection-enabled='true'"
echo -e "\t-Disable the autologin of Wekan:"
echo -e "\t$ snap unset $SNAP_NAME oidc-redirection-enabled"
echo -e "\n"
echo -e "Optional OAuth2 CA Cert, see https://github.com/wekan/wekan/issues/3299"
echo -e "To enable the OAuth2 of Wekan:"
echo -e "\t$ snap set $SNAP_NAME oauth2-ca-cert='ABCD134'"

View file

@ -1,5 +1,5 @@
name: wekan
version: '6.28'
version: '6.30'
base: core20
summary: Open Source kanban
description: |
@ -102,7 +102,7 @@ parts:
wekan:
source: .
plugin: npm
npm-node-version: 14.19.3
npm-node-version: 14.20.0
#npm-packages:
# - node-gyp
# - node-pre-gyp
@ -132,7 +132,7 @@ parts:
#echo "registry=http://registry.npmjs.org/" > ~/.npmrc
#echo "Installing npm, node-gyp, node-pre-gyp, fibers"
#npm -g install n --unsafe-perm
#n 14.19.3
#n 14.20.0
#npm -g install node-gyp --unsafe-perm
#npm -g install node-pre-gyp --unsafe-perm
#npm -g install fibers --unsafe-perm
@ -160,9 +160,9 @@ parts:
# Cleanup
mkdir .build
cd .build
wget https://github.com/wekan/wekan/releases/download/v6.28/wekan-6.28-amd64.zip
unzip wekan-6.28-amd64.zip
rm wekan-6.28-amd64.zip
wget https://github.com/wekan/wekan/releases/download/v6.30/wekan-6.30-amd64.zip
unzip wekan-6.30-amd64.zip
rm wekan-6.30-amd64.zip
cd ..
##cd .build/bundle
##find . -type d -name '*-garbage*' | xargs rm -rf
@ -177,12 +177,12 @@ parts:
#rm fibers-multi.7z
#cd ../../../../../../..
# Copy to Snap
wget https://nodejs.org/dist/latest-v14.x/node-v14.19.3-linux-x64.tar.xz
tar -xf node-v14.19.3-linux-x64.tar.xz node-v14.19.3-linux-x64/bin/node
rm node-v14.19.3-linux-x64.tar.xz
wget https://nodejs.org/dist/latest-v14.x/node-v14.20.0-linux-x64.tar.xz
tar -xf node-v14.20.0-linux-x64.tar.xz node-v14.20.0-linux-x64/bin/node
rm node-v14.20.0-linux-x64.tar.xz
mkdir $SNAPCRAFT_PART_INSTALL/bin
cp -p node-v14.19.3-linux-x64/bin/node $SNAPCRAFT_PART_INSTALL/bin/
rm -rf node-v14.19.3-linux-x64
cp -p node-v14.20.0-linux-x64/bin/node $SNAPCRAFT_PART_INSTALL/bin/
rm -rf node-v14.20.0-linux-x64
cp -r .build/bundle/* $SNAPCRAFT_PART_INSTALL/
cp .build/bundle/.node_version.txt $SNAPCRAFT_PART_INSTALL/
rm -f $SNAPCRAFT_PART_INSTALL/lib/node_modules/wekan

View file

@ -2,7 +2,7 @@
set -euxo pipefail
BUILD_DEPS="bsdtar gnupg wget curl bzip2 python git ca-certificates perl-Digest-SHA"
NODE_VERSION=v14.19.3
NODE_VERSION=v14.20.0
#METEOR_RELEASE=1.6.0.1 - for Stacksmith, meteor-1.8 branch that could have METEOR@1.8.1-beta.8 or newer
USE_EDGE=false
METEOR_EDGE=1.5-beta.17

View file

@ -128,6 +128,12 @@ REM SET WEBHOOKS_ATTRIBUTES=
REM ------------------------------------------------------------
REM ## ==== AUTOLOGIN WITH OIDC/OAUTH2 ====
REM ## https://github.com/wekan/wekan/wiki/autologin
REM # SET OIDC_REDIRECTION_ENABLED=true
REM ------------------------------------------------------------
REM # OAUTH2 ORACLE on premise identity manager OIM
REM SET ORACLE_OIM_ENABLED=true

View file

@ -137,6 +137,10 @@
# Example: export WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId
export WEBHOOKS_ATTRIBUTES=''
#---------------------------------------------
# ==== AUTOLOGIN WITH OIDC/OAUTH2 ====
# https://github.com/wekan/wekan/wiki/autologin
#export OIDC_REDIRECTION_ENABLED=true
#---------------------------------------------
# OAUTH2 ORACLE on premise identity manager OIM
#export ORACLE_OIM_ENABLED=true
#---------------------------------------------

View file

@ -351,6 +351,10 @@ services:
# example: WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId
#- WEBHOOKS_ATTRIBUTES=
#-----------------------------------------------------------------
# ==== AUTOLOGIN WITH OIDC/OAUTH2 ====
# https://github.com/wekan/wekan/wiki/autologin
#- OIDC_REDIRECTION_ENABLED=true
#---------------------------------------------
# ==== OAUTH2 ORACLE on premise identity manager OIM ====
#- ORACLE_OIM_ENABLED=true
#-----------------------------------------------------------------