Bladeren bron

merge with master

viehlieb 2 jaren geleden
bovenliggende
commit
b36920e657

+ 1 - 1
.devcontainer/Dockerfile

@@ -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 \

+ 1 - 1
.future-snap/broken-snapcraft.yaml

@@ -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

+ 1 - 1
.meteor/packages

@@ -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

+ 1 - 1
.meteor/versions

@@ -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

+ 1 - 1
.travis.yml

@@ -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:

+ 38 - 1
CHANGELOG.md

@@ -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.

+ 6 - 1
Dockerfile

@@ -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:

+ 2 - 2
Dockerfile.arm64v8

@@ -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 \

+ 1 - 1
Stackerfile.yml

@@ -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

+ 35 - 55
client/components/main/layouts.js

@@ -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;

+ 10 - 0
docker-compose.yml

@@ -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

+ 1 - 1
helm/wekan/Chart.yaml

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

+ 1 - 1
helm/wekan/values.yaml

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

+ 6 - 6
imports/i18n/data/fa-IR.i18n.json

@@ -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?",

+ 10 - 1
models/settings.js

@@ -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);
+      }
   });
 }
 

File diff suppressed because it is too large
+ 512 - 172
package-lock.json


+ 2 - 1
package.json

@@ -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",

+ 2 - 0
packages/markdown/src/template-integration.js

@@ -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) {

+ 0 - 3
packages/wekan-accounts-oidc/oidc.js

@@ -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);
   };
   }

+ 49 - 44
packages/wekan-oidc/oidc_client.js

@@ -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,
-  });
 };

+ 21 - 3
public/api/wekan.html

@@ -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>

+ 11 - 1
public/api/wekan.yml

@@ -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

+ 2 - 2
rebuild-wekan.bat

@@ -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

+ 1 - 1
rebuild-wekan.sh

@@ -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

+ 2 - 2
sandstorm-pkgdef.capnp

@@ -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,

File diff suppressed because it is too large
+ 0 - 0
snap-src/bin/config


+ 6 - 0
snap-src/bin/wekan-help

@@ -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'"

+ 11 - 11
snapcraft.yaml

@@ -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

+ 1 - 1
stacksmith/user-scripts/build.sh

@@ -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

+ 6 - 0
start-wekan.bat

@@ -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
 

+ 4 - 0
start-wekan.sh

@@ -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
       #---------------------------------------------

+ 4 - 0
torodb-postgresql/docker-compose.yml

@@ -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
       #-----------------------------------------------------------------

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