mirror of
https://github.com/wekan/wekan.git
synced 2026-11-06 05:52:33 -05:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dc86ae21de | ||
|
|
befb0f18b6 | ||
|
|
b796a6cbf4 | ||
|
|
9336a55a50 | ||
|
|
26749442fd | ||
|
|
7223d6e750 | ||
|
|
41a8e79e0e | ||
|
|
ec8a78537f | ||
|
|
4eb7597aa9 | ||
|
|
3d13fa3a26 | ||
|
|
655fe8afd3 | ||
|
|
855c66976e | ||
|
|
185cf163b2 | ||
|
|
45b7365025 | ||
|
|
ed5f64ccd6 | ||
|
|
3fc80e1145 | ||
|
|
05e3fc31b4 | ||
|
|
d5e1c4bfa5 | ||
|
|
a7c3317ed6 | ||
|
|
7db08082bc | ||
|
|
32836d42c9 | ||
|
|
789c4b480a | ||
|
|
abe291837a | ||
|
|
81ac0fdba9 | ||
|
|
d19cc972e0 |
No files matched your search
+1
-1
@@ -7,7 +7,7 @@ meteor-base@1.4.0
|
||||
|
||||
# Build system
|
||||
ecmascript@0.14.3
|
||||
standard-minifier-css@1.6.0
|
||||
standard-minifier-css@1.6.1
|
||||
standard-minifier-js@2.6.0
|
||||
mquandalle:jade
|
||||
coffeescript@2.4.1!
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
METEOR@1.11
|
||||
METEOR@1.11.1
|
||||
+3
-3
@@ -55,7 +55,7 @@ ddp-rate-limiter@1.0.9
|
||||
ddp-server@2.3.2
|
||||
deps@1.0.12
|
||||
diff-sequence@1.1.1
|
||||
dynamic-import@0.5.2
|
||||
dynamic-import@0.5.3
|
||||
easylogic:summernote@0.8.8
|
||||
ecmascript@0.14.3
|
||||
ecmascript-runtime@0.7.0
|
||||
@@ -109,7 +109,7 @@ mobile-status-bar@1.1.0
|
||||
modern-browsers@0.1.5
|
||||
modules@0.15.0
|
||||
modules-runtime@0.12.0
|
||||
momentjs:moment@2.28.0
|
||||
momentjs:moment@2.29.0
|
||||
mongo@1.10.0
|
||||
mongo-decimal@0.1.1
|
||||
mongo-dev-server@1.1.0
|
||||
@@ -127,7 +127,7 @@ mquandalle:mousetrap-bindglobal@0.0.1
|
||||
msavin:usercache@1.8.0
|
||||
npm-bcrypt@0.9.3
|
||||
npm-mongo@3.8.1
|
||||
oauth@1.3.0
|
||||
oauth@1.3.2
|
||||
oauth2@1.3.0
|
||||
observe-sequence@1.0.16
|
||||
ongoworks:speakingurl@1.1.0
|
||||
|
||||
@@ -1,3 +1,48 @@
|
||||
# v4.41 2020-10-03 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Login with OIDC OAuth2 Oracle on premise identity manager OIM, with setting ORACLE_OIM_ENABLED=true](https://github.com/wekan/wekan/commit/ec8a78537f1dc40e967de36a02ea09cf7398318a).
|
||||
More info [at wiki](https://github.com/wekan/wekan/wiki/Oracle-OIM).
|
||||
Thanks to xet7.
|
||||
- [At Admin Panel / Layout: Text below Custom Login Logo. Can have markdown formatting](https://github.com/wekan/wekan/commit/7223d6e75057d1412862a97b8a43c34ec23b16e9).
|
||||
Thanks to xet7.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- [Update dependencies](https://github.com/wekan/wekan/commit/b796a6cbf4911c14ff036a51db0252e08d3a5ef8).
|
||||
Thanks to developers of dependencies.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v4.40 2020-09-18 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- Custom Logo for Login and Top Left Corner. Optional link when clicking logo.
|
||||
Settings at Admin Panel / Layout.
|
||||
[Part 1](https://github.com/wekan/wekan/commit/a7c3317ed696fad8e211b22afbb3012f3a4f2ddb),
|
||||
[Part 2](https://github.com/wekan/wekan/commit/05e3fc31b4633978a6b002a0325aad8e74d57ec4),
|
||||
[Part 3](https://github.com/wekan/wekan/commit/3fc80e1145b23f8e6c7492ef4e3313b02f3d8772).
|
||||
Thanks to xet7.
|
||||
|
||||
and adds the following updates:
|
||||
|
||||
- [Upgrade to Meteor v1.11.1](https://github.com/wekan/wekan/commit/185cf163b23280af5a7910381209984e2362a452).
|
||||
Thanks to Meteor developers.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v4.39 2020-09-17 Wekan release
|
||||
|
||||
This release adds the following new features:
|
||||
|
||||
- [Impersonate one user](https://github.com/wekan/wekan/pull/3280) and
|
||||
[related translatable strings](https://github.com/wekan/wekan/commit/81ac0fdba9b52477dbbe7b6ed01b6d299288bcca).
|
||||
Thanks to Akuket and xet7.
|
||||
|
||||
Thanks to above GitHub users for their contributions and translators for their translations.
|
||||
|
||||
# v4.38 2020-09-16 Wekan release
|
||||
|
||||
This release fixes the following CRITICAL VULNERABILITIES:
|
||||
|
||||
+2
-1
@@ -130,7 +130,8 @@ ENV BUILD_DEPS="apt-utils libarchive-tools gnupg gosu wget curl bzip2 g++ build-
|
||||
SAML_PUBLIC_CERTFILE="" \
|
||||
SAML_IDENTIFIER_FORMAT="" \
|
||||
SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE="" \
|
||||
SAML_ATTRIBUTES=""
|
||||
SAML_ATTRIBUTES="" \
|
||||
ORACLE_OIM_ENABLED=false
|
||||
|
||||
# Copy the app to the image
|
||||
COPY ${SRC_PATH} /home/wekan/app
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
|
||||
appVersion: "v4.38.0"
|
||||
appVersion: "v4.41.0"
|
||||
files:
|
||||
userUploads:
|
||||
- README.md
|
||||
|
||||
@@ -19,6 +19,19 @@ template(name="header")
|
||||
= title
|
||||
#header-new-board-icon
|
||||
else
|
||||
//-
|
||||
On sandstorm, the logo shouldn't be clickable, because we only have one
|
||||
page/document on it, and we don't want to see the home page containing
|
||||
the list of all boards.
|
||||
unless currentSetting.hideLogo
|
||||
if currentSetting.customTopLeftCornerLogoImageUrl
|
||||
if currentSetting.customTopLeftCornerLogoLinkUrl
|
||||
a(href="{{currentSetting.customTopLeftCornerLogoLinkUrl}}")
|
||||
img(src="{{currentSetting.customTopLeftCornerLogoImageUrl}}" height="27" width="auto" margin="0" padding="0")
|
||||
unless currentSetting.customTopLeftCornerLogoLinkUrl
|
||||
img(src="{{currentSetting.customTopLeftCornerLogoImageUrl}}" height="27" width="auto" margin="0" padding="0")
|
||||
unless currentSetting.customTopLeftCornerLogoImageUrl
|
||||
img(src="{{pathFor '/logo-header.png'}}" alt="")
|
||||
ul
|
||||
li
|
||||
a(href="{{pathFor 'home'}}")
|
||||
@@ -52,17 +65,6 @@ template(name="header")
|
||||
#header-main-bar(class="{{#if wrappedHeader}}wrapper{{/if}}")
|
||||
+Template.dynamic(template=headerBar)
|
||||
|
||||
//unless hideLogo
|
||||
|
||||
//-
|
||||
On sandstorm, the logo shouldn't be clickable, because we only have one
|
||||
page/document on it, and we don't want to see the home page containing
|
||||
the list of all boards.
|
||||
|
||||
// unless currentSetting.hideLogo
|
||||
// a.wekan-logo(href="{{pathFor 'home'}}" title="{{_ 'header-logo-title'}}")
|
||||
// img(src="{{pathFor '/logo-header.png'}}" alt="")
|
||||
|
||||
if appIsOffline
|
||||
+offlineWarning
|
||||
|
||||
|
||||
@@ -19,6 +19,27 @@ head
|
||||
|
||||
template(name="userFormsLayout")
|
||||
section.auth-layout
|
||||
if currentSetting.hideLogo
|
||||
h1.at-form-landing-logo
|
||||
br
|
||||
br
|
||||
unless currentSetting.hideLogo
|
||||
h1.at-form-landing-logo
|
||||
if currentSetting.customLoginLogoImageUrl
|
||||
if currentSetting.customLoginLogoLinkUrl
|
||||
a(href="{{currentSetting.customLoginLogoLinkUrl}}")
|
||||
img(src="{{currentSetting.customLoginLogoImageUrl}}" width="300" height="auto")
|
||||
br
|
||||
unless currentSetting.customLoginLogoLinkUrl
|
||||
img(src="{{currentSetting.customLoginLogoImageUrl}}" width="300" height="auto")
|
||||
br
|
||||
unless currentSetting.customLoginLogoImageUrl
|
||||
img(src="{{pathFor '/wekan-logo.svg'}}" alt="" width="300" height="auto")
|
||||
br
|
||||
if currentSetting.textBelowCustomLoginLogo
|
||||
+viewer
|
||||
| {{currentSetting.textBelowCustomLoginLogo}}
|
||||
br
|
||||
section.auth-dialog
|
||||
if isLoading
|
||||
+loader
|
||||
|
||||
@@ -447,7 +447,6 @@ a
|
||||
flex-direction: column
|
||||
align-items: center
|
||||
justify-content: center
|
||||
height: 100%
|
||||
|
||||
.auth-dialog
|
||||
margin: 0 !important
|
||||
|
||||
@@ -104,6 +104,8 @@ template(name="peopleRow")
|
||||
a.edit-user
|
||||
i.fa.fa-edit
|
||||
| {{_ 'edit'}}
|
||||
a.more-settings-user
|
||||
i.fa.fa-ellipsis-h
|
||||
|
||||
template(name="editUserPopup")
|
||||
form
|
||||
@@ -200,3 +202,10 @@ template(name="newUserPopup")
|
||||
input.js-profile-password(type="password")
|
||||
div.buttonsContainer
|
||||
input.primary.wide(type="submit" value="{{_ 'save'}}")
|
||||
|
||||
template(name="settingsUserPopup")
|
||||
ul.pop-over-list
|
||||
li
|
||||
a.impersonate-user
|
||||
i.fa.fa-user
|
||||
| {{_ 'impersonate-user'}}
|
||||
@@ -194,6 +194,7 @@ BlazeComponent.extendComponent({
|
||||
return [
|
||||
{
|
||||
'click a.edit-user': Popup.open('editUser'),
|
||||
'click a.more-settings-user': Popup.open('settingsUser'),
|
||||
},
|
||||
];
|
||||
},
|
||||
@@ -343,3 +344,16 @@ Template.newUserPopup.events({
|
||||
Popup.close();
|
||||
},
|
||||
});
|
||||
|
||||
Template.settingsUserPopup.events({
|
||||
'click .impersonate-user'(event) {
|
||||
event.preventDefault();
|
||||
|
||||
Meteor.call('impersonate', this.userId, err => {
|
||||
if (!err) {
|
||||
FlowRouter.go('/');
|
||||
Meteor.connection.setUserId(this.userId);
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
@@ -46,3 +46,6 @@ table
|
||||
|
||||
div
|
||||
margin: auto
|
||||
|
||||
.more-settings-user
|
||||
margin-left: 10px;
|
||||
@@ -163,13 +163,6 @@ template(name='announcementSettings')
|
||||
|
||||
template(name='layoutSettings')
|
||||
ul#layout-setting.setting-detail
|
||||
//li.layout-form
|
||||
.title {{_ 'hide-logo'}}
|
||||
.form-group.flex
|
||||
input.wekan-form-control#hide-logo(type="radio" name="hideLogo" value="true" checked="{{#if currentSetting.hideLogo}}checked{{/if}}")
|
||||
span {{_ 'yes'}}
|
||||
input.wekan-form-control#hide-logo(type="radio" name="hideLogo" value="false" checked="{{#unless currentSetting.hideLogo}}checked{{/unless}}")
|
||||
span {{_ 'no'}}
|
||||
li.layout-form
|
||||
.title {{_ 'display-authentication-method'}}
|
||||
.form-group.flex
|
||||
@@ -184,10 +177,36 @@ template(name='layoutSettings')
|
||||
.title {{_ 'custom-product-name'}}
|
||||
.form-group
|
||||
input.wekan-form-control#product-name(type="text", placeholder="" value="{{currentSetting.productName}}")
|
||||
li.layout-form
|
||||
.title {{_ 'hide-logo'}}
|
||||
.form-group.flex
|
||||
input.wekan-form-control#hide-logo(type="radio" name="hideLogo" value="true" checked="{{#if currentSetting.hideLogo}}checked{{/if}}")
|
||||
span {{_ 'yes'}}
|
||||
input.wekan-form-control#hide-logo(type="radio" name="hideLogo" value="false" checked="{{#unless currentSetting.hideLogo}}checked{{/unless}}")
|
||||
span {{_ 'no'}}
|
||||
li.layout-form
|
||||
.title {{_ 'custom-login-logo-image-url'}}
|
||||
.form-group
|
||||
input.wekan-form-control#custom-login-logo-image-url(type="text", placeholder="" value="{{currentSetting.customLoginLogoImageUrl}}")
|
||||
li.layout-form
|
||||
.title {{_ 'custom-login-logo-link-url'}}
|
||||
.form-group
|
||||
input.wekan-form-control#custom-login-logo-link-url(type="text", placeholder="" value="{{currentSetting.customLoginLogoLinkUrl}}")
|
||||
li.layout-form
|
||||
.title {{_ 'text-below-custom-login-logo'}}
|
||||
.form-group
|
||||
textarea#text-below-custom-login-logo.wekan-form-control= currentSetting.textBelowCustomLoginLogo
|
||||
li.layout-form
|
||||
.title {{_ 'custom-top-left-corner-logo-image-url'}}
|
||||
.form-group
|
||||
input.wekan-form-control#custom-top-left-corner-logo-image-url(type="text", placeholder="" value="{{currentSetting.customTopLeftCornerLogoImageUrl}}")
|
||||
li.layout-form
|
||||
.title {{_ 'custom-top-left-corner-logo-link-url'}}
|
||||
.form-group
|
||||
input.wekan-form-control#custom-top-left-corner-logo-link-url(type="text", placeholder="" value="{{currentSetting.customTopLeftCornerLogoLinkUrl}}")
|
||||
li
|
||||
button.js-save-layout.primary {{_ 'save'}}
|
||||
|
||||
|
||||
template(name='selectAuthenticationMethod')
|
||||
select#defaultAuthenticationMethod
|
||||
each authentications
|
||||
|
||||
@@ -167,6 +167,25 @@ BlazeComponent.extendComponent({
|
||||
const productName = $('#product-name')
|
||||
.val()
|
||||
.trim();
|
||||
const customLoginLogoImageUrl = $('#custom-login-logo-image-url')
|
||||
.val()
|
||||
.trim();
|
||||
const customLoginLogoLinkUrl = $('#custom-login-logo-link-url')
|
||||
.val()
|
||||
.trim();
|
||||
const textBelowCustomLoginLogo = $('#text-below-custom-login-logo')
|
||||
.val()
|
||||
.trim();
|
||||
const customTopLeftCornerLogoImageUrl = $(
|
||||
'#custom-top-left-corner-logo-image-url',
|
||||
)
|
||||
.val()
|
||||
.trim();
|
||||
const customTopLeftCornerLogoLinkUrl = $(
|
||||
'#custom-top-left-corner-logo-link-url',
|
||||
)
|
||||
.val()
|
||||
.trim();
|
||||
const hideLogoChange = $('input[name=hideLogo]:checked').val() === 'true';
|
||||
const displayAuthenticationMethod =
|
||||
$('input[name=displayAuthenticationMethod]:checked').val() === 'true';
|
||||
@@ -177,6 +196,11 @@ BlazeComponent.extendComponent({
|
||||
$set: {
|
||||
productName,
|
||||
hideLogo: hideLogoChange,
|
||||
customLoginLogoImageUrl,
|
||||
customLoginLogoLinkUrl,
|
||||
textBelowCustomLoginLogo,
|
||||
customTopLeftCornerLogoImageUrl,
|
||||
customTopLeftCornerLogoLinkUrl,
|
||||
displayAuthenticationMethod,
|
||||
defaultAuthenticationMethod,
|
||||
},
|
||||
|
||||
@@ -323,6 +323,9 @@ services:
|
||||
# ==== Debug OIDC OAuth2 etc ====
|
||||
#- DEBUG=true
|
||||
#-----------------------------------------------------------------
|
||||
# ==== OAUTH2 ORACLE on premise identity manager OIM ====
|
||||
#- ORACLE_OIM_ENABLED=true
|
||||
#-----------------------------------------------------------------
|
||||
# ==== OAUTH2 AZURE ====
|
||||
# https://github.com/wekan/wekan/wiki/Azure
|
||||
# 1) Register the application with Azure. Make sure you capture
|
||||
|
||||
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
@@ -359,6 +359,7 @@
|
||||
"headerBarCreateBoardPopup-title": "Create Board",
|
||||
"home": "Home",
|
||||
"import": "Import",
|
||||
"impersonate-user": "Impersonate user",
|
||||
"link": "Link",
|
||||
"import-board": "import board",
|
||||
"import-board-c": "Import board",
|
||||
@@ -403,6 +404,7 @@
|
||||
"list-select-cards": "Select all cards in this list",
|
||||
"set-color-list": "Set Color",
|
||||
"listActionPopup-title": "List Actions",
|
||||
"settingsUserPopup-title": "User Settings",
|
||||
"swimlaneActionPopup-title": "Swimlane Actions",
|
||||
"swimlaneAddPopup-title": "Add a Swimlane below",
|
||||
"listImportCardPopup-title": "Import a Trello card",
|
||||
@@ -512,6 +514,11 @@
|
||||
"upload": "Upload",
|
||||
"upload-avatar": "Upload an avatar",
|
||||
"uploaded-avatar": "Uploaded an avatar",
|
||||
"custom-top-left-corner-logo-image-url": "Custom Top Left Corner Logo Image URL",
|
||||
"custom-top-left-corner-logo-link-url": "Custom Top Left Corner Logo Link URL",
|
||||
"custom-login-logo-image-url": "Custom Login Logo Image URL",
|
||||
"custom-login-logo-link-url": "Custom Login Logo Link URL",
|
||||
"text-below-custom-login-logo": "Text below Custom Login Logo",
|
||||
"username": "Username",
|
||||
"view-it": "View it",
|
||||
"warn-list-archived": "warning: this card is in an list at Archive",
|
||||
|
||||
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
+828
-821
File diff suppressed because it is too large.
Load diff
@@ -45,6 +45,26 @@ Settings.attachSchema(
|
||||
type: Boolean,
|
||||
optional: true,
|
||||
},
|
||||
customLoginLogoImageUrl: {
|
||||
type: String,
|
||||
optional: true,
|
||||
},
|
||||
customLoginLogoLinkUrl: {
|
||||
type: String,
|
||||
optional: true,
|
||||
},
|
||||
textBelowCustomLoginLogo: {
|
||||
type: String,
|
||||
optional: true,
|
||||
},
|
||||
customTopLeftCornerLogoImageUrl: {
|
||||
type: String,
|
||||
optional: true,
|
||||
},
|
||||
customTopLeftCornerLogoLinkUrl: {
|
||||
type: String,
|
||||
optional: true,
|
||||
},
|
||||
createdAt: {
|
||||
type: Date,
|
||||
denyUpdate: true,
|
||||
|
||||
@@ -905,6 +905,16 @@ if (Meteor.isServer) {
|
||||
}
|
||||
return { username: user.username, email: user.emails[0].address };
|
||||
},
|
||||
impersonate(userId) {
|
||||
check(userId, String);
|
||||
|
||||
if (!Meteor.users.findOne(userId))
|
||||
throw new Meteor.Error(404, 'User not found');
|
||||
if (!Meteor.user().isAdmin)
|
||||
throw new Meteor.Error(403, 'Permission denied');
|
||||
|
||||
this.setUserId(userId);
|
||||
},
|
||||
});
|
||||
Accounts.onCreateUser((options, user) => {
|
||||
const userCount = Users.find().count();
|
||||
|
||||
Generated
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v4.38.0",
|
||||
"version": "v4.41.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wekan",
|
||||
"version": "v4.38.0",
|
||||
"version": "v4.41.0",
|
||||
"description": "Open-Source kanban",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
|
||||
@@ -33,7 +33,19 @@ OAuth.registerService('oidc', 2, null, function (query) {
|
||||
serviceData.fullname = userinfo[process.env.OAUTH2_FULLNAME_MAP]; // || userinfo["displayName"];
|
||||
serviceData.accessToken = accessToken;
|
||||
serviceData.expiresAt = expiresAt;
|
||||
serviceData.email = userinfo[process.env.OAUTH2_EMAIL_MAP]; // || userinfo["email"];
|
||||
|
||||
// If on Oracle OIM email is empty or null, get info from username
|
||||
if (process.env.ORACLE_OIM_ENABLED === 'true' || process.env.ORACLE_OIM_ENABLED === true) {
|
||||
if (userinfo[process.env.OAUTH2_EMAIL_MAP]) {
|
||||
serviceData.email = userinfo[process.env.OAUTH2_EMAIL_MAP];
|
||||
} else {
|
||||
serviceData.email = userinfo[process.env.OAUTH2_USERNAME_MAP];
|
||||
}
|
||||
}
|
||||
|
||||
if (process.env.ORACLE_OIM_ENABLED !== 'true' && process.env.ORACLE_OIM_ENABLED !== true) {
|
||||
serviceData.email = userinfo[process.env.OAUTH2_EMAIL_MAP]; // || userinfo["email"];
|
||||
}
|
||||
|
||||
if (accessToken) {
|
||||
var tokenContent = getTokenContent(accessToken);
|
||||
@@ -61,47 +73,108 @@ if (Meteor.release) {
|
||||
userAgent += "/" + Meteor.release;
|
||||
}
|
||||
|
||||
var getToken = function (query) {
|
||||
var debug = process.env.DEBUG || false;
|
||||
var config = getConfiguration();
|
||||
if(config.tokenEndpoint.includes('https://')){
|
||||
var serverTokenEndpoint = config.tokenEndpoint;
|
||||
}else{
|
||||
var serverTokenEndpoint = config.serverUrl + config.tokenEndpoint;
|
||||
}
|
||||
var requestPermissions = config.requestPermissions;
|
||||
var response;
|
||||
if (process.env.ORACLE_OIM_ENABLED !== 'true' && process.env.ORACLE_OIM_ENABLED !== true) {
|
||||
var getToken = function (query) {
|
||||
var debug = process.env.DEBUG || false;
|
||||
var config = getConfiguration();
|
||||
if(config.tokenEndpoint.includes('https://')){
|
||||
var serverTokenEndpoint = config.tokenEndpoint;
|
||||
}else{
|
||||
var serverTokenEndpoint = config.serverUrl + config.tokenEndpoint;
|
||||
}
|
||||
var requestPermissions = config.requestPermissions;
|
||||
var response;
|
||||
|
||||
try {
|
||||
response = HTTP.post(
|
||||
serverTokenEndpoint,
|
||||
{
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
"User-Agent": userAgent
|
||||
},
|
||||
params: {
|
||||
code: query.code,
|
||||
client_id: config.clientId,
|
||||
client_secret: OAuth.openSecret(config.secret),
|
||||
redirect_uri: OAuth._redirectUri('oidc', config),
|
||||
grant_type: 'authorization_code',
|
||||
state: query.state
|
||||
try {
|
||||
response = HTTP.post(
|
||||
serverTokenEndpoint,
|
||||
{
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
"User-Agent": userAgent
|
||||
},
|
||||
params: {
|
||||
code: query.code,
|
||||
client_id: config.clientId,
|
||||
client_secret: OAuth.openSecret(config.secret),
|
||||
redirect_uri: OAuth._redirectUri('oidc', config),
|
||||
grant_type: 'authorization_code',
|
||||
state: query.state
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
} catch (err) {
|
||||
throw _.extend(new Error("Failed to get token from OIDC " + serverTokenEndpoint + ": " + err.message),
|
||||
{ response: err.response });
|
||||
}
|
||||
if (response.data.error) {
|
||||
// if the http response was a json object with an error attribute
|
||||
throw new Error("Failed to complete handshake with OIDC " + serverTokenEndpoint + ": " + response.data.error);
|
||||
} else {
|
||||
if (debug) console.log('XXX: getToken response: ', response.data);
|
||||
return response.data;
|
||||
}
|
||||
};
|
||||
);
|
||||
} catch (err) {
|
||||
throw _.extend(new Error("Failed to get token from OIDC " + serverTokenEndpoint + ": " + err.message),
|
||||
{ response: err.response });
|
||||
}
|
||||
if (response.data.error) {
|
||||
// if the http response was a json object with an error attribute
|
||||
throw new Error("Failed to complete handshake with OIDC " + serverTokenEndpoint + ": " + response.data.error);
|
||||
} else {
|
||||
if (debug) console.log('XXX: getToken response: ', response.data);
|
||||
return response.data;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
if (process.env.ORACLE_OIM_ENABLED === 'true' || process.env.ORACLE_OIM_ENABLED === true) {
|
||||
|
||||
var getToken = function (query) {
|
||||
var debug = (process.env.DEBUG === 'true' || process.env.DEBUG === true) || false;
|
||||
var config = getConfiguration();
|
||||
if(config.tokenEndpoint.includes('https://')){
|
||||
var serverTokenEndpoint = config.tokenEndpoint;
|
||||
}else{
|
||||
var serverTokenEndpoint = config.serverUrl + config.tokenEndpoint;
|
||||
}
|
||||
var requestPermissions = config.requestPermissions;
|
||||
var response;
|
||||
|
||||
// OIM needs basic Authentication token in the header - ClientID + SECRET in base64
|
||||
var dataToken=null;
|
||||
var strBasicToken=null;
|
||||
var strBasicToken64=null;
|
||||
|
||||
dataToken = process.env.OAUTH2_CLIENT_ID + ':' + process.env.OAUTH2_SECRET;
|
||||
strBasicToken = new Buffer(dataToken);
|
||||
strBasicToken64 = strBasicToken.toString('base64');
|
||||
|
||||
// eslint-disable-next-line no-console
|
||||
if (debug) console.log('Basic Token: ', strBasicToken64);
|
||||
|
||||
try {
|
||||
response = HTTP.post(
|
||||
serverTokenEndpoint,
|
||||
{
|
||||
headers: {
|
||||
Accept: 'application/json',
|
||||
"User-Agent": userAgent,
|
||||
"Authorization": "Basic " + strBasicToken64
|
||||
},
|
||||
params: {
|
||||
code: query.code,
|
||||
client_id: config.clientId,
|
||||
client_secret: OAuth.openSecret(config.secret),
|
||||
redirect_uri: OAuth._redirectUri('oidc', config),
|
||||
grant_type: 'authorization_code',
|
||||
state: query.state
|
||||
}
|
||||
}
|
||||
);
|
||||
} catch (err) {
|
||||
throw _.extend(new Error("Failed to get token from OIDC " + serverTokenEndpoint + ": " + err.message),
|
||||
{ response: err.response });
|
||||
}
|
||||
if (response.data.error) {
|
||||
// if the http response was a json object with an error attribute
|
||||
throw new Error("Failed to complete handshake with OIDC " + serverTokenEndpoint + ": " + response.data.error);
|
||||
} else {
|
||||
// eslint-disable-next-line no-console
|
||||
if (debug) console.log('XXX: getToken response: ', response.data);
|
||||
return response.data;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var getUserInfo = function (accessToken) {
|
||||
var debug = process.env.DEBUG || false;
|
||||
|
||||
@@ -1524,7 +1524,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 v4.38">Wekan REST API v4.38</a>
|
||||
<a href="#wekan-rest-api" class="toc-h1 toc-link" data-title="Wekan REST API v4.41">Wekan REST API v4.41</a>
|
||||
|
||||
</li>
|
||||
|
||||
@@ -2027,7 +2027,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 v4.38</h1>
|
||||
<h1 id="wekan-rest-api">Wekan REST API v4.41</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>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
swagger: '2.0'
|
||||
info:
|
||||
title: Wekan REST API
|
||||
version: v4.38
|
||||
version: v4.41
|
||||
description: |
|
||||
The REST API allows you to control and extend Wekan with ease.
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 302.5 210.37"><defs><style>.cls-1{fill:none;}.cls-2{clip-path:url(#clip-path);}.cls-3{fill:url(#linear-gradient);}.cls-4{fill:#7addfc;}.cls-5{fill:#529fdd;}.cls-6{fill:#fff;}</style><clipPath id="clip-path" transform="translate(0 0)"><path class="cls-1" d="M260.63,180.45H39.9c-7,0-9-2.27-9-9V31.71c0-6.81,2.1-9,9-9H260.63c6.8,0,9,2.13,9,9V171.45c0,6.57-2.08,9-9,9"/></clipPath><linearGradient id="linear-gradient" x1="-716.13" y1="35.06" x2="-715.13" y2="35.06" gradientTransform="matrix(0, -157.69, -157.69, 0, 5678.87, -112746.33)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#007c8f"/><stop offset="0.37" stop-color="#007088"/><stop offset="1" stop-color="#005377"/></linearGradient></defs><title>wekan-1_2</title><g class="cls-2"><rect class="cls-3" x="30.9" y="22.76" width="238.73" height="157.69"/><path class="cls-4" d="M225.06,138.25v-.54h-149a2.5,2.5,0,0,1-2.5-2.5v-69a2.5,2.5,0,0,1,2.5-2.5h149a2.5,2.5,0,0,1,2.5,2.5v69.07a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V66.18a3.5,3.5,0,0,0-3.5-3.5h-149a3.5,3.5,0,0,0-3.5,3.5v69.07a3.5,3.5,0,0,0,3.5,3.5h149Z" transform="translate(0 0)"/><path class="cls-5" d="M143.05,55.9v-.5H75.93a2.5,2.5,0,0,1-2.5-2.5V3.5A2.5,2.5,0,0,1,75.93,1h67.12a2.5,2.5,0,0,1,2.5,2.5V52.9a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V3.5a3.5,3.5,0,0,0-3.5-3.5H75.93a3.5,3.5,0,0,0-3.5,3.5V52.9a3.5,3.5,0,0,0,3.5,3.5h67.12Z" transform="translate(0 0)"/><path class="cls-5" d="M143.05,200.92v-.5H75.93a2.5,2.5,0,0,1-2.5-2.5v-49.4a2.5,2.5,0,0,1,2.5-2.5h67.12a2.5,2.5,0,0,1,2.5,2.5v49.4a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5v-49.4a3.5,3.5,0,0,0-3.5-3.5H75.93a3.5,3.5,0,0,0-3.5,3.5v49.4a3.5,3.5,0,0,0,3.5,3.5h67.12Z" transform="translate(0 0)"/><path class="cls-5" d="M224.43,55.9v-.5H157.32a2.5,2.5,0,0,1-2.5-2.5V3.5a2.5,2.5,0,0,1,2.5-2.5h67.12a2.5,2.5,0,0,1,2.5,2.5V52.9a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V3.5a3.5,3.5,0,0,0-3.5-3.5H157.32a3.5,3.5,0,0,0-3.5,3.5V52.9a3.5,3.5,0,0,0,3.5,3.5h67.12Z" transform="translate(0 0)"/><path class="cls-5" d="M224.43,200.92v-.5H157.32a2.5,2.5,0,0,1-2.5-2.5v-49.4a2.5,2.5,0,0,1,2.5-2.5h67.12a2.5,2.5,0,0,1,2.5,2.5v49.4a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5v-49.4a3.5,3.5,0,0,0-3.5-3.5H157.32a3.5,3.5,0,0,0-3.5,3.5v49.4a3.5,3.5,0,0,0,3.5,3.5h67.12Z" transform="translate(0 0)"/><path class="cls-5" d="M299,94.93v-.5H238.16a2.5,2.5,0,0,1-2.5-2.5V5.08a2.5,2.5,0,0,1,2.5-2.5H299a2.5,2.5,0,0,1,2.5,2.5V91.93a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V5.08a3.5,3.5,0,0,0-3.5-3.5H238.16a3.5,3.5,0,0,0-3.5,3.5V91.93a3.5,3.5,0,0,0,3.5,3.5H299Z" transform="translate(0 0)"/><path class="cls-5" d="M299,209.87v-.5H238.16a2.5,2.5,0,0,1-2.5-2.5V105.18a2.5,2.5,0,0,1,2.5-2.5H299a2.5,2.5,0,0,1,2.5,2.5V206.87a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V105.18a3.5,3.5,0,0,0-3.5-3.5H238.16a3.5,3.5,0,0,0-3.5,3.5V206.87a3.5,3.5,0,0,0,3.5,3.5H299Z" transform="translate(0 0)"/><path class="cls-5" d="M63,94.93v-.5H3.5A2.5,2.5,0,0,1,1,91.93V5.08a2.5,2.5,0,0,1,2.5-2.5H63a2.5,2.5,0,0,1,2.5,2.5V91.93a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V5.08A3.5,3.5,0,0,0,63,1.58H3.5A3.5,3.5,0,0,0,0,5.08V91.93a3.5,3.5,0,0,0,3.5,3.5H63Z" transform="translate(0 0)"/><path class="cls-5" d="M63,209.87v-.5H3.5a2.5,2.5,0,0,1-2.5-2.5V105.18a2.5,2.5,0,0,1,2.5-2.5H63a2.5,2.5,0,0,1,2.5,2.5V206.87a2.5,2.5,0,0,1-2.5,2.5v1a3.5,3.5,0,0,0,3.5-3.5V105.18a3.5,3.5,0,0,0-3.5-3.5H3.5a3.5,3.5,0,0,0-3.5,3.5V206.87a3.5,3.5,0,0,0,3.5,3.5H63Z" transform="translate(0 0)"/><path class="cls-6" d="M208.62,108.44a1.51,1.51,0,0,0-.83.33q-3.12,8.16-4.95,7.92c-.35,0-.56-.37-.58-1a10.31,10.31,0,0,1,.31-2.53c.23-1.06.5-2.12.78-3.19s.56-2.28.89-3.61.6-2.38.75-3.14a1.15,1.15,0,0,0-.47-1.28,2.48,2.48,0,0,0-1.89-.06c-3.55.79-6.33,3.92-8.31,9.36q.92-6.36,1.14-7.17c.25-1.11.45-1.82.56-2.14a9.13,9.13,0,0,0-1.81-.11,17.39,17.39,0,0,0-3.45.33c-1.27.24-1.93.54-2,.92-.22,1.92-.24,3.93-.44,5.92s-.32,3.69-.44,5.31a10.85,10.85,0,0,1-1.25,1.69c-.53.55-1,.81-1.42.75-1-.16-.37-3,1.53-8.64,1.45-4.33.71-6.16-5.22-6.2a10.64,10.64,0,0,0-5.47,1.67,12.27,12.27,0,0,0-5.33,7c-.09.31-.16.6-.22.89a13.11,13.11,0,0,1-.83,1.36,6.94,6.94,0,0,1-1.64,1.94,1.67,1.67,0,0,1-1.14.33c-1-.16-2.28-1-3.7-2.58-1-1.09-2.86-3-3.78-4.14,5.64-10.17,20.73-12.5,25.06-12.5,1.36,0,1.41-6.25,0-6.25-17.55,0-25.36,14.85-27.09,20,.15-1.65.27-2.71.5-4.86s.4-3.85.53-5.11.26-2.73.42-4.36.32-2.91.42-3.86.23-2,.36-3.11.23-2,.33-2.69l.31-1.94c.1-.65.18-1.19.28-1.58a.94.94,0,0,0-.69-1.31,5,5,0,0,0-.94-.06A1.87,1.87,0,0,0,158,81a1.92,1.92,0,0,0-.69.94q-3.71,8.75-6.14,27.17a13.62,13.62,0,0,1-4.25,6,7.65,7.65,0,0,1-5.33,1.86,3.36,3.36,0,0,1-2.83-2.42,9.53,9.53,0,0,1-.19-5.47c.86-4.11,2-6.17,3.33-6.17.91,0,.95,1.54.08,4.64-.66,2.21-1.58,3.69-2.75,4.42-.41.25-.58.46-.53.58s.36.19.92,0a19.09,19.09,0,0,0,5.56-2.31,6.17,6.17,0,0,0,3-3.28,3.08,3.08,0,0,0-1.27-3.25,7.24,7.24,0,0,0-4.33-1.53,11.24,11.24,0,0,0-5.08,1l.11-.19a47.7,47.7,0,0,0,5.75-12q1.Line truncated
|
||||
|
After Width: | Height: | Size: 7.7 KiB |
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
|
||||
appTitle = (defaultText = "Wekan"),
|
||||
# The name of the app as it is displayed to the user.
|
||||
|
||||
appVersion = 438,
|
||||
appVersion = 441,
|
||||
# Increment this for every release.
|
||||
|
||||
appMarketingVersion = (defaultText = "4.38.0~2020-09-16"),
|
||||
appMarketingVersion = (defaultText = "4.41.0~2020-10-03"),
|
||||
# Human-readable presentation of the app version.
|
||||
|
||||
minUpgradableAppVersion = 0,
|
||||
|
||||
+86
-64
@@ -64,6 +64,28 @@ Meteor.startup(() => {
|
||||
|
||||
if (Meteor.isServer) {
|
||||
if (
|
||||
process.env.ORACLE_OIM_ENABLED === 'true' ||
|
||||
process.env.ORACLE_OIM_ENABLED === true
|
||||
) {
|
||||
ServiceConfiguration.configurations.upsert(
|
||||
// eslint-disable-line no-undef
|
||||
{ service: 'oidc' },
|
||||
{
|
||||
$set: {
|
||||
loginStyle: process.env.OAUTH2_LOGIN_STYLE,
|
||||
clientId: process.env.OAUTH2_CLIENT_ID,
|
||||
secret: process.env.OAUTH2_SECRET,
|
||||
serverUrl: process.env.OAUTH2_SERVER_URL,
|
||||
authorizationEndpoint: process.env.OAUTH2_AUTH_ENDPOINT,
|
||||
userinfoEndpoint: process.env.OAUTH2_USERINFO_ENDPOINT,
|
||||
tokenEndpoint: process.env.OAUTH2_TOKEN_ENDPOINT,
|
||||
idTokenWhitelistFields:
|
||||
process.env.OAUTH2_ID_TOKEN_WHITELIST_FIELDS || [],
|
||||
requestPermissions: 'BDFUserProfile.me',
|
||||
},
|
||||
},
|
||||
);
|
||||
} else if (
|
||||
process.env.OAUTH2_ENABLED === 'true' ||
|
||||
process.env.OAUTH2_ENABLED === true
|
||||
) {
|
||||
@@ -87,73 +109,73 @@ Meteor.startup(() => {
|
||||
// OAUTH2_REQUEST_PERMISSIONS || 'openid profile email',
|
||||
},
|
||||
);
|
||||
}
|
||||
} else if (
|
||||
process.env.CAS_ENABLED === 'true' ||
|
||||
process.env.CAS_ENABLED === true
|
||||
) {
|
||||
ServiceConfiguration.configurations.upsert(
|
||||
// eslint-disable-line no-undef
|
||||
{ service: 'cas' },
|
||||
{
|
||||
$set: {
|
||||
baseUrl: process.env.CAS_BASE_URL,
|
||||
loginUrl: process.env.CAS_LOGIN_URL,
|
||||
serviceParam: 'service',
|
||||
popupWidth: 810,
|
||||
popupHeight: 610,
|
||||
popup: true,
|
||||
autoClose: true,
|
||||
validateUrl: process.env.CASE_VALIDATE_URL,
|
||||
casVersion: 3.0,
|
||||
attributes: {
|
||||
debug: process.env.DEBUG,
|
||||
} else if (
|
||||
process.env.CAS_ENABLED === 'true' ||
|
||||
process.env.CAS_ENABLED === true
|
||||
) {
|
||||
ServiceConfiguration.configurations.upsert(
|
||||
// eslint-disable-line no-undef
|
||||
{ service: 'cas' },
|
||||
{
|
||||
$set: {
|
||||
baseUrl: process.env.CAS_BASE_URL,
|
||||
loginUrl: process.env.CAS_LOGIN_URL,
|
||||
serviceParam: 'service',
|
||||
popupWidth: 810,
|
||||
popupHeight: 610,
|
||||
popup: true,
|
||||
autoClose: true,
|
||||
validateUrl: process.env.CASE_VALIDATE_URL,
|
||||
casVersion: 3.0,
|
||||
attributes: {
|
||||
debug: process.env.DEBUG,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
);
|
||||
} else if (
|
||||
process.env.SAML_ENABLED === 'true' ||
|
||||
process.env.SAML_ENABLED === true
|
||||
) {
|
||||
ServiceConfiguration.configurations.upsert(
|
||||
// eslint-disable-line no-undef
|
||||
{ service: 'saml' },
|
||||
{
|
||||
$set: {
|
||||
provider: process.env.SAML_PROVIDER,
|
||||
entryPoint: process.env.SAML_ENTRYPOINT,
|
||||
issuer: process.env.SAML_ISSUER,
|
||||
cert: process.env.SAML_CERT,
|
||||
idpSLORedirectURL: process.env.SAML_IDPSLO_REDIRECTURL,
|
||||
privateKeyFile: process.env.SAML_PRIVATE_KEYFILE,
|
||||
publicCertFile: process.env.SAML_PUBLIC_CERTFILE,
|
||||
identifierFormat: process.env.SAML_IDENTIFIER_FORMAT,
|
||||
localProfileMatchAttribute:
|
||||
process.env.SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE,
|
||||
attributesSAML: process.env.SAML_ATTRIBUTES || [
|
||||
'sn',
|
||||
'givenName',
|
||||
'mail',
|
||||
],
|
||||
);
|
||||
} else if (
|
||||
process.env.SAML_ENABLED === 'true' ||
|
||||
process.env.SAML_ENABLED === true
|
||||
) {
|
||||
ServiceConfiguration.configurations.upsert(
|
||||
// eslint-disable-line no-undef
|
||||
{ service: 'saml' },
|
||||
{
|
||||
$set: {
|
||||
provider: process.env.SAML_PROVIDER,
|
||||
entryPoint: process.env.SAML_ENTRYPOINT,
|
||||
issuer: process.env.SAML_ISSUER,
|
||||
cert: process.env.SAML_CERT,
|
||||
idpSLORedirectURL: process.env.SAML_IDPSLO_REDIRECTURL,
|
||||
privateKeyFile: process.env.SAML_PRIVATE_KEYFILE,
|
||||
publicCertFile: process.env.SAML_PUBLIC_CERTFILE,
|
||||
identifierFormat: process.env.SAML_IDENTIFIER_FORMAT,
|
||||
localProfileMatchAttribute:
|
||||
process.env.SAML_LOCAL_PROFILE_MATCH_ATTRIBUTE,
|
||||
attributesSAML: process.env.SAML_ATTRIBUTES || [
|
||||
'sn',
|
||||
'givenName',
|
||||
'mail',
|
||||
],
|
||||
|
||||
/*
|
||||
settings = {"saml":[{
|
||||
"provider":"openam",
|
||||
"entryPoint":"https://openam.idp.io/openam/SSORedirect/metaAlias/zimt/idp",
|
||||
"issuer": "https://sp.zimt.io/", //replace with url of your app
|
||||
"cert":"MIICizCCAfQCCQCY8tKaMc0 LOTS OF FUNNY CHARS ==",
|
||||
"idpSLORedirectURL": "http://openam.idp.io/openam/IDPSloRedirect/metaAlias/zimt/idp",
|
||||
"privateKeyFile": "certs/mykey.pem", // path is relative to $METEOR-PROJECT/private
|
||||
"publicCertFile": "certs/mycert.pem", // eg $METEOR-PROJECT/private/certs/mycert.pem
|
||||
"dynamicProfile": true // set to true if we want to create a user in Meteor.users dynamically if SAML assertion is valid
|
||||
"identifierFormat": "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", // Defaults to urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
|
||||
"localProfileMatchAttribute": "telephoneNumber" // CAUTION: this will be mapped to profile.<localProfileMatchAttribute> attribute in Mongo if identifierFormat (see above) differs from urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress,
|
||||
"attributesSAML": [telephoneNumber, sn, givenName, mail], // attrs from SAML attr statement, which will be used for local Meteor profile creation. Currently no real attribute mapping. If required use mapping on IdP side.
|
||||
}]}
|
||||
*/
|
||||
/*
|
||||
settings = {"saml":[{
|
||||
"provider":"openam",
|
||||
"entryPoint":"https://openam.idp.io/openam/SSORedirect/metaAlias/zimt/idp",
|
||||
"issuer": "https://sp.zimt.io/", //replace with url of your app
|
||||
"cert":"MIICizCCAfQCCQCY8tKaMc0 LOTS OF FUNNY CHARS ==",
|
||||
"idpSLORedirectURL": "http://openam.idp.io/openam/IDPSloRedirect/metaAlias/zimt/idp",
|
||||
"privateKeyFile": "certs/mykey.pem", // path is relative to $METEOR-PROJECT/private
|
||||
"publicCertFile": "certs/mycert.pem", // eg $METEOR-PROJECT/private/certs/mycert.pem
|
||||
"dynamicProfile": true // set to true if we want to create a user in Meteor.users dynamically if SAML assertion is valid
|
||||
"identifierFormat": "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", // Defaults to urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
|
||||
"localProfileMatchAttribute": "telephoneNumber" // CAUTION: this will be mapped to profile.<localProfileMatchAttribute> attribute in Mongo if identifierFormat (see above) differs from urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress,
|
||||
"attributesSAML": [telephoneNumber, sn, givenName, mail], // attrs from SAML attr statement, which will be used for local Meteor profile creation. Currently no real attribute mapping. If required use mapping on IdP side.
|
||||
}]}
|
||||
*/
|
||||
},
|
||||
},
|
||||
},
|
||||
);
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1044,3 +1044,19 @@ Migrations.add('add-default-profile-view', () => {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Migrations.add('add-hide-logo-by-default', () => {
|
||||
Settings.update(
|
||||
{
|
||||
hideLogo: {
|
||||
hideLogo: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
$set: {
|
||||
hideLogo: true,
|
||||
},
|
||||
},
|
||||
noValidateMulti,
|
||||
);
|
||||
});
|
||||
@@ -12,6 +12,11 @@ Meteor.publish('setting', () => {
|
||||
disableRegistration: 1,
|
||||
productName: 1,
|
||||
hideLogo: 1,
|
||||
customLoginLogoImageUrl: 1,
|
||||
customLoginLogoLinkUrl: 1,
|
||||
textBelowCustomLoginLogo: 1,
|
||||
customTopLeftCornerLogoImageUrl: 1,
|
||||
customTopLeftCornerLogoLinkUrl: 1,
|
||||
customHTMLafterBodyStart: 1,
|
||||
customHTMLbeforeBodyEnd: 1,
|
||||
displayAuthenticationMethod: 1,
|
||||
|
||||
+5
-1
@@ -3,7 +3,7 @@
|
||||
# All supported keys are defined here together with descriptions and default values
|
||||
|
||||
# list of supported keys
|
||||
keys="DEBUG MONGO_URL MONGODB_BIND_UNIX_SOCKET MONGO_URL MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM 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 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_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_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 ATTACHMENTS_STORE_PATH 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"
|
||||
keys="DEBUG MONGO_URL MONGODB_BIND_UNIX_SOCKET MONGO_URL MONGODB_BIND_IP MONGODB_PORT MAIL_URL MAIL_FROM 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 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_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_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 ATTACHMENTS_STORE_PATH 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"
|
||||
|
||||
# default values
|
||||
DESCRIPTION_DEBUG="Debug OIDC OAuth2 etc. Example: sudo snap set wekan debug='true'"
|
||||
@@ -168,6 +168,10 @@ DESCRIPTION_WEBHOOKS_ATTRIBUTES="What to send to Outgoing Webhook, or leave out.
|
||||
DEFAULT_WEBHOOKS_ATTRIBUTES=""
|
||||
KEY_WEBHOOKS_ATTRIBUTES="webhooks-attributes"
|
||||
|
||||
DESCRIPTION_ORACLE_OIM_ENABLED="Enable OAUTH2 ORACLE on premise identity manager OIM. Default: false"
|
||||
DEFAULT_ORACLE_OIM_ENABLED="false"
|
||||
KEY_ORACLE_OIM_ENABLED="oracle-oim-enabled"
|
||||
|
||||
DESCRIPTION_OAUTH2_ENABLED="Enable the OAuth2 connection. Default: false"
|
||||
DEFAULT_OAUTH2_ENABLED="false"
|
||||
KEY_OAUTH2_ENABLED="oauth2-enabled"
|
||||
|
||||
@@ -182,6 +182,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 "Enable OAuth2 Oracle on premise identity manager OIM. Default: false"
|
||||
echo -e "To enable the OAuth2 Oracle OIM of Wekan:"
|
||||
echo -e "\t$ snap set $SNAP_NAME oracle-oim-enabled='true'"
|
||||
echo -e "\t-Disable the OAuth2 Oracle OIM of Wekan:"
|
||||
echo -e "\t$ snap unset $SNAP_NAME oracle-oim-enabled"
|
||||
echo -e "\n"
|
||||
echo -e "OAuth2 ADFS Enabled. Also requires oauth2-enabled='true'"
|
||||
echo -e "To enable the OAuth2 ADFS of Wekan:"
|
||||
echo -e "\t$ snap set $SNAP_NAME oauth2-adfs-enabled='true'"
|
||||
|
||||
@@ -114,6 +114,11 @@ REM SET WEBHOOKS_ATTRIBUTES=
|
||||
|
||||
REM ------------------------------------------------------------
|
||||
|
||||
REM # OAUTH2 ORACLE on premise identity manager OIM
|
||||
REM SET ORACLE_OIM_ENABLED=true
|
||||
|
||||
REM ------------------------------------------------------------
|
||||
|
||||
REM # Enable the OAuth2 connection
|
||||
REM # OAuth2 docs: https://github.com/wekan/wekan/wiki/OAuth2
|
||||
REM # example: OAUTH2_ENABLED=true
|
||||
|
||||
@@ -120,6 +120,9 @@
|
||||
# Example: export WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId
|
||||
export WEBHOOKS_ATTRIBUTES=''
|
||||
#---------------------------------------------
|
||||
# OAUTH2 ORACLE on premise identity manager OIM
|
||||
#export ORACLE_OIM_ENABLED=true
|
||||
#---------------------------------------------
|
||||
# ==== OAUTH2 AZURE ====
|
||||
# https://github.com/wekan/wekan/wiki/Azure
|
||||
# 1) Register the application with Azure. Make sure you capture
|
||||
|
||||
@@ -132,7 +132,7 @@ services:
|
||||
' 1>/dev/null 2>&1 &
|
||||
mongod --replSet rs1
|
||||
wekan:
|
||||
image: quay.io/wekan/wekan
|
||||
image: wekanteam/wekan
|
||||
container_name: wekan-app
|
||||
restart: always
|
||||
networks:
|
||||
@@ -309,6 +309,9 @@ services:
|
||||
# example: WEBHOOKS_ATTRIBUTES=cardId,listId,oldListId,boardId,comment,user,card,commentId
|
||||
#- WEBHOOKS_ATTRIBUTES=
|
||||
#-----------------------------------------------------------------
|
||||
# ==== OAUTH2 ORACLE on premise identity manager OIM ====
|
||||
#- ORACLE_OIM_ENABLED=true
|
||||
#-----------------------------------------------------------------
|
||||
# ==== OAUTH2 ONLY WITH OIDC AND DOORKEEPER AS INDENTITY PROVIDER
|
||||
# https://github.com/wekan/wekan/issues/1874
|
||||
# https://github.com/wekan/wekan/wiki/OAuth2
|
||||
|
||||
Reference in new issue
Block a user