Merge remote-tracking branch 'origin/release/15.0' into dev
@@ -3,6 +3,7 @@
|
||||
@import "work_packages/activities_tab/journals/index_component"
|
||||
@import "work_packages/activities_tab/journals/item_component"
|
||||
@import "work_packages/activities_tab/journals/item_component/details"
|
||||
@import "work_packages/activities_tab/journals/item_component/add_reactions"
|
||||
@import "work_packages/activities_tab/journals/item_component/reactions"
|
||||
@import "shares/modal_body_component"
|
||||
@import "shares/invite_user_form_component"
|
||||
|
||||
@@ -151,10 +151,20 @@ module Projects
|
||||
end
|
||||
|
||||
def projects(query)
|
||||
query
|
||||
.results
|
||||
.with_required_storage
|
||||
.with_latest_activity
|
||||
scope = query.results
|
||||
|
||||
# The two columns associated with the
|
||||
# * disk storage
|
||||
# * latest activity
|
||||
# information are only available to admins.
|
||||
# For non admins, the performance penalty of fetching the information therefore needs never be paid.
|
||||
if User.current.admin?
|
||||
scope = scope
|
||||
.with_required_storage
|
||||
.with_latest_activity
|
||||
end
|
||||
|
||||
scope
|
||||
.includes(:custom_values, :enabled_modules)
|
||||
.paginate(page: helpers.page_param(params), per_page: helpers.per_page_param(params))
|
||||
end
|
||||
|
||||
@@ -34,6 +34,7 @@ module WorkPackages
|
||||
include ApplicationHelper
|
||||
include OpPrimer::ComponentHelpers
|
||||
include OpTurbo::Streamable
|
||||
include WorkPackages::ActivitiesTab::SharedHelpers
|
||||
|
||||
def initialize(work_package:, last_server_timestamp:, filter: :all)
|
||||
super
|
||||
@@ -48,27 +49,24 @@ module WorkPackages
|
||||
attr_reader :work_package, :filter, :last_server_timestamp
|
||||
|
||||
def wrapper_data_attributes
|
||||
stimulus_controller = "work-packages--activities-tab--index"
|
||||
|
||||
{
|
||||
test_selector: "op-wp-activity-tab",
|
||||
controller: "work-packages--activities-tab--index",
|
||||
controller: stimulus_controller,
|
||||
"application-target": "dynamic",
|
||||
"work-packages--activities-tab--index-update-streams-url-value": update_streams_work_package_activities_url(
|
||||
work_package
|
||||
),
|
||||
"work-packages--activities-tab--index-sorting-value": journal_sorting,
|
||||
"work-packages--activities-tab--index-filter-value": filter,
|
||||
"work-packages--activities-tab--index-user-id-value": User.current.id,
|
||||
"work-packages--activities-tab--index-work-package-id-value": work_package.id,
|
||||
"work-packages--activities-tab--index-polling-interval-in-ms-value": polling_interval,
|
||||
"work-packages--activities-tab--index-notification-center-path-name-value": notifications_path,
|
||||
"work-packages--activities-tab--index-last-server-timestamp-value": last_server_timestamp
|
||||
"#{stimulus_controller}-update-streams-url-value": update_streams_work_package_activities_url(work_package),
|
||||
"#{stimulus_controller}-sorting-value": journal_sorting,
|
||||
"#{stimulus_controller}-filter-value": filter,
|
||||
"#{stimulus_controller}-user-id-value": User.current.id,
|
||||
"#{stimulus_controller}-work-package-id-value": work_package.id,
|
||||
"#{stimulus_controller}-polling-interval-in-ms-value": polling_interval,
|
||||
"#{stimulus_controller}-notification-center-path-name-value": notifications_path,
|
||||
"#{stimulus_controller}-show-conflict-flash-message-url-value": show_conflict_flash_message_work_packages_path,
|
||||
"#{stimulus_controller}-last-server-timestamp-value": last_server_timestamp
|
||||
}
|
||||
end
|
||||
|
||||
def journal_sorting
|
||||
User.current.preference&.comments_sorting || "desc"
|
||||
end
|
||||
|
||||
def polling_interval
|
||||
# Polling interval should only be adjustable in test environment
|
||||
if Rails.env.test?
|
||||
|
||||
@@ -35,6 +35,7 @@ module WorkPackages
|
||||
include ApplicationHelper
|
||||
include OpPrimer::ComponentHelpers
|
||||
include OpTurbo::Streamable
|
||||
include WorkPackages::ActivitiesTab::SharedHelpers
|
||||
|
||||
def initialize(work_package:, filter: :all)
|
||||
super
|
||||
@@ -59,10 +60,6 @@ module WorkPackages
|
||||
filter == :only_changes
|
||||
end
|
||||
|
||||
def journal_sorting
|
||||
User.current.preference&.comments_sorting || "desc"
|
||||
end
|
||||
|
||||
def desc_sorting?
|
||||
journal_sorting == "desc"
|
||||
end
|
||||
|
||||
@@ -35,6 +35,7 @@ module WorkPackages
|
||||
include ApplicationHelper
|
||||
include OpPrimer::ComponentHelpers
|
||||
include OpTurbo::Streamable
|
||||
include WorkPackages::ActivitiesTab::SharedHelpers
|
||||
|
||||
def initialize(work_package:, filter: :all)
|
||||
super
|
||||
@@ -55,10 +56,6 @@ module WorkPackages
|
||||
"work-package-journal-days"
|
||||
end
|
||||
|
||||
def journal_sorting
|
||||
User.current.preference&.comments_sorting || "desc"
|
||||
end
|
||||
|
||||
def journal_sorting_desc?
|
||||
journal_sorting == "desc"
|
||||
end
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
<%=
|
||||
component_wrapper(data: wrapper_data_attributes, class: "work-packages-activities-tab-journals-item-component") do
|
||||
flex_layout(data: { test_selector: "op-wp-journal-entry-#{journal.id}" }) do |journal_container|
|
||||
flex_layout(data: {
|
||||
test_selector: "op-wp-journal-entry-#{journal.id}"
|
||||
}) do |journal_container|
|
||||
if show_comment_container?
|
||||
journal_container.with_row do
|
||||
render(border_box_container(
|
||||
@@ -45,7 +47,7 @@
|
||||
end
|
||||
header_end_container.with_column do
|
||||
render(Primer::Beta::Link.new(
|
||||
href: "#",
|
||||
href: activity_url(journal),
|
||||
scheme: :secondary,
|
||||
underline: false,
|
||||
font_size: :small,
|
||||
|
||||
@@ -56,7 +56,7 @@ module WorkPackages
|
||||
{
|
||||
controller: "work-packages--activities-tab--item",
|
||||
"application-target": "dynamic",
|
||||
"work-packages--activities-tab--item-activity-url-value": activity_url
|
||||
"work-packages--activities-tab--item-activity-url-value": activity_url(journal)
|
||||
}
|
||||
end
|
||||
|
||||
@@ -68,14 +68,6 @@ module WorkPackages
|
||||
journal.noop?
|
||||
end
|
||||
|
||||
def activity_url
|
||||
"#{project_work_package_url(journal.journable.project, journal.journable)}/activity#{activity_anchor}"
|
||||
end
|
||||
|
||||
def activity_anchor
|
||||
"#activity-#{journal.sequence_version}"
|
||||
end
|
||||
|
||||
def updated?
|
||||
return false if journal.initial?
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
)
|
||||
|
||||
overlay.with_body(pt: 2, test_selector: "emoji-reactions-overlay") do
|
||||
flex_layout do |add_reactions_container|
|
||||
flex_layout(flex_wrap: :wrap, classes: "op-add-reactions-overlay") do |add_reactions_container|
|
||||
EmojiReaction.available_emoji_reactions.each do |emoji, reaction|
|
||||
add_reactions_container.with_column(mr: 2) do
|
||||
render(Primer::Beta::Button.new(
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
.op-add-reactions-overlay
|
||||
row-gap: var(--base-size-4, 4px)
|
||||
@media screen and (max-width: $breakpoint-sm)
|
||||
max-width: 200px
|
||||
@@ -4,7 +4,11 @@
|
||||
my: 0,
|
||||
border: :left,
|
||||
classes: "work-packages-activities-tab-journals-item-component-details--journal-details-container",
|
||||
data: { initial: journal.initial? }
|
||||
data: {
|
||||
"journal-with-changeset-updated-at": journal.updated_at.to_i, # used by the stimulus controller to maintain state
|
||||
"journal-with-changeset-user-id": journal.user_id, # used by the stimulus controller to maintain state
|
||||
initial: journal.initial? # used by the stimulus controller to render correctly
|
||||
}
|
||||
) do |details_container|
|
||||
case filter
|
||||
when :only_comments
|
||||
|
||||
@@ -187,7 +187,7 @@ module WorkPackages
|
||||
classes: "work-packages-activities-tab-journals-item-component-details--activity-link-container"
|
||||
) do
|
||||
render(Primer::Beta::Link.new(
|
||||
href: "#",
|
||||
href: activity_url(journal),
|
||||
scheme: :secondary,
|
||||
underline: false,
|
||||
font_size: :small,
|
||||
@@ -265,10 +265,6 @@ module WorkPackages
|
||||
def render_empty_line(details_container)
|
||||
details_container.with_row(my: 1, font_size: :small, classes: "empty-line")
|
||||
end
|
||||
|
||||
def journal_sorting
|
||||
User.current.preference&.comments_sorting || "desc"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
format_text(journal, :notes)
|
||||
end
|
||||
end
|
||||
journal_container.with_row(mt: 3, flex_layout: true) do |reactions_container|
|
||||
journal_container.with_row(flex_layout: true) do |reactions_container|
|
||||
reactions_container.with_column do
|
||||
render(WorkPackages::ActivitiesTab::Journals::ItemComponent::AddReactions.new(journal:, grouped_emoji_reactions:))
|
||||
end
|
||||
|
||||
@@ -42,6 +42,18 @@ module WorkPackages
|
||||
user.name
|
||||
end
|
||||
end
|
||||
|
||||
def journal_sorting
|
||||
User.current.preference&.comments_sorting || OpenProject::Configuration.default_comment_sort_order
|
||||
end
|
||||
|
||||
def activity_url(journal)
|
||||
"#{project_work_package_url(journal.journable.project, journal.journable)}/activity#{activity_anchor(journal)}"
|
||||
end
|
||||
|
||||
def activity_anchor(journal)
|
||||
"#activity-#{journal.sequence_version}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
#-- copyright
|
||||
# OpenProject is an open source project management software.
|
||||
# Copyright (C) 2012-2024 the OpenProject GmbH
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License version 3.
|
||||
#
|
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
# Copyright (C) 2010-2013 the ChiliProject Team
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
#
|
||||
# See COPYRIGHT and LICENSE files for more details.
|
||||
#++
|
||||
|
||||
module WorkPackages
|
||||
class UpdateConflictComponent < ApplicationComponent
|
||||
include OpPrimer::ComponentHelpers
|
||||
include OpTurbo::Streamable
|
||||
|
||||
def initialize(scheme: :warning, button_text: I18n.t("label_meeting_reload"))
|
||||
super
|
||||
|
||||
@scheme = scheme
|
||||
@button_text = button_text
|
||||
|
||||
if %i[warning danger].exclude?(@scheme)
|
||||
raise ArgumentError, "Invalid scheme: #{@scheme}. Must be :warning or :danger."
|
||||
end
|
||||
end
|
||||
|
||||
def call
|
||||
render(
|
||||
::OpPrimer::FlashComponent.new(
|
||||
scheme: @scheme,
|
||||
icon: @scheme == :danger ? :stop : :"alert-fill",
|
||||
dismiss_scheme: :hide,
|
||||
unique_key: "work-package-update-conflict",
|
||||
data: {
|
||||
"banner-scheme": @scheme.to_s # used for testing
|
||||
}
|
||||
)
|
||||
) do |banner|
|
||||
banner.with_action_button(
|
||||
tag: :a,
|
||||
href: "#",
|
||||
data: {
|
||||
turbo: false,
|
||||
action: "click->flash#reloadPage",
|
||||
test_selector: "op-work-package-update-conflict-reload-button"
|
||||
},
|
||||
size: :medium
|
||||
) { @button_text }
|
||||
|
||||
content
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -220,7 +220,7 @@ class WorkPackages::ActivitiesTabController < ApplicationController
|
||||
end
|
||||
|
||||
def journal_sorting
|
||||
User.current.preference&.comments_sorting || "desc"
|
||||
User.current.preference&.comments_sorting || OpenProject::Configuration.default_comment_sort_order
|
||||
end
|
||||
|
||||
def journal_params
|
||||
|
||||
@@ -32,6 +32,7 @@ class WorkPackagesController < ApplicationController
|
||||
include Layout
|
||||
include WorkPackagesControllerHelper
|
||||
include OpTurbo::DialogStreamHelper
|
||||
include OpTurbo::ComponentStream
|
||||
|
||||
accept_key_auth :index, :show
|
||||
|
||||
@@ -40,6 +41,8 @@ class WorkPackagesController < ApplicationController
|
||||
before_action :load_and_authorize_in_optional_project,
|
||||
:check_allowed_export,
|
||||
:protect_from_unauthorized_export, only: %i[index export_dialog]
|
||||
|
||||
before_action :authorize, only: :show_conflict_flash_message
|
||||
authorization_checked! :index, :show, :export_dialog
|
||||
|
||||
before_action :load_and_validate_query, only: :index, unless: -> { request.format.html? }
|
||||
@@ -90,6 +93,19 @@ class WorkPackagesController < ApplicationController
|
||||
respond_with_dialog WorkPackages::Exports::ModalDialogComponent.new(query: @query, project: @project, title: params[:title])
|
||||
end
|
||||
|
||||
def show_conflict_flash_message
|
||||
scheme = params[:scheme]&.to_sym || :danger
|
||||
|
||||
update_flash_message_via_turbo_stream(
|
||||
component: WorkPackages::UpdateConflictComponent,
|
||||
scheme:,
|
||||
message: I18n.t("notice_locking_conflict_#{scheme}"),
|
||||
button_text: I18n.t("notice_locking_conflict_action_button")
|
||||
)
|
||||
|
||||
respond_with_turbo_streams
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def load_and_validate_query_for_export
|
||||
|
||||
@@ -219,7 +219,7 @@ Rails.application.reloader.to_prepare do
|
||||
{
|
||||
versions: %i[index show status_by],
|
||||
journals: %i[index],
|
||||
work_packages: %i[show index],
|
||||
work_packages: %i[show index show_conflict_flash_message],
|
||||
work_packages_api: [:get],
|
||||
"work_packages/reports": %i[report report_details],
|
||||
"work_packages/activities_tab": %i[index update_streams update_sorting update_filter],
|
||||
|
||||
@@ -2976,6 +2976,9 @@ en:
|
||||
notice_locking_conflict: "Information has been updated by at least one other user in the meantime."
|
||||
notice_locking_conflict_additional_information: "The update(s) came from %{users}."
|
||||
notice_locking_conflict_reload_page: "Please reload the page, review the changes and reapply your updates."
|
||||
notice_locking_conflict_warning: "This page has been updated by someone else. To not lose your edits, copy them locally and reload to view the updated version."
|
||||
notice_locking_conflict_danger: "Could not save your changes because of conflicting modifications. To not lose your edits, copy them locally and reload to view the updated version."
|
||||
notice_locking_conflict_action_button: "Discard changes and reload"
|
||||
notice_member_added: Added %{name} to the project.
|
||||
notice_members_added: Added %{number} users to the project.
|
||||
notice_member_removed: "Removed %{user} from project."
|
||||
|
||||
@@ -603,6 +603,7 @@ Rails.application.routes.draw do
|
||||
as: :work_package_progress
|
||||
end
|
||||
get "/export_dialog" => "work_packages#export_dialog", on: :collection, as: "export_dialog"
|
||||
get :show_conflict_flash_message, on: :collection # we don't need a specific work package for this
|
||||
|
||||
get "/split_view/update_counter" => "work_packages/split_view#update_counter",
|
||||
on: :member
|
||||
|
||||
@@ -54,7 +54,7 @@ OpenProject provides means to fully erase both all identifiable information of a
|
||||
|
||||
- Data controllers can perform the deletion [through the administration](../../../system-admin-guide/users-permissions/users/).
|
||||
|
||||
- Depending on the configuration of your OpenProject instance, individual data subjects may perform the deletion of their own account through the [Delete Account](../../../user-guide/my-account/) page. If this is disabled, the request may be stated to the data controller.
|
||||
- Depending on the configuration of your OpenProject instance, individual data subjects may perform the deletion of their own account through the [Delete Account](../../../user-guide/account-settings/) page. If this is disabled, the request may be stated to the data controller.
|
||||
|
||||
### Data Portability
|
||||
|
||||
|
||||
@@ -150,8 +150,8 @@ Please find information on the features of OpenProject [here](https://www.openpr
|
||||
|
||||
### Is it possible to use multiple languages in OpenProject?
|
||||
|
||||
Yes, it is possible to use OpenProject in multiple languages. We support English, German, French and a number of additional languages. Each user can select their own preferred language by signing into OpenProject, clicking on the user avatar on the upper right side and selecting "My account" from the dropdown menu.
|
||||
You can then select "Settings" from the side menu on the left side and [change the language](../user-guide/my-account/#change-your-language).
|
||||
Yes, it is possible to use OpenProject in multiple languages. We support English, German, French and a number of additional languages. Each user can select their own preferred language by signing into OpenProject, clicking on the user avatar on the upper right side and selecting "Account settings" from the dropdown menu.
|
||||
You can then select "Settings" from the side menu on the left side and [change the language](../user-guide/account-settings/#change-your-language).
|
||||
|
||||
### Is there an OpenProject app?
|
||||
|
||||
|
||||
@@ -14,17 +14,17 @@ Here you will learn about the **first steps with OpenProject**. If you need more
|
||||
|
||||
## Overview
|
||||
|
||||
| Topic | Content |
|
||||
|---------------------------------------------------------|:---------------------------------------------------------------|
|
||||
| Topic | Content |
|
||||
| ------------------------------------------------------- | :----------------------------------------------------------- |
|
||||
| [Introduction to OpenProject](openproject-introduction) | Get an introduction about project management with OpenProject. |
|
||||
| [Sign in and registration](sign-in-registration) | Find out how you can register and sign in to OpenProject. |
|
||||
| [Create a project](projects) | How to create and set up a new project. |
|
||||
| [Invite team members](invite-members) | How to invite new members. |
|
||||
| [Work packages](work-packages-introduction) | Learn how to create and edit work packages. |
|
||||
| [Gantt chart](gantt-chart-introduction) | Find out how to create a project plan. |
|
||||
| [Boards](boards-introduction) | How to work with agile boards. |
|
||||
| [My account](my-account) | How to configure my account. |
|
||||
| [My page](my-page) | Find out more about a personal my page dashboard. |
|
||||
| [Sign in and registration](sign-in-registration) | Find out how you can register and sign in to OpenProject. |
|
||||
| [Create a project](projects) | How to create and set up a new project. |
|
||||
| [Invite team members](invite-members) | How to invite new members. |
|
||||
| [Work packages](work-packages-introduction) | Learn how to create and edit work packages. |
|
||||
| [Gantt chart](gantt-chart-introduction) | Find out how to create a project plan. |
|
||||
| [Boards](boards-introduction) | How to work with agile boards. |
|
||||
| [Account settings](account-settings) | How to configure personal account settings. |
|
||||
| [My page](my-page) | Find out more about a personal my page dashboard. |
|
||||
|
||||
## 6 steps to get started
|
||||
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
sidebar_navigation:
|
||||
title: My account
|
||||
priority: 400
|
||||
description: Learn how to configure account settings.
|
||||
keywords: my account, account settings, change language
|
||||
---
|
||||
|
||||
# Account settings
|
||||
|
||||
Under **Account settings**, you can change your personal settings, such as the language, edit notifications, or add an avatar. Moreover you can manage access tokens and sessions.
|
||||
|
||||
> [!TIP]
|
||||
> Prior to OpenProject 15.0 *Account settings* were named *My account*.
|
||||
|
||||
To open your personal settings in OpenProject, click on your user icon in the top right corner in the header of the application and choose **Account settings**.
|
||||
|
||||

|
||||
|
||||
For more details please take a look at [**Account settings** section of OpenProject user guide](../../user-guide/account-settings).
|
||||
|
||||
|
After Width: | Height: | Size: 109 KiB |
@@ -1,18 +0,0 @@
|
||||
---
|
||||
sidebar_navigation:
|
||||
title: My account
|
||||
priority: 400
|
||||
description: Learn how to configure account settings.
|
||||
keywords: my account, account settings, change language
|
||||
---
|
||||
|
||||
# My account
|
||||
|
||||
Under My account, you can change your personal settings, such as the language, edit notifications, or add an avatar. Moreover you can manage access tokens and sessions.
|
||||
|
||||
To open your personal settings in OpenProject, click on your user icon in the top right corner in the header of the application and choose **My account**.
|
||||
|
||||

|
||||
|
||||
For more details please take a look at [My account section of OpenProject user guide](../../user-guide/my-account).
|
||||
|
||||
|
Before Width: | Height: | Size: 170 KiB |
@@ -88,7 +88,7 @@ After the creation of your account you are logged into the system. You will then
|
||||
|
||||

|
||||
|
||||
If you have already logged in before, you can [set your language in your user profile](../../user-guide/my-account/#profile-settings).
|
||||
If you have already logged in before, you can [set your language in your user profile](../../user-guide/account-settings/#profile-settings).
|
||||
|
||||
## Reset your password
|
||||
|
||||
|
||||
@@ -139,7 +139,7 @@ A custom query in OpenProject consists of saved [filters](#filters), sort criter
|
||||
|
||||
### Dark mode
|
||||
|
||||
The dark mode for OpenProject is a personal setting to display the application in a dark [theme](#theme). Other available modes are the regular light mode and the (light) [high contrast mode](#high-contrast-mode). [Read in our documentation how to enable dark mode](../user-guide/my-account/#select-the-dark-mode).
|
||||
The dark mode for OpenProject is a personal setting to display the application in a dark [theme](#theme). Other available modes are the regular light mode and the (light) [high contrast mode](#high-contrast-mode). [Read in our documentation how to enable dark mode](../user-guide/account-settings/#select-the-dark-mode).
|
||||
|
||||
### Dashboard
|
||||
|
||||
@@ -201,7 +201,7 @@ A Group in OpenProject is defined as a list of users which can be added as a mem
|
||||
|
||||
### High contrast mode
|
||||
|
||||
OpenProject offers a high contrast mode to make it easier for visually impaired people to use the software. This mode can be selected in the personal [account settings](../user-guide/my-account/#my-account) and will only affect the individual user's experience.
|
||||
OpenProject offers a high contrast mode to make it easier for visually impaired people to use the software. This mode can be selected in the personal [account settings](../user-guide/account-settings/) and will only affect the individual user's experience.
|
||||
|
||||
### Home page
|
||||
|
||||
@@ -279,6 +279,10 @@ OpenProject on-premises is a self-hosted version of OpenProject. As opposed to t
|
||||
- [Read how to activate the Enterprise on-premises edition](../enterprise-guide/enterprise-on-premises-guide/activate-enterprise-on-premises/)
|
||||
- [Read how to start a trial for Enterprise on-premises](../enterprise-guide/enterprise-on-premises-guide/enterprise-on-premises-trial/)
|
||||
|
||||
### OpenID Connect (OIDC)
|
||||
|
||||
OpenID Connect (OIDC) is an authentication protocol built on OAuth 2.0 that enables secure, simple, and standardized user identity verification. OpenProject Enterprise offers user interfaces for OIDC as well as for [SAML](#saml), so that administrators can set Single Sign-On (SSO) options for their users. [Read more about OpenID providers for OpenProject in our system admin guide](../system-admin-guide/authentication/openid-providers/).
|
||||
|
||||
## P
|
||||
|
||||
### Phase
|
||||
@@ -374,6 +378,10 @@ In product management, the RICE score indicates the level of prioritization of a
|
||||
|
||||
## S
|
||||
|
||||
### SAML
|
||||
|
||||
SAML (Security Assertion Markup Language) is an open standard for exchanging authentication and authorization data between parties, typically an identity provider (IdP) and a service provider (SP). OpenProject Enterprise offers user interfaces for SAML as well as for [OpenID Connect](#openid-connect-oidc), so that administrators can set Single Sign-On (SSO) options for their users. [Read more about SAML providers for OpenProject in our system admin guide](../system-admin-guide/authentication/saml/).
|
||||
|
||||
### Share work packages
|
||||
|
||||
OpenProject offers the possibility to share work packages with external groups or users that are not [members](#member) of the project. This feature is an [Enterprise add-on](#enterprise-add-on). Every user with whom a work package is shared must either already be a user of the instance or be newly created. The latter requires special rights. [Read more about OpenProject's feature to share work packages with project non-members](../user-guide/work-packages/share-work-packages/).
|
||||
@@ -476,4 +484,4 @@ A list of work packages is considered a view. The containing work packages in an
|
||||
|
||||
### WYSIWYG editor
|
||||
|
||||
WYSIWYG stands for 'What you see is what you get'. A WYSIWYG editor is a content editing interface that allows users to create and edit content so that it visually resembles the final result. In OpenProject, you can use WYSIWYG editors in [wikis](#wiki), [forums](#forum) and [work package](#work-package) descriptions and comments.
|
||||
WYSIWYG stands for 'What you see is what you get'. A WYSIWYG editor is a content editing interface that allows users to create and edit content so that it visually resembles the final result. In OpenProject, you can use WYSIWYG editors in [wikis](#wiki), [forums](#forum) and [work package](#work-package) descriptions and comments.
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# Custom OpenID Connect providers
|
||||
# Custom OpenID Connect providers (Enterprise add-on)
|
||||
|
||||
> [!IMPORTANT]
|
||||
> OpenID Connect providers is an Enterprise add-on. If you do not see the button you will have to activate the Enterprise edition first.
|
||||
|
||||
Starting in OpenProject 15.0., you can create custom OpenID Connect providers with the user interface [OpenID Providers Authentication Guide](../../../system-admin-guide/authentication/openid-providers/).
|
||||
Starting with OpenProject 15.0., you can create custom OpenID Connect providers with the user interface [OpenID Providers Authentication Guide](../../../system-admin-guide/authentication/openid-providers/).
|
||||
|
||||
Please use this document for references on all configuration options. Any providers you have created in earlier versions will have been migrated and should be available from the user interface.
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ The new in-app notifications let you never miss a change in your projects again.
|
||||
|
||||
Go to our user guide to find out how to [configure in-app notifications](../../../user-guide/notifications/).
|
||||
|
||||
> **Info:** Please note that starting with version 12.0, OpenProject will no longer send individual emails for each notification. You can view your notifications via the new [Notification center](../../../user-guide/notifications/#access-in-app-notifications). You can however still choose to receive daily [email reminders](../../../user-guide/my-account/#email-reminders) at specific times of the day that you can configure.
|
||||
> **Info:** Please note that starting with version 12.0, OpenProject will no longer send individual emails for each notification. You can view your notifications via the new [Notification center](../../../user-guide/notifications/#access-in-app-notifications). You can however still choose to receive daily [email reminders](../../../user-guide/account-settings/#email-reminders) at specific times of the day that you can configure.
|
||||
|
||||
## Notification center
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ With OpenProject 12.4 users who have OpenProject community edition installed can
|
||||
|
||||

|
||||
|
||||
!See [here](../../../user-guide/my-account/#two-factor-authentication) how to setup the 2FA under My account.
|
||||
!See [here](../../../user-guide/account-settings/#two-factor-authentication) how to setup the 2FA under My account.
|
||||
|
||||
## LDAP connection encryption changes
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ With OpenProject 13.1, we released [Attribute help texts](../../system-admin-gui
|
||||
|
||||
## Accessibility improvements and high contrast mode
|
||||
|
||||
We continued to work on improving accessibility of OpenProject according to the WCAG 2.1 AA. You can now select to use a high contrast mode in your [profile settings](../../user-guide/my-account/#select-the-high-contrast-color-mode), which will override the current OpenProject theme and be especially valuable for OpenProject users with visual impairments.
|
||||
We continued to work on improving accessibility of OpenProject according to the WCAG 2.1 AA. You can now select to use a high contrast mode in your [profile settings](../../user-guide/account-settings/#select-the-high-contrast-color-mode), which will override the current OpenProject theme and be especially valuable for OpenProject users with visual impairments.
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ For more details, see https://community.openproject.org/wp/56861.
|
||||
|
||||
### Personal settings: Dark mode
|
||||
|
||||
Dark mode for OpenProject is finally here! In the '[My account](../../user-guide/my-account/#profile-settings)' section under 'Settings', there is an **option labeled 'Mode' where users can now select 'Dark (Beta).'** – as an alternative to the light mode. When the dark mode is selected, the change applies only to that user, not to the entire instance.
|
||||
Dark mode for OpenProject is finally here! In the '[My account](../../user-guide/account-settings/#profile-settings)' section under 'Settings', there is an **option labeled 'Mode' where users can now select 'Dark (Beta).'** – as an alternative to the light mode. When the dark mode is selected, the change applies only to that user, not to the entire instance.
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ Navigate to **Administration → API and webhooks**.
|
||||
|
||||

|
||||
|
||||
Here, you can manage the **REST web service** to selectively control whether foreign applications may access your OpenProject API endpoints from within the browser. This setting allows users to access the OpenProject API using an API token created from the users "My account" page. You can set the **maximum page size** the API will respond with. It will not be possible to perform API requests that return more values on a single page. You can also enable **write access to read-only attributes**, which will allow administrators to write static read-only attributes during creation, such as *createdAt* and *author*.
|
||||
Here, you can manage the **REST web service** to selectively control whether foreign applications may access your OpenProject API endpoints from within the browser. This setting allows users to access the OpenProject API using an API token created from the users "Account settings" page. You can set the **maximum page size** the API will respond with. It will not be possible to perform API requests that return more values on a single page. You can also enable **write access to read-only attributes**, which will allow administrators to write static read-only attributes during creation, such as *createdAt* and *author*.
|
||||
|
||||
### Documentation
|
||||
|
||||
|
||||
@@ -5,7 +5,10 @@ sidebar_navigation:
|
||||
description: OpenID providers for OpenProject.
|
||||
keywords: OpenID providers
|
||||
---
|
||||
# OpenID providers
|
||||
# OpenID providers (Enterprise add-on)
|
||||
|
||||
> [!IMPORTANT]
|
||||
> OpenID Connect providers is an Enterprise add-on. If you do not see the button you will have to activate the Enterprise edition first.
|
||||
|
||||
| Topic | Content |
|
||||
| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
@@ -183,7 +186,7 @@ To start creating a custom provider, please follow these steps:
|
||||
1. Login as OpenProject Administrator
|
||||
2. Navigate to *Administration* -> *Authentication* and choose -> *OpenID providers*.
|
||||
- **Click** the green *+ OpenID Connect provider* button
|
||||
- **Choose** Choose the *Option* **Custom**
|
||||
- **Choose** the *Option* **Custom**
|
||||
|
||||
#### Step 1: Display name
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 109 KiB |
@@ -5,51 +5,141 @@ sidebar_navigation:
|
||||
description: How to set up SAML integration for SSO with OpenProject.
|
||||
keywords: SAML, SSO, single sign-on, authentication
|
||||
---
|
||||
# SAML
|
||||
# SAML (Enterprise add-on)
|
||||
|
||||
> [!NOTE]
|
||||
> This documentation is valid for the OpenProject Enterprise edition only.
|
||||
> Single sign-on with SAML is an Enterprise add-on. [Click here for more information](https://www.openproject.org/enterprise-edition/) on the OpenProject Enterprise edition.
|
||||
|
||||
You can integrate your active directory or other SAML compliant identity provider in your OpenProject Enterprise edition.
|
||||
You can integrate your active directory or other SAML compliant identity provider in your OpenProject Enterprise edition. To activate and configure SAML providers in OpenProject, navigate to *Administration* -> *Authentication* and choose -> *SAML providers*.
|
||||
|
||||
## Enterprise cloud
|
||||
|
||||
For the moment in the Enterprise cloud OpenProject DevOps team has to apply the configuration for you. The configuration has to be provided in a support ticket, e.g. as an ENV environment file.
|
||||
Experience shows that configuring this can be tricky. So it may require some time until the correct configuration is finished with your SAML provider.
|
||||
If you have the chance to test the SAML configuration on an Enterprise on-premises installation this might speed up the process. But we can make it work either way.
|
||||
|
||||
## Enterprise on-premises
|
||||
## Prerequisites
|
||||
|
||||
### Prerequisites
|
||||
|
||||
In order to use integrate OpenProject as a service provider (SP) using SAML, your identity providers (idP):
|
||||
In order to integrate OpenProject as a service provider (SP) using SAML, your identity providers (idP):
|
||||
|
||||
- needs to be able to handle SAML 2.0 redirect Single-Sign On (SSO) flows, in some implementations also referred to as WebSSO
|
||||
- has a known or configurable set of attributes that map to the following required OpenProject attributes. The way these attribute mappings will be defined is described later in this document.
|
||||
- **login**: A stable attribute used to uniquely identify the user. This will most commonly map to an account ID, samAccountName or email (but please note that emails are often interchangeable, and this might result in logins changing in OpenProject).
|
||||
- **email**: The email attribute of the user being authenticated
|
||||
- **first name** and **last name** of the user.
|
||||
- a **name identifier** (NameID) property that uniquely identifies the user. This could a be an internal uid, or otherwise stable attribute that will never change.
|
||||
- provides the public certificate or certificate fingerprint (SHA1) in use for communicating with the idP.
|
||||
|
||||
### 1: Configure the SAML integration
|
||||
## User interface to add SAML providers
|
||||
|
||||
The configuration can be provided in one of two ways:
|
||||
Starting with OpenProject 15.0, you can define the SAML integration using an internal administrator account.
|
||||
|
||||
* Environment variables (1.1)
|
||||
- Login as OpenProject Administrator
|
||||
|
||||
* Settings in the database (1.2)
|
||||
- Navigate to *Administration* -> *Authentication* and choose -> *SAML providers*.
|
||||
|
||||
* for OpenProject version 11 and older in `config/configuration.yml` file (1.3)
|
||||
|
||||
|
||||
Whatever means are chosen, the plugin simply passes all options to omniauth-saml. See [their configuration documentation](https://github.com/omniauth/omniauth-saml#usage) for further details.
|
||||
### Step 1: Display name
|
||||
|
||||
The options are mutually exclusive. If you decide to save settings in the database, they will override any ENV variables you might have set. (*For OpenProject version 11 and older:* If settings are already provided via ENV variables, they will overwrite settings in a `configuration.yml` file.)
|
||||
- **Click** the green *+ SAML identity provider* button
|
||||
- Set a **display name**. This will be shown on the login button for all users. Choose a name that users associate with your SAML login provider (e.g., "SSO")
|
||||
- Click **Continue**
|
||||
|
||||
#### 1.1 Environment variables
|
||||
|
||||
|
||||
### Step 2: Metadata exchange
|
||||
|
||||
SAML 2.0 allows the service provider and identity provider to exchange public information/configuration ([Specification of Metadata Interoperability](https://docs.oasis-open.org/security/saml/Post2.0/sstc-metadata-iop-os.html)). In the second step of the creation form, you can leverage the metadata exchange endpoint of your SAML identity provider to pre-fill most of the configuration.
|
||||
|
||||
The second step allows you to provide metadata in two ways:
|
||||
|
||||
1. With a metadata URL endpoint. OpenProject will try to connect to that endpoint and download the XML,
|
||||
2. Providing the metadata XML manually as a text input.
|
||||
|
||||
With a metadata option, OpenProject will pre-fill the next sections with all the given information. In case there are any errors in the values provided, they will be marked in red for correction. If you do not have metadata for this provider, choose **I don't have metadata**. Click **Continue**.
|
||||
|
||||
|
||||
|
||||
### Step 3: Primary configuration
|
||||
|
||||
If you have used the metadata exchange, the next form will be pre-filled like in the example below.
|
||||
|
||||

|
||||
|
||||
If some of the required fields (marked with an asterisk) are missing, fill them out with the information from your identity provider. OpenProject assumes you're using the URL of your OpenProject instance as the Service entity ID by default. If your provider expects a different format, this can be an arbitrary string.
|
||||
|
||||
Once you verified the configuration with your settings from the identity provider, click on **Continue**.
|
||||
|
||||
### Step 4: Signatures and Encryption
|
||||
|
||||
Your identity provider may optionally sign and/or encrypt the assertion response. You may for example wish to use Assertion Encryption if TLS is terminated before the OpenProject application server (e.g., on the load balancer level).
|
||||
|
||||
To configure assertion encryption, you need to provide a PEM-formatted certificate to send in the request and private key to decrypt the response. If you need more help on creating a certificate, [please see this guide as an example](https://devcenter.heroku.com/articles/ssl-certificate-self).
|
||||
|
||||
Request signing means that the service provider (OpenProject in this case) uses the certificate specified to sign the request to the identity provider. They reuse the same `certificate` and `private_key` settings as for assertion encryption. It is recommended to use an RSA key pair, the key must be provided without password.
|
||||
|
||||
With request signing enabled, the certificate will be added to the identity provider to validate the signature of the service provider's request.
|
||||
|
||||
Fill out the respective fields, or if you do not need these features, simply leave this section empty and click **Continue**.
|
||||
|
||||

|
||||
|
||||
### Step 5: Attribute Mapping
|
||||
|
||||
OpenProject expects a set Use the key `attribute_statements` to provide mappings for attributes returned by the SAML identity provider's response to OpenProject internal attributes. We provide an extensive set of default values that should work for the majority of providers. Also, the metadata endpoint might already specify some attributes that can be used.
|
||||
|
||||
If you have a custom attribute that you want to use for e.g., email, you can replace or add this to the list of attributes. The attributes will be assigned in order from top to bottom, and the first attribute that is found in the SAML assertion will be used.
|
||||
|
||||
Optionally, you can set a mapping for the internal user ID. By default, we take this information from the `name_id` attribute. In many SAML providers, the NameID is assigned to the email address of the user. However, this attribute might change over time. If you have an internal UID or another attribute that is stable, enter this instead.
|
||||
|
||||
If your users start logging in with this provider and see a registration form with missing attributes for their first or last name, email address, or login, then this mapping section is not filled correctly, or your provider is not sending an attribute back to OpenProject.
|
||||
|
||||
Save your configuration, or skip if you do not need to make changes, using the **Continue** button.
|
||||
|
||||
### Step 6: Requested Attributes
|
||||
|
||||
By default, the attributes from the mapping above will be requested with the format `urn:oasis:names:tc:SAML:2.0:attrname-format:basic`.
|
||||
That means the response should contain attribute names 'mail', etc. as configured above.
|
||||
|
||||
Some SAML providers are very specific about the attributes being requested from the service provider. If you have URN or OID attribute identifiers, you can modify the request in this last section of the form.
|
||||
|
||||
If your provider sends a default set of attributes, you can probably skip over this section. If your users start logging in with this provider and see a registration form with missing attributes for their first or last name, email address, or login, then you might need to change this configuration.
|
||||
|
||||
Complete the registration of the provider using the **Finish setup** button.
|
||||
|
||||
|
||||
|
||||
### Step 7: Configuration of the identity provider
|
||||
|
||||
In order for users to start logging in using the new SSO button that you just added, you need to tell your identity provider some details of the OpenProject provider. Once the provider is saved, you will see details on the right pane of the provider.
|
||||
|
||||
In the sidebar, you will see the OpenProject configuration:
|
||||
|
||||
1. **Metadata endpoint**: This is the metadata XML exchange endpoint for the OpenProject client. If your provider allows to import metadata from a service provider, you can use this metadata to inform it about the details of OpenProject.
|
||||
2. **Service entity ID**: This is the entity id of OpenProject, you might need to configure this in your identity provider to allow it to connect
|
||||
3. **Assertion consumer service URL**: This is the callback or redirect URL used from your SAML identity provider to lead users back to OpenProject when they're authenticated.
|
||||
|
||||
Use the copy to clipboard buttons on each of these entries to copy the information and enter it in your identity provider.
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
Congratulations, you have now finished the setup of your SAML integration provider in OpenProject.
|
||||
|
||||
|
||||
|
||||
## SAML configuration as Environment Variables
|
||||
|
||||
For some deployment scenarios, it might be desirable to configure a provider through environment variables.
|
||||
|
||||
> [!WARNING]
|
||||
> Only do this if you know what you are doing. This may break your existing SAML authentication providers or cause other issues otherwise.
|
||||
|
||||
As with [all the rest of the OpenProject configuration settings](../../../installation-and-operations/configuration/environment/), the SAML configuration can be provided via environment variables.
|
||||
|
||||
Example
|
||||
The provider entries are defined dynamically based on the environment keys. All variables will start with the prefix `OPENPROJECT_SAML_` followed by the provider name.
|
||||
|
||||
**Example**
|
||||
|
||||
This set of environment keys will set up a provider entry in the UI called **saml**.
|
||||
|
||||
```shell
|
||||
# Name of the provider, leave this at saml unless you use multiple providers
|
||||
@@ -58,9 +148,6 @@ OPENPROJECT_SAML_SAML_NAME="saml"
|
||||
# The name that will be display in the login button
|
||||
OPENPROJECT_SAML_SAML_DISPLAY__NAME="<Name of the login button>"
|
||||
|
||||
# The callback within OpenProject that your idP should redirect to
|
||||
OPENPROJECT_SAML_SAML_ASSERTION__CONSUMER__SERVICE__URL="https://<openproject.host>/auth/saml/callback"
|
||||
|
||||
# The SAML issuer string that OpenProject will call your idP with
|
||||
OPENPROJECT_SAML_SAML_ISSUER="https://<openproject.host>"
|
||||
|
||||
@@ -75,12 +162,13 @@ OPENPROJECT_SAML_SAML_IDP__CERT="-----BEGIN CERTIFICATE-----<cert one liner>----
|
||||
# Otherwise you will get an internal error with this log line "PEM_read_bio_X509: bad base64 decode"
|
||||
# OPENPROJECT_SAML_SAML_IDP__CERT=$'-----BEGIN CERTIFICATE-----<cert one liner>-----END CERTIFICATE-----'
|
||||
|
||||
OPENPROJECT_SAML_SAML_IDP__CERT__FINGERPRINT="da:39:a3:ee:5e:6b:4b:0d:32:55:bf:ef:95:60:18:90:af:d8:07:09"
|
||||
# Alternatively, provide a fingerprint of the certificate.
|
||||
#OPENPROJECT_SAML_SAML_IDP__CERT__FINGERPRINT="da:39:a3:ee:5e:6b:4b:0d:32:55:bf:ef:95:60:18:90:af:d8:07:09"
|
||||
# Replace with your single sign on URL, the exact value depends on your idP implementation
|
||||
OPENPROJECT_SAML_SAML_IDP__SSO__TARGET__URL="https://<hostname of your idp>/application/saml/<slug>/sso/binding/post/"
|
||||
OPENPROJECT_SAML_SAML_IDP__SSO__SERVICE__URL="https://<hostname of your idp>/application/saml/<slug>/sso/binding/post/"
|
||||
|
||||
# (Optional) Replace with your redirect flow single sign out URL that we should redirect to
|
||||
OPENPROJECT_SAML_SAML_IDP__SLO__TARGET__URL=""
|
||||
OPENPROJECT_SAML_SAML_IDP__SLO__SERVICE__URL=""
|
||||
|
||||
# Which SAMLAttribute we should look for for the corresponding attributes of OpenProject
|
||||
# can be a string or URI/URN depending on our idP format
|
||||
@@ -95,147 +183,15 @@ OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_LAST__NAME="[sn]"
|
||||
Please note that every underscore (`_`) in the original configuration key has to be replaced by a duplicate underscore
|
||||
(`__`) in the environment variable as the single underscore denotes namespaces. For more information, follow our [guide on environment variables](../../../installation-and-operations/configuration/environment/).
|
||||
|
||||
#### 1.2 Settings in database
|
||||
|
||||
The SAML settings can also be changed at runtime in the database through the OpenProject settings.
|
||||
As opposed to other settings there is no user interface for this.
|
||||
That means it's best to set them using the console.
|
||||
|
||||
```shell
|
||||
# package based installation:
|
||||
> sudo openproject run console
|
||||
|
||||
# docker-based installation:
|
||||
> docker exec -it openproject bundle exec rails console
|
||||
|
||||
# docker-compose-based installation:
|
||||
> docker-compose run --rm web bundle exec rails console
|
||||
```
|
||||
|
||||
Once on the console you can set the same values as named in the ENV environment file, however they need to be nested within a 'providers' key as follows.
|
||||
For example:
|
||||
|
||||
```ruby
|
||||
Setting.plugin_openproject_auth_saml = Hash(Setting.plugin_openproject_auth_saml).deep_merge({
|
||||
"providers" => {
|
||||
"saml" => {
|
||||
"name" => "saml",
|
||||
"display_name" => "My SSO",
|
||||
"assertion_consumer_service_url" => "https://<YOUR OPENPROJECT HOSTNAME>/auth/saml/callback",
|
||||
# The SAML issuer string that OpenProject will call your idP with
|
||||
"issuer" => "https://<YOUR OPENPROJECT HOSTNAME>",
|
||||
### one liner to generate certificate in ONE line
|
||||
### awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' <yourcert.pem>
|
||||
"idp_cert" => "-----BEGIN CERTIFICATE-----\nMI................IEr\n-----END CERTIFICATE-----\n",
|
||||
# Otherwise, the certificate fingerprint must be added
|
||||
# Either `idp_cert` or `idp_cert_fingerprint` must be present!
|
||||
"idp_cert_fingerprint" => "E7:91:B2:E1:...",
|
||||
|
||||
# Replace with your SAML 2.0 redirect flow single sign on URL
|
||||
# For example: "https://sso.example.com/saml/singleSignOn"
|
||||
"idp_sso_target_url" => "<YOUR SSO URL>",
|
||||
# Replace with your redirect flow single sign out URL
|
||||
# or comment out
|
||||
# For example: "https://sso.example.com/saml/proxySingleLogout"
|
||||
"idp_slo_target_url" => "<YOUR SSO logout URL>",
|
||||
|
||||
# Attribute map in SAML
|
||||
"attribute_statements" => {
|
||||
# What attribute in SAML maps to email (default: mail)
|
||||
"email" => ['mail'],
|
||||
# What attribute in SAML maps to the user login (default: uid)
|
||||
"login" => ['uid'],
|
||||
# What attribute in SAML maps to the first name (default: givenName)
|
||||
"first_name" => ['givenName'],
|
||||
# What attribute in SAML maps to the last name (default: sn)
|
||||
"last_name" => ['sn']
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
#### 1.3 config/configuration.yml file
|
||||
|
||||
> [!IMPORTANT]
|
||||
> ONLY for OpenProject version 11 and older
|
||||
|
||||
In your OpenProject packaged installation, you can modify the `/opt/openproject/config/configuration.yml` file.
|
||||
Edit the file in your favorite editor
|
||||
|
||||
```shell
|
||||
vim /opt/openproject/config/configuration.yml
|
||||
```
|
||||
|
||||
This will contains the complete OpenProject configuration and can be extended to also contain metadata settings and connection details for your SSO identity provider.
|
||||
|
||||
The following is an exemplary file with a set of common settings:
|
||||
|
||||
```yaml
|
||||
default:
|
||||
# <-- other configuration -->
|
||||
saml:
|
||||
# First SAML provider
|
||||
mysaml1:
|
||||
# Name of the provider, leave this at saml unless you use multiple providers
|
||||
name: "saml"
|
||||
# The name that will be display in the login button
|
||||
display_name: "My SSO"
|
||||
# Use the default SAML icon
|
||||
icon: "auth_provider-saml.png"
|
||||
|
||||
# The callback within OpenProject that your idP should redirect to
|
||||
assertion_consumer_service_url: "https://<YOUR OPENPROJECT HOSTNAME>/auth/saml/callback"
|
||||
# The SAML issuer string that OpenProject will call your idP with
|
||||
issuer: "https://<YOUR OPENPROJECT HOSTNAME>"
|
||||
|
||||
# IF your SSL certificate on your SSO is not trusted on this machine, you need to add it here in ONE line
|
||||
### one liner to generate certificate in ONE line
|
||||
### awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' <yourcert.pem>
|
||||
#idp_cert: "-----BEGIN CERTIFICATE-----\n ..... SSL CERTIFICATE HERE ...-----END CERTIFICATE-----\n"
|
||||
# Otherwise, the certificate fingerprint must be added
|
||||
# Either `idp_cert` or `idp_cert_fingerprint` must be present!
|
||||
idp_cert_fingerprint: "E7:91:B2:E1:..."
|
||||
|
||||
# Replace with your SAML 2.0 redirect flow single sign on URL
|
||||
# For example: "https://sso.example.com/saml/singleSignOn"
|
||||
idp_sso_target_url: "<YOUR SSO URL>"
|
||||
# Replace with your redirect flow single sign out URL
|
||||
# or comment out
|
||||
# For example: "https://sso.example.com/saml/proxySingleLogout"
|
||||
idp_slo_target_url: "<YOUR SSO logout URL>"
|
||||
|
||||
# Attribute map in SAML
|
||||
attribute_statements:
|
||||
# What attribute in SAML maps to email (default: mail)
|
||||
email: ['mail']
|
||||
# What attribute in SAML maps to the user login (default: uid)
|
||||
login: ['uid']
|
||||
# What attribute in SAML maps to the first name (default: givenName)
|
||||
first_name: ['givenName']
|
||||
# What attribute in SAML maps to the last name (default: sn)
|
||||
last_name: ['sn']
|
||||
|
||||
# OPTIONAL: Additional SAML provider(s)
|
||||
#mysaml2:
|
||||
# name: "saml2"
|
||||
# display_name: "Additional SSO"
|
||||
# (...)
|
||||
#mysaml3:
|
||||
# (...)
|
||||
```
|
||||
|
||||
Be sure to choose the correct indentation and base key. The items below the `saml` key should be indented two spaces more than `saml` already is. And `saml` can will need to be placed in the `default` or `production` group so it will already be indented. You will get an YAML parsing error otherwise when trying to start OpenProject.
|
||||
|
||||
### 2. Configuration details
|
||||
### Configuration details
|
||||
|
||||
In this section, we detail some of the required and optional configuration options for SAML.
|
||||
|
||||
#### 2.1 Mandatory: Response signature verification
|
||||
#### Mandatory: Response signature verification
|
||||
|
||||
SAML responses by identity providers are required to be signed. You can configure this by either specifying the response's certificate fingerprint in `idp_cert_fingerprint` , or by passing the entire PEM-encoded certificate string in `idp_cert` (beware of newlines and formatting the cert, [c.f. the idP certificate options in omniauth-saml](https://github.com/omniauth/omniauth-saml#options))
|
||||
SAML responses by identity providers are required to be signed. You can configure this by either specifying the response's certificate fingerprint in `OPENPROJECT_SAML_SAML_IDP__CERT__FINGERPRINT` , or by passing the entire PEM-encoded certificate string in `OPENPROJECT_SAML_NAME_IDP__CERT` (beware of newlines and formatting the cert, [c.f. the idP certificate options in omniauth-saml](https://github.com/omniauth/omniauth-saml#options))
|
||||
|
||||
#### 2.2 Mandatory: Attribute mapping
|
||||
#### Mandatory: Attribute mapping
|
||||
|
||||
Use the key `attribute_statements` to provide mappings for attributes returned by the SAML identity provider's response to OpenProject internal attributes.
|
||||
|
||||
@@ -243,89 +199,22 @@ You may provide attribute names or namespace URIs as follows: `email: ['http://s
|
||||
|
||||
The OpenProject username is taken by default from the `email` attribute if no explicit login attribute is present.
|
||||
|
||||
**a) Attribute mapping example for database**
|
||||
|
||||
```ruby
|
||||
Setting.plugin_openproject_auth_saml = Hash(Setting.plugin_openproject_auth_saml).deep_merge({
|
||||
"providers" => {
|
||||
"saml" => {
|
||||
# ... other attributes, see above.
|
||||
# Attribute map in SAML
|
||||
"attribute_statements" => {
|
||||
# What attribute in SAML maps to email (default: mail)
|
||||
"email" => ['mail'],
|
||||
# another example for combined attributes in an array:
|
||||
"login" => ['username', 'samAccountName', 'uid'],
|
||||
# What attribute in SAML maps to the first name (default: givenName)
|
||||
"first_name" => ['givenName'],
|
||||
# What attribute in SAML maps to the last name (default: sn)
|
||||
"last_name" => ['sn']
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
```bash
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_EMAIL="[mail]"
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_LOGIN="[mail]"
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_FIRST__NAME="[givenName]"
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_LAST__NAME="[sn]"
|
||||
# You can specify a UID attribute to use. If not present, will take the NAMEID
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_UID="[uid]"
|
||||
# You can also specify multiple attributes, the first found value will be used. Example:
|
||||
# OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_LOGIN="['mail', 'samAccountName', 'uid']"
|
||||
```
|
||||
|
||||
**b) Attribute mapping example for configuration.yml**
|
||||
|
||||
> [!IMPORTANT]
|
||||
> ONLY for OpenProject version 11 and older
|
||||
|
||||
```yaml
|
||||
default:
|
||||
# <-- other configuration -->
|
||||
mysaml1:
|
||||
# <-- other configuration -->
|
||||
# Attribute map in SAML
|
||||
attribute_statements:
|
||||
# Use the `mail` attribute for
|
||||
email: ['mail']
|
||||
# Use the mail address as login
|
||||
login: ['mail']
|
||||
# What attribute in SAML maps to the first name (default: givenName)
|
||||
first_name: ['givenName']
|
||||
# What attribute in SAML maps to the last name (default: sn)
|
||||
last_name: ['sn']
|
||||
```
|
||||
|
||||
#### 2.3 Optional: Set the attribute format
|
||||
|
||||
By default, the attributes above will be requested with the format `urn:oasis:names:tc:SAML:2.0:attrname-format:basic`.
|
||||
That means the response should contain attribute names 'mail', etc. as configured above.
|
||||
|
||||
If you have URN or OID attribute identifiers, you can modify the request as follows:
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Example is ONLY for OpenProject version 11 and older and needs to be redesigned for ENV configuration
|
||||
|
||||
```yaml
|
||||
default:
|
||||
# <-- other configuration -->
|
||||
mysaml1:
|
||||
# <-- other configuration -->
|
||||
# Modify the request attribute sent in the request
|
||||
# These oids are exemplary, but will often be identical,
|
||||
# please check with your identity provider for the correct oids
|
||||
request_attributes:
|
||||
- name: 'urn:oid:0.9.2342.19200300.100.1.3'
|
||||
friendly_name: 'Mail address'
|
||||
name_format: urn:oasis:names:tc:SAML:2.0:attrname-format:uri
|
||||
- name: 'urn:oid:2.5.4.42'
|
||||
friendly_name: 'First name'
|
||||
name_format: urn:oasis:names:tc:SAML:2.0:attrname-format:uri
|
||||
- name: 'urn:oid:2.5.4.4'
|
||||
friendly_name: 'Last name'
|
||||
name_format: urn:oasis:names:tc:SAML:2.0:attrname-format:uri
|
||||
|
||||
# Attribute map in SAML
|
||||
attribute_statements:
|
||||
email: ['urn:oid:0.9.2342.19200300.100.1.3']
|
||||
login: ['urn:oid:0.9.2342.19200300.100.1.3']
|
||||
first_name: ['urn:oid:2.5.4.42']
|
||||
last_name: ['urn:oid:2.5.4.4']
|
||||
```
|
||||
|
||||
#### 2.4 Optional: Request signature and Assertion Encryption
|
||||
#### Optional: Request signature and Assertion Encryption
|
||||
|
||||
Your identity provider may optionally encrypt the assertion response, however note that with the required use of TLS transport security, in many cases this is not necessary. You may wish to use Assertion Encryption if TLS is terminated before the OpenProject application server (e.g., on the load balancer level).
|
||||
|
||||
@@ -334,86 +223,73 @@ To configure assertion encryption, you need to provide the certificate to send i
|
||||
> [!IMPORTANT]
|
||||
> Example is ONLY for OpenProject version 11 and older and needs to be redesigned for ENV configuration
|
||||
|
||||
```yaml
|
||||
default:
|
||||
# <-- other configuration -->
|
||||
mysaml1:
|
||||
# <-- other configuration -->
|
||||
certificate: "-----BEGIN CERTIFICATE-----\n .... certificate contents ....\n-----END CERTIFICATE-----"
|
||||
private_key: "-----BEGIN PRIVATE KEY-----\n .... private key contents ....\n-----END PRIVATE KEY-----"
|
||||
```bash
|
||||
OPENPROJECT_SAML_SAML_CERTIFICATE="-----BEGIN CERTIFICATE-----\n .... certificate contents ....\n-----END CERTIFICATE--""
|
||||
OPENPROJECT_SAML_SAML_PRIVATE__KEY="-----BEGIN PRIVATE KEY-----\n .... private key contents ....\n-----END PRIVATE KEY-----"
|
||||
```
|
||||
|
||||
Request signing means that the service provider (OpenProject in this case) uses the certificate specified to sign the request to the identity provider. They reuse the same `certificate` and `private_key` settings as for assertion encryption. It is recommended to use an RSA key pair, the key must be provided without password.
|
||||
Request signing means that the service provider (OpenProject in this case) uses the certificate specified to sign the request to the identity provider. They reuse the same `CERTIFICATE` and `PRIVATE__KEY` settings as for assertion encryption. It is recommended to use an RSA key pair, the key must be provided without password.
|
||||
|
||||
To enable request signing, enable the following flag:
|
||||
For request signing and assertion encryption, these attributes are available
|
||||
|
||||
> [!IMPORTANT]
|
||||
> Example is ONLY for OpenProject version 11 and older and needs to be redesigned for ENV configuration
|
||||
|
||||
```yaml
|
||||
default:
|
||||
# <-- other configuration -->
|
||||
mysaml1:
|
||||
# <-- other configuration -->
|
||||
certificate: "-----BEGIN CERTIFICATE-----\n .... certificate contents ....\n-----END CERTIFICATE-----"
|
||||
private_key: "-----BEGIN PRIVATE KEY-----\n .... private key contents ....\n-----END PRIVATE KEY-----"
|
||||
security:
|
||||
# Whether SP and idP should sign requests and assertions
|
||||
authn_requests_signed: true
|
||||
want_assertions_signed: true
|
||||
# Whether the idP should encrypt assertions
|
||||
want_assertions_signed: false
|
||||
embed_sign: true
|
||||
signature_method: 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256'
|
||||
digest_method: 'http://www.w3.org/2001/04/xmlenc#sha256'
|
||||
```bash
|
||||
# When true, OpenProject will sign AuthnRequests using the above certificate and private key pair
|
||||
OPENPROJECT_SAML_SAML_SECURITY_AUTHN__REQUESTS__SIGNED="false"
|
||||
# When true, OpenProject will require assertions to be signed using a private key matching the provided IDP__CERT
|
||||
OPENPROJECT_SAML_SAML_SECURITY_WANT_ASSERTIONS_SIGNED="false"
|
||||
# When true, OpenProject will require assertiations to be encrypted using the public key from CERTIFICATE
|
||||
OPENPROJECT_SAML_SAML_SECURITY_WANT_ASSERTIONS_ENCRYPTED="false"
|
||||
# Whether to embed the signature in the request.
|
||||
OPENPROJECT_SAML_SAML_SECURITY_EMBED__SIGN="true"
|
||||
# XML definition of signature and digest methods
|
||||
OPENPROJECT_SAML_SAML_SECURITY_SIGNATURE__METHOD="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"
|
||||
OPENPROJECT_SAML_SAML_SECURITY_DIGEST__METHOD="http://www.w3.org/2000/09/xmldsig#sha1"
|
||||
```
|
||||
|
||||
With request signing enabled, the certificate will be added to the identity provider to validate the signature of the service provider's request.
|
||||
|
||||
#### 2.5. Optional: Restrict who can automatically self-register
|
||||
|
||||
#### Optional: Restrict who can automatically self-register
|
||||
|
||||
You can configure OpenProject to restrict which users can register on the system with the [authentication self-registration setting](../authentication-settings)
|
||||
|
||||
By default, users returning from a SAML idP will be automatically created. If you'd like for the SAML integration to respect the configured self-registration option, please use this setting:
|
||||
|
||||
```yaml
|
||||
default:
|
||||
# <-- other configuration -->
|
||||
mysaml1:
|
||||
# <-- other configuration -->
|
||||
limit_self_registration: true
|
||||
```bash
|
||||
OPENPROJECT_SAML_SAML_LIMIT__SELF__REGISTRATION="true"
|
||||
```
|
||||
|
||||
#### 2.6. Optional: Set name_identifier_format
|
||||
#### Optional: Set name_identifier_format
|
||||
|
||||
There are a number of name identifier formats that are relevant, so if you have specific requirements or configuration on the identity provider side, you might need to set the name_identifier_format property.
|
||||
|
||||
The default behavior would be to use the email Address like so:
|
||||
|
||||
```yaml
|
||||
default:
|
||||
# <-- other configuration -->
|
||||
mysaml1:
|
||||
# <-- other configuration -->
|
||||
name_identifier_format: "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
|
||||
```bash
|
||||
OPENPROJECT_SAML_SAML_NAME__IDENTIFIER__FORMAT="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
|
||||
```
|
||||
|
||||
### 3: Restart the server
|
||||
### Applying the configuration
|
||||
|
||||
Once the configuration is completed, restart your OpenProject server with `service openproject restart`. If you configured SAML through settings, this step can be ignored.
|
||||
To apply the configuration after changes, you need to run the `db:seed` rake task. In all installations, this command is run automatically when you upgrade or install your application. Use the following commands based on your installation method:
|
||||
|
||||
#### XML Metadata exchange
|
||||
- **Packaged installation**: `sudo openproject run bundle exec rake db:seed`
|
||||
|
||||
The configuration will enable the SAML XML metadata endpoint at `https://<your openproject host>/auth/saml/metadata`
|
||||
- **Docker**: `docker exec -it <container of all-in-one or web> bundle exec rake db:seed`.
|
||||
|
||||
|
||||
|
||||
### XML Metadata exchange
|
||||
|
||||
Once applied, the configuration will enable the SAML XML metadata endpoint at `https://<your openproject host>/auth/saml/metadata`
|
||||
for service discovery use with your identity provider.
|
||||
|
||||
### 4: Log in
|
||||
### Log in
|
||||
|
||||
From there on, you will see a button dedicated to logging in via SAML, e.g named "My SSO" (depending on the name you chose in the configuration), when logging in. Clicking it will redirect to your SSO provider and return with your attribute data to set up the account, or to log in.
|
||||
|
||||

|
||||
|
||||
### 5: Return from the authentication provider
|
||||
## Troubleshooting
|
||||
|
||||
When you return from the authentication provider, you might be shown one of these return paths:
|
||||
|
||||
@@ -422,6 +298,22 @@ When you return from the authentication provider, you might be shown one of thes
|
||||
3. You are being redirected to the account registration modal as user name or email is already taken. In this case, the account you want to authenticate already has an internal OpenProject account. You need to follow the [Troubleshooting](#troubleshooting) guide below to enable taking over that existing account.
|
||||
4. You are getting an internal or authentication error message. This is often a permission or invalid certificate/fingerprint configuration. Please consult the server logs for any hints OpenProject might log there.
|
||||
|
||||
|
||||
|
||||
## Direct login
|
||||
|
||||
Once created, you can assign this SAML provider to become the direct login provider. Users will be directed to the login page of the provider without seeing a login form in OpenProject. [Read more](../../../installation-and-operations/configuration/#omniauth-direct-login-provider).
|
||||
|
||||
In the user interface, you can assign this through [Administration > Authentication > Settings](../authentication-settings/).
|
||||
|
||||
Using environment variables, you could also set this in the following way
|
||||
|
||||
```bash
|
||||
OPENPROJECT_OMNIAUTH__DIRECT__LOGIN__PROVIDER="saml" # This value should be the 'name' property of your configuration
|
||||
```
|
||||
|
||||
|
||||
|
||||
## Instructions for common SAML providers
|
||||
|
||||
In the following, we will provide configuration values for common SAML providers. Please note that the exact values might differ depending on your idP's version and configuration. If you have additions to these variables, please use the "Edit this file" functionality in the "Docs feedback" section of this documentation.
|
||||
@@ -438,11 +330,11 @@ For ADFS, you need add OpenProject as a "relying part trust" entry within the AD
|
||||
- **Specify Display Name**: Enter "OpenProject" or any arbitrary name for the OpenProject instance you want to identify
|
||||
- **Configure Certificate**: Skip this step, unless you explicitly want to enable assertion encryption, whose steps are documented for OpenProject above.
|
||||
|
||||
- **Configure URL**: Check "Enable support for the SAML 2.0 WebSSO protocol" and enter the URL `https://<Your OpenProject hostname>/auth/saml`
|
||||
- **Configure URL**: Check "Enable support for the SAML 2.0 WebSSO protocol" and enter the URL `https://<Your OpenProject hostname>/auth/saml-sso`
|
||||
|
||||
- **Configure Identifier**: Add the value `https://<Your OpenProject hostname>` as a "Relying party trust identifier". This is also called the issuer and OpenProject will be configured to send this value
|
||||
- **Choose Access Control Policy**: Select an appropriate access control policy for the OpenProject instance
|
||||
- **Ready to Add Trust**: Under the tab endpoints, click on "Add SAML" to add a **SAML Assertion Consumer** with Binding `POST` and the Trusted URL set to `https://<Your OpenProject hostname>/auth/saml/callback`
|
||||
- **Ready to Add Trust**: Under the tab endpoints, click on "Add SAML" to add a **SAML Assertion Consumer** with Binding `POST` and the Trusted URL set to `https://<Your OpenProject hostname>/auth/saml-sso/callback`
|
||||
- Click next and select "Configure claims issuance policy for this application"
|
||||
|
||||
A new wizard will pop up. If you missed this step, you can right click on the new party to select "Edit Claim Issuance Policy". In there, you will need to create attribute mappings from LDAP for OpenProject to access user data such as login, email address, names etc.
|
||||
@@ -470,24 +362,38 @@ OpenProject needs the certificate or fingerprint of the ADFS to validate the sig
|
||||
- Right click on the "Token-signing" certificate and click on "View Certificate..."
|
||||
- Select the action "Copy to File..."
|
||||
- Click on Next and select "Base-64 encoded X.509 (.CER)" and click Next
|
||||
- Export the file and move it to the OpenProject instance or open a shell
|
||||
- Run the command `awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' <path to the certificate>`
|
||||
- Export the file and copy its contents
|
||||
-
|
||||
|
||||
#### Set up OpenProject for ADFS integration
|
||||
#### Set up OpenProject UI for ADFS integration
|
||||
|
||||
In OpenProject, these are the variables you will need to set. Please refer to the above documentation for the different ways you can configure these variables OpenProject
|
||||
In OpenProject, these are the variables you will need to set. Please refer to the above documentation for the different ways you can configure these variables OpenProject.
|
||||
|
||||
| UI attribute | Value |
|
||||
| --------------------------------- | ------------------------------------------------------ |
|
||||
| Display name | for example, `SSO` (name is arbitrary) |
|
||||
| Attribute Mapping for: Email | mail |
|
||||
| Attribute Mapping for: Login | uid<br />mail |
|
||||
| Attribute Mapping for: Last name | sn |
|
||||
| Attribute Mapping for: First name | givenName |
|
||||
| Identity provider login endpoint | `https://<Your ADFS hostname>/adfs/ls` |
|
||||
| Identity provider logout endpoint | `https://<Your ADFS hostname>/adfs/ls/?wa=wsignout1.0` |
|
||||
| Certificate | the |
|
||||
|
||||
|
||||
|
||||
**Alternative: Setting up through environment variables**
|
||||
|
||||
You will need to format the certificate so that it works in environment variables: `awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' <path to the certificate>` . These are the attributes
|
||||
|
||||
```shell
|
||||
OPENPROJECT_SAML_SAML_NAME="saml"
|
||||
OPENPROJECT_SAML_SAML_NAME="saml-sso"
|
||||
OPENPROJECT_SAML_SAML_DISPLAY__NAME="ADFS SSO" # This is the text shown to users in OpenProject, freely change this value
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_EMAIL="[mail]"
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_LOGIN="[uid, mail]"
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_FIRST__NAME="[givenName]"
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_LAST__NAME="[sn]"
|
||||
OPENPROJECT_SAML_SAML_ASSERTION__CONSUMER__SERVICE__URL="https://<Your OpenProject hostname>/auth/saml/callback"
|
||||
OPENPROJECT_SAML_SAML_SSO__TARGET__URL="https://<Your ADFS hostname>/adfs/ls"
|
||||
OPENPROJECT_SAML_SAML_SLO__TARGET__URL="https://<Your ADFS hostname>/adfs/ls/?wa=wsignout1.0"
|
||||
OPENPROJECT_SAML_SAML_ISSUER="https://<Your OpenProject hostname>"
|
||||
OPENPROJECT_SAML_SAML_IDP__CERT="<The output of the awk command above>"
|
||||
```
|
||||
|
||||
@@ -500,16 +406,16 @@ In Keycloak, use the following steps to set up a SAML integration OpenProject:
|
||||
- **Add client**: Enter the following details
|
||||
- **Client ID**: `https://<Your OpenProject hostname>`
|
||||
- **Client protocol**: Set to "saml"
|
||||
- **Client SAML Endpoint**: `https://<Your OpenProject hostname>/auth/saml`
|
||||
- **Client SAML Endpoint**: `https://<Your OpenProject hostname>/auth/saml-keycloak`
|
||||
|
||||
You will be forwarded to the settings tab of the new client. Change these settings:
|
||||
|
||||
- Enable **Sign Documents**
|
||||
- **Master SAML Processing URL**: Set to `https://<Your OpenProject hostname>/auth/saml`
|
||||
- **Master SAML Processing URL**: Set to `https://<Your OpenProject hostname>/auth/saml-keycloak`
|
||||
- **Name ID Format** Set to username
|
||||
- Expand section "Fine Grain SAML Endpoint Configuration"
|
||||
- **Assertion Consumer Service POST Binding URL**: Set to `https://<Your OpenProject hostname>/auth/saml/callback`
|
||||
- **Assertion Consumer Service Redirect Binding URL**: Set to `https://<Your OpenProject hostname>/auth/saml/callback`
|
||||
- **Assertion Consumer Service POST Binding URL**: Set to `https://<Your OpenProject hostname>/auth/saml-keycloak/callback`
|
||||
- **Assertion Consumer Service Redirect Binding URL**: Set to `https://<Your OpenProject hostname>/auth/saml-keycloak/callback`
|
||||
|
||||
Go the "Mappers" tab and create the following mappers. Note that the "User attribute" values might differ depending on your LDAP or Keycloak configuration.
|
||||
|
||||
@@ -520,32 +426,32 @@ Go the "Mappers" tab and create the following mappers. Note that the "User attri
|
||||
| User Attribute | firstName | givenName | givenName | Basic |
|
||||
| User Attribute | email | mail | mail | Basic |
|
||||
|
||||
#### Export the Keycloak public certificate
|
||||
|
||||
To view the certificate in Base64 encoding, go to the menu "Realm settings" and click on "Endpoints -> SAML 2.0 Identity Provider Metadata". This will open an XML file, and the certificate is stored in the `ds:X509Certificate` node under the signing key. Copy the content of the certificate (`MII.....`)
|
||||
|
||||
#### Set up OpenProject for Keycloak integration
|
||||
|
||||
In OpenProject, these are the variables you will need to set. Please refer to the above documentation for the different ways you can configure these variables OpenProject
|
||||
In OpenProject, you can use the Metadata exchange from Keycloak to import the values. In the keycloak realm, you will find the metadata endpoint for SAML at the bottom of the page under "Realm settings -> Endpoints".
|
||||
|
||||
Go to Administration -> Authentication -> SAML providers and create a new provider with the name "Keycloak". Then, use the metadata URL to fill out the parameters. Logging in should immediately work afterwards.
|
||||
|
||||
**Alternative: Setting up through environment variables**
|
||||
|
||||
You will need to format the certificate so that it works in environment variables. To view the certificate in Base64 encoding, go to the menu "Realm settings" and click on "Endpoints -> SAML 2.0 Identity Provider Metadata". This will open an XML file, and the certificate is stored in the `ds:X509Certificate` node under the signing key. Copy the content of the certificate (`MII.....`)`awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}' <path to the certificate>` . These are the attributes
|
||||
|
||||
```shell
|
||||
OPENPROJECT_SAML_SAML_NAME="saml"
|
||||
OPENPROJECT_SAML_SAML_DISPLAY__NAME="Keycloak SSO" # This is the text shown to users in OpenProject, freely change this value
|
||||
OPENPROJECT_SAML_SAML_NAME="saml-keycloak"
|
||||
OPENPROJECT_SAML_SAML_DISPLAY__NAME="Keycloak" # This is the text shown to users in OpenProject, freely change this value
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_EMAIL="[mail]"
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_LOGIN="[uid, mail]"
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_FIRST__NAME="[givenName]"
|
||||
OPENPROJECT_SAML_SAML_ATTRIBUTE__STATEMENTS_LAST__NAME="[sn]"
|
||||
OPENPROJECT_SAML_SAML_ASSERTION__CONSUMER__SERVICE__URL="https://<Your OpenProject hostname>/auth/saml/callback"
|
||||
OPENPROJECT_SAML_SAML_SSO__TARGET__URL="https://<Your Keycloak hostname>/realms/<Keycloak REALM>/protocol/saml"
|
||||
OPENPROJECT_SAML_SAML_SLO__TARGET__URL="https://<Your Keycloak hostname>/realms/<Keycloak RELAM>/protocol/saml"
|
||||
OPENPROJECT_SAML_SAML_ISSUER="https://<Your OpenProject hostname>"
|
||||
OPENPROJECT_SAML_SAML_IDP__SSO__SERVICE__URL="https://<Your Keycloak hostname>/realms/<Keycloak RELAM>/protocol/saml"
|
||||
OPENPROJECT_SAML_SAML_IDP__CERT="<The certificate base64 copied from the metadata XML>"
|
||||
```
|
||||
|
||||
If you're unsure what the realm value is, go to the menu "Realm settings" and click on "Endpoints -> SAML 2.0 Identity Provider Metadata". This will include URLs for the `SingleSignOnService` and `SingleLogoutService`.
|
||||
|
||||
## Troubleshooting
|
||||
## FAQ
|
||||
|
||||
**Q: After clicking on a provider badge, I am redirected to a signup form that says a user already exists with that login.**
|
||||
|
||||
@@ -562,17 +468,9 @@ sudo openproject run console
|
||||
|
||||
Then, existing users should be able to log in using their SAML identity. Note that this works only if the user is using password-based authentication, and is not linked to any other authentication source (e.g. LDAP) or OpenID provider.
|
||||
|
||||
Note that this setting is set to true by default for new installations already.
|
||||
Note that this setting is set to true by default for new installations already. If you're on the Hosted Enterprise Cloud, reach out to our Customer Support to see if this is flag is enabled already.
|
||||
|
||||
**Q: Could the users be automatically logged in to OpenProject if they are already authenticated at the SAML Identity Provider?**
|
||||
|
||||
A: You are able to chose a default direct-login-provider in the by using environment variables
|
||||
|
||||
```yaml
|
||||
OPENPROJECT_OMNIAUTH__DIRECT__LOGIN__PROVIDER="saml"
|
||||
```
|
||||
|
||||
[Read more](../../../installation-and-operations/configuration/#omniauth-direct-login-provider)
|
||||
|
||||
**Q:** `"certificate"` **and** `"private key"` **are used in the SAML configuration and openproject logs show a FATAL error after GET "/auth/saml"** `**FATAL** -- : OpenSSL::PKey::RSAError (Neither PUB key nor PRIV key: nested asn1 error):`
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 142 KiB |
@@ -13,7 +13,7 @@ To activate and **configure two-factor authentication** for OpenProject, navigat
|
||||
|
||||
From the GUI you are able to configure the following options:
|
||||
|
||||
1. **Enforce 2FA** (two-factor authentication) for every user. All users will be forced to [register a 2FA device](../../../user-guide/my-account/#two-factor-authentication) on their next login.
|
||||
1. **Enforce 2FA** (two-factor authentication) for every user. All users will be forced to [register a 2FA device](../../../user-guide/account-settings/#two-factor-authentication) on their next login.
|
||||
2. **Remember 2FA login** for a given number of days, e.g. 30 days.
|
||||
3. Press the **Apply** button to save your changes.
|
||||
|
||||
|
||||
@@ -64,8 +64,8 @@ You can [assign a custom field to a work package type](../manage-work-packages/w
|
||||
|
||||
You can activate the custom field for specific projects under the respective [project settings](../../user-guide/projects/project-settings/custom-fields/).
|
||||
|
||||
>[!TIP]
|
||||
>This is not relevant if the setting **For all projects** has been configured for the custom field.
|
||||
> [!TIP]
|
||||
> This is not relevant if the setting **For all projects** has been configured for the custom field.
|
||||
|
||||
You can active a custom field for multiple projects at once by opening the custom field in question and selecting the *Projects* tab. Click the **Add projects** button.
|
||||

|
||||
|
||||
@@ -9,8 +9,6 @@ keywords: custom fields for projects, show custom fields
|
||||
|
||||
As a user of [OpenProject Enterprise on-premises](https://www.openproject.org/enterprise-edition/) or [OpenProject Enterprise cloud](https://www.openproject.org/enterprise-edition/#hosting-options) you can customize work package lists and show additional project information by adding custom attributes to project lists, e.g. adding accountable, project due date, progress, and more.
|
||||
|
||||
>[!IMPORTANT]
|
||||
>
|
||||
>Starting with version 14.0, project custom fields are called "project attributes". Please refer to our [user guide on project attributes](../../../user-guide/project-overview) for more information.
|
||||
>
|
||||
>If you are an administrator and wish to configure project attributes, please refer to our [admin guide on project attributes](../../projects/project-attributes).
|
||||
> [!IMPORTANT]
|
||||
> Starting with version 14.0, project custom fields are called "project attributes". Please refer to our [user guide on project attributes](../../../user-guide/project-overview) for more information.
|
||||
> If you are an administrator and wish to configure project attributes, please refer to our [admin guide on project attributes](../../projects/project-attributes).
|
||||
|
||||
|
Before Width: | Height: | Size: 90 KiB |
|
Before Width: | Height: | Size: 23 KiB |
@@ -58,4 +58,4 @@ To configure **Incoming emails** in OpenProject, navigate to **Administration
|
||||
|
||||
**To set up incoming email**, please visit our [Operations guide](../../installation-and-operations/configuration/incoming-emails).
|
||||
|
||||
**To configure individual email reminders**, please visit our [User guide](../../user-guide/my-account/#email-reminders).
|
||||
**To configure individual email reminders**, please visit our [User guide](../../user-guide/account-settings/#email-reminders).
|
||||
|
||||
@@ -88,7 +88,7 @@ terms instead, defined in the [relations model](https://github.com/opf/openproje
|
||||

|
||||
|
||||
**URL**: the URL of your OpenProject instance.
|
||||
**API-Token**: can be generated within your OpenProject installation ->*My Account* -> *Access token*. Generate a new API token and copy & paste it to this form.
|
||||
**API-Token**: can be generated within your OpenProject installation ->*Account settings* -> *Access token*. Generate a new API token and copy & paste it to this form.
|
||||
**Project**: this is the project identifier which can be found within the project you want to synchronize -> *Project settings* -> *Information*. It is also shown in the URL if you open a project.
|
||||
Query ID (this field is optional): enter the ID of a work package query within a project with that you want to synchronize your Excel list.
|
||||
|
||||
|
||||
@@ -96,17 +96,18 @@ The role needs two permissions and should only receive those two: "View work pac
|
||||
|
||||

|
||||
|
||||
Once the user is created you need to generate an OpenProject API token for it
|
||||
to use later on the GitHub side of things. For this you have to:
|
||||
Once the user is created you need to generate an OpenProject API token for this user (you will need it on the GitHub side). For this you have to:
|
||||
|
||||
1. Login as the newly created user
|
||||
2. Go to My Account (click on Avatar in top right corner)
|
||||
3. Go to Access Token
|
||||
4. Click on generate in the API row
|
||||
2. Go to [Account settings](../../../user-guide/account-settings/) (click on the Avatar in the top right corner and select *Account settings*)
|
||||
3. Go to [*Access Tokens*](../../../user-guide/account-settings/#access-tokens)
|
||||
4. Click on **+ API token**
|
||||
|
||||
Copy the generated key. You can then configure the necessary webhook in GitHub.
|
||||
> Make sure you copy the generated key and securely save it, as you will not be able to retrieve it later.
|
||||
|
||||
In addition, in *Project settings* and *Modules* you will need to activate the GitHub module so that all information pulling through from GitHub will be shown in the work packages.
|
||||
You can then configure the necessary webhook in GitHub.
|
||||
|
||||
Finally you will need to activate the GitHub module under [Project settings](../../../user-guide/projects/project-settings/modules/) so that all information pulling through from GitHub will be shown in the work packages.
|
||||
|
||||

|
||||
|
||||
|
||||
@@ -47,8 +47,8 @@ This user will then have to be **added to each project** with a role that allows
|
||||
Once the user is created you need to generate an OpenProject API token for this user (you will need it on the GitLab side). For this you have to:
|
||||
|
||||
1. Login as the newly created user
|
||||
2. Go to [My Account](../../../user-guide/my-account/) (click on the Avatar in the top right corner and select *My account*)
|
||||
3. Go to [*Access Tokens*](../../../user-guide/my-account/#access-tokens)
|
||||
2. Go to [Account settings](../../../user-guide/account-settings/) (click on the Avatar in the top right corner and select *Account settings*)
|
||||
3. Go to [*Access Tokens*](../../../user-guide/account-settings/#access-tokens)
|
||||
4. Click on **+ API token**
|
||||
|
||||
> Make sure you copy the generated key and securely save it, as you will not be able to retrieve it later.
|
||||
|
||||
@@ -312,10 +312,8 @@ If you face an error while trying to delete or disable user/group "OpenProject"
|
||||
2. Remove user `OpenProject`
|
||||
3. Remove group `OpenProject`
|
||||
4. Inside the _Group folders_ App (*Administration settings → Administration → Group folders*), remove group folder `OpenProject`.
|
||||
|
||||
[!WARNING]
|
||||
This step will delete all files in that folder. Make sure to make a copy if you want to keep these files!**
|
||||
|
||||
> [!WARNING]
|
||||
> This step will delete all files in that folder. Make sure to make a copy if you want to keep these files!**
|
||||
5. Enable the _OpenProject Integration_ App
|
||||
|
||||
### Setting up Nextcloud in OpenProject
|
||||
|
||||
|
Before Width: | Height: | Size: 42 KiB |
@@ -32,9 +32,7 @@ A new window will open, where you will be able to specify the following:
|
||||
2. The % Complete value in [Status-based progress calculation mode](../work-package-settings/).
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> The value for % Complete can be set from 0 to 100.
|
||||
>
|
||||
|
||||
3. Define if the new work package status closes a work package (e.g. relevant when filtering for closed for packages), e.g. a work package status "rejected" will set a work package technically on closed and it will not appear in the default work package table with Open Work packages.
|
||||
|
||||
|
||||
@@ -47,8 +47,8 @@ This will display the "New attribute" form with these options:
|
||||
|
||||
- **Format**: You can pick from nine different types of fields: text, long text, integer, float, list, date, boolean, user and version.
|
||||
|
||||
> [!TIP]
|
||||
> You cannot change this once the project attribute is created.
|
||||
> [!TIP]
|
||||
> You cannot change this once the project attribute is created.
|
||||
|
||||
- **Format options:** Depending on the type you choose, you might have additional options, such as minimum and maximum width, default value or regular expressions for validation.
|
||||
|
||||
@@ -56,8 +56,8 @@ This will display the "New attribute" form with these options:
|
||||
|
||||
- **Admin-only**: If you enable this, the project attribute will only be visible to administrators. All other users will not see it, even if it is activated in a project.
|
||||
|
||||
> [!TIP]
|
||||
> This is enabled by default. Only disable this if you want this field to be invisible to non-admin users.
|
||||
> [!TIP]
|
||||
> This is enabled by default. Only disable this if you want this field to be invisible to non-admin users.
|
||||
|
||||
- **Searchable**: Checking this makes this project attribute (and its value) available as a filter in project lists.
|
||||
|
||||
@@ -69,14 +69,13 @@ You can edit existing attributes under **Administration settings** → **Project
|
||||
|
||||
Click on the More icon to the right of each project attribute to edit, re-order or delete a project attribute.
|
||||
|
||||
>[!CAUTION]
|
||||
>Deleting a project attribute will delete it and the corresponding values for it from all projects.
|
||||
> [!CAUTION]
|
||||
> Deleting a project attribute will delete it and the corresponding values for it from all projects.
|
||||
|
||||
You can also use the drag handles to the left of each project attribute to drag and drop it to a new position.
|
||||
|
||||
>[!NOTE]
|
||||
>
|
||||
>Project admins can chose to enable or disable a project attribute from their project, but they cannot change the order. The order set in this page is the order in which they will appear in all projects.
|
||||
> [!NOTE]
|
||||
> Project admins can chose to enable or disable a project attribute from their project, but they cannot change the order. The order set in this page is the order in which they will appear in all projects.
|
||||
|
||||
|
||||
|
||||
@@ -111,13 +110,11 @@ You can group project attributes into sections to better organize them.
|
||||
You can click on more icon to the right of each section to rename it, delete it or change its order.
|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> A section can only be deleted if no project attributes were assigned to it.
|
||||
|
||||
You can drag any existing project attribute into a section to move it there. You may also drag and drop entire sections up and down to re-order them.
|
||||
|
||||
>[!TIP]
|
||||
>
|
||||
>If a project attribute belongs to a section, it will be displayed within that section in _all_ projects.
|
||||
> [!TIP]
|
||||
> If a project attribute belongs to a section, it will be displayed within that section in _all_ projects.
|
||||
|
||||

|
||||
|
||||
@@ -16,4 +16,4 @@ At the moment there are over 30 languages available.
|
||||
> [!NOTE]
|
||||
> Many languages are translated by the community. We highly appreciate if you want to [help translating OpenProject to your language](../../../development/translate-openproject).
|
||||
|
||||
You can [choose your language in your user profile](../../../user-guide/my-account/#change-your-language).
|
||||
You can [choose your language in your user profile](../../../user-guide/account-settings/#change-your-language).
|
||||
|
||||
@@ -64,8 +64,8 @@ A user can have one or more roles which grant permissions on different levels.
|
||||
|
||||
**A project role** is a set of **permissions** that can be assigned to any project member. Multiple roles can be assigned to the same project member.<br>
|
||||
|
||||
>[!NOTE]
|
||||
>If a module is not enabled in a project it is not shown to a user despite having a permission for it.
|
||||
> [!NOTE]
|
||||
> If a module is not enabled in a project it is not shown to a user despite having a permission for it.
|
||||
|
||||
| Scope of the role | Permission examples | Customization options |
|
||||
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
@@ -75,8 +75,8 @@ A user can have one or more roles which grant permissions on different levels.
|
||||
|
||||
**Non member** is the default role of users of your OpenProject instance who have not been added to a project. This only applies if the project has been set as [public](../../../user-guide/projects/#set-a-project-to-public) in the project settings.<br>
|
||||
|
||||
>[!NOTE]
|
||||
The *Non-member* role cannot be deleted.
|
||||
> [!NOTE]
|
||||
> The *Non-member* role cannot be deleted.
|
||||
|
||||
| Scope of the role | Permission examples | Customization options |
|
||||
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
@@ -86,7 +86,7 @@ The *Non-member* role cannot be deleted.
|
||||
|
||||
OpenProject allows to share project information with **anonymous** users which are not logged in. This is helpful to communicate projects goals and activities with a public community.<br>
|
||||
|
||||
>[!NOTE]
|
||||
> [!NOTE]
|
||||
> This only applies if you disabled the need for authentication for your instance and if the project is set as **public**. The *Anonymous* role cannot be deleted.
|
||||
|
||||
| Scope of the role | Permission examples | Customization options |
|
||||
@@ -97,7 +97,7 @@ OpenProject allows to share project information with **anonymous** users which a
|
||||
|
||||
**Standard** is the default role of users of your OpenProject instance. It is configured by administrators on the instance level. <br>
|
||||
|
||||
>[!NOTE]
|
||||
> [!NOTE]
|
||||
> The *Standard* role cannot be deleted and it is applied to every user on the instance. Users cannot be assigned to, or unassigned from this role.
|
||||
|
||||
| Scope of the role | Permission examples | Customization options |
|
||||
|
||||
@@ -33,7 +33,7 @@ The default language is displayed for users when they first sign into OpenProjec
|
||||
|
||||
You can also choose if success notifications (e.g. on the work package page) should be hidden automatically.
|
||||
|
||||
These settings can be changed by users in their **My Account** page later on.
|
||||
These settings can be changed by users in their **Account settings** page later on.
|
||||
|
||||
## Display format
|
||||
|
||||
@@ -49,7 +49,7 @@ In the **User deletion** section you can determine who should be able to delete
|
||||
|
||||
By default, only admins are able to delete accounts. If this option is activated, admins can navigate to the user list, select a user account and click on the **Delete** option on the upper right side to delete an account.
|
||||
|
||||
Additionally, you can select the option **Users allowed to delete their accounts**. If this option is activated, users can delete their own user accounts from the **My account** page.
|
||||
Additionally, you can select the option **Users allowed to delete their accounts**. If this option is activated, users can delete their own user accounts from the **Account settings** page.
|
||||
|
||||
If you want to prevent users from deleting their own accounts, it is recommended to deactivate this option.
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ Please note: this only works for users who haven't logged in yet. If the user is
|
||||
|
||||
## Manage user settings
|
||||
|
||||
You can manage individual user details if you click on the user name in the list. These settings will overwrite the individual user's settings set in their **My Account** settings.
|
||||
You can manage individual user details if you click on the user name in the list. These settings will overwrite the individual user's settings set in their **Account settings**.
|
||||
|
||||
### General settings
|
||||
|
||||
@@ -168,11 +168,11 @@ On the **Global roles** tab, select or de-select the global role(s) for this use
|
||||
|
||||
### Notification settings
|
||||
|
||||
Under **Notification settings** tab you can edit the [notification settings](../../../user-guide/notifications/notification-settings/) for the user. Each user can adjust these settings under [My account](../../../user-guide/my-account) on their own.
|
||||
Under **Notification settings** tab you can edit the [notification settings](../../../user-guide/notifications/notification-settings/) for the user. Each user can adjust these settings under [Account settings](../../../user-guide/account-settings) on their own.
|
||||
|
||||
### Email reminders
|
||||
|
||||
Under **Email reminders** tab you can edit the [email reminders settings](../../../user-guide/my-account/#email-reminders). Each user can adjust these settings under [My account](../../../user-guide/my-account) on their own.
|
||||
Under **Email reminders** tab you can edit the [email reminders settings](../../../user-guide/account-settings/#email-reminders). Each user can adjust these settings under [Account settings](../../../user-guide/account-settings) on their own.
|
||||
|
||||
### Rate history
|
||||
|
||||
@@ -225,7 +225,7 @@ Leave all fields blank. When the details are saved OpenProject will send an emai
|
||||
Two [settings](../settings/#user-deletion) allow users to be deleted from the system:
|
||||
|
||||
* **User accounts deletable by admins** - if ticked, a **Delete** button is shown on the user details page.
|
||||
* **Users allowed to delete their accounts** - if ticked, a **Delete account** menu entry is shown in the **My Account** page.
|
||||
* **Users allowed to delete their accounts** - if ticked, a **Delete account** menu entry is shown in the **Account settings** page.
|
||||
|
||||
To delete another user's account open the [user list](#user-list). Click on the **user name** of the user which you want to delete. Click the **Delete** button at the top right.
|
||||
|
||||
|
||||
@@ -6,53 +6,53 @@ description: Learn how to configure account settings.
|
||||
keywords: my account, account settings, change language
|
||||
---
|
||||
|
||||
# My account
|
||||
# Account settings
|
||||
|
||||
Change your personal settings in My account. Here you can adapt, e.g. the language, edit notifications, or add an avatar. Moreover you can manage access tokens and sessions.
|
||||
Change your personal settings un der Account settings (earlier called My account). Here you can adapt, e.g. the language, edit notifications, or add an avatar. Moreover you can manage access tokens and sessions.
|
||||
|
||||
| Topic | Content |
|
||||
|-----------------------------------------------------------------------------------------------| ------------------------------------------------------------ |
|
||||
| [Open My account settings](#open-my-account-settings) | How to open your personal settings in OpenProject |
|
||||
| [Edit your user information](#edit-your-user-information) | How to change the name or email address in OpenProject |
|
||||
| Topic | Content |
|
||||
| ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| [Open account settings](#open-account-settings) | How to open your personal settings in OpenProject |
|
||||
| [Edit your user information](#edit-your-user-information) | How to change the name or email address in OpenProject |
|
||||
| [Profile settings: change your language, time zone or display of comments](#profile-settings) | How to change the language, time zone or display of comments in OpenProject |
|
||||
| [Change password](#change-password) | How to change my password |
|
||||
| [Two-factor authentication](#two-factor-authentication) | How to set up a two-factor authentication |
|
||||
| [Access tokens](#access-tokens) | How to set up access tokens in OpenProject |
|
||||
| [Session management](#sessions-management) | How to manage your OpenProject sessions |
|
||||
| [Notifications settings](#notifications-settings) | How to change in-app notifications in OpenProject |
|
||||
| [Email reminders](#email-reminders) | How to change email reminders sent by OpenProject |
|
||||
| [Set an Avatar](#set-an-avatar) | How to set an avatar in OpenProject and change the profile picture |
|
||||
| [Delete account](#delete-account) | How to delete my own account |
|
||||
| [Change password](#change-password) | How to change my password |
|
||||
| [Two-factor authentication](#two-factor-authentication) | How to set up a two-factor authentication |
|
||||
| [Access tokens](#access-tokens) | How to set up access tokens in OpenProject |
|
||||
| [Session management](#sessions-management) | How to manage your OpenProject sessions |
|
||||
| [Notifications settings](#notifications-settings) | How to change in-app notifications in OpenProject |
|
||||
| [Email reminders](#email-reminders) | How to change email reminders sent by OpenProject |
|
||||
| [Set an Avatar](#set-an-avatar) | How to set an avatar in OpenProject and change the profile picture |
|
||||
| [Delete account](#delete-account) | How to delete my own account |
|
||||
|
||||
## Open My account settings
|
||||
## Open account settings
|
||||
|
||||
To open your personal settings in OpenProject, click on your user icon in the top right corner in the header of the application.
|
||||
|
||||
Choose **My account**.
|
||||
Choose **Account settings**.
|
||||
|
||||

|
||||

|
||||
|
||||
## Edit your user information
|
||||
|
||||
To change your email address or your name, navigate to **Profile** on the left side menu of **My account** page.
|
||||
To change your email address or your name, navigate to **Profile** on the left side menu of **Account settings** page.
|
||||
|
||||
Here you can update the information and **save** your changes. If you're changing the email address of your account, you will be requested to confirm your account password before you can continue. (Note: This applies only to internal accounts where OpenProject can verify the password).
|
||||
|
||||

|
||||

|
||||
|
||||
## Profile settings
|
||||
|
||||
Within the **Settings** on **My Account** page you can change the language of OpenProject, adapt the time zone, select which display mode you would like activate and change the order in which comments are displayed in the **Activity list** for work packages.
|
||||
Within the **Settings** on **Account settings** page you can change the language of OpenProject, adapt the time zone, select which display mode you would like to activate and change the order in which comments are displayed in the **Activity list** for work packages.
|
||||
|
||||
Also, you can activate a **warning if you are leaving a work package with unsaved changes**.
|
||||
|
||||
Additionally, you can activate to **auto-hide success notifications** from the system. This (only) means that the green pop-up success notifications will be removed automatically after five seconds.
|
||||
|
||||

|
||||

|
||||
|
||||
### Change your language
|
||||
|
||||
To change the language in OpenProject, navigate to the **My account** and choose the menu point **Settings**.
|
||||
To change the language in OpenProject, navigate to the **Account settings** and choose the menu point **Settings**.
|
||||
|
||||
Here you can choose between multiple languages.
|
||||
|
||||
@@ -74,7 +74,7 @@ In the dropdown menu **Mode** you can pick the color mode. The default setting i
|
||||
|
||||
This mode is recommended for users with visuals impairment.
|
||||
|
||||

|
||||

|
||||
|
||||
### Select the dark mode
|
||||
|
||||
@@ -83,7 +83,7 @@ In the dropdown menu **Mode** you can pick the color mode. The default setting i
|
||||
> [!NOTE]
|
||||
> The dark mode ignores parts of the configured design. Top header and side menu colors are entirely overridden for this mode. Only the accent color and the primary button color are kept, but are calculated to brighter variants.
|
||||
|
||||

|
||||

|
||||
|
||||
### Change the order to display comments
|
||||
|
||||
@@ -99,9 +99,9 @@ There are two personal settings available for the [Backlogs module](../../user-g
|
||||
|
||||
## Change password
|
||||
|
||||
In order to reset your password, navigate to **My account** and choose **Change password** in the menu.
|
||||
In order to reset your password, navigate to **Account settings** and choose **Change password** in the menu.
|
||||
|
||||

|
||||

|
||||
|
||||
Enter your current password.
|
||||
|
||||
@@ -114,13 +114,13 @@ Press the blue **Save** button in order to confirm the password changes.
|
||||
|
||||
## Two-factor authentication
|
||||
|
||||
In order to activate the two-factor authentication for your OpenProject installation, navigate to your **My account** and choose the **Two-factor authentication** in the menu. If you have not added any device yet, this list will be empty.
|
||||
In order to activate the two-factor authentication for your OpenProject installation, navigate to your **Account settings** and choose the **Two-factor authentication** in the menu. If you have not added any device yet, this list will be empty.
|
||||
|
||||

|
||||

|
||||
|
||||
If you have already registered one or multiple 2FA devices, you will see the list of all activated 2FA devices here. You can change, which of them you prefer to have set a a default option.
|
||||
|
||||

|
||||

|
||||
|
||||
In order to register a new device for two-factor authentication, click the green button to add a **new 2FA device** and select one of the options. The options you see will depend on what your system administrator has [activated for your instance](../../system-admin-guide/authentication/two-factor-authentication/):
|
||||
|
||||
@@ -128,7 +128,7 @@ In order to register a new device for two-factor authentication, click the green
|
||||
- App-based authenticator
|
||||
- WebAuthn
|
||||
|
||||

|
||||

|
||||
|
||||
To receive the second factor, you can use an authentication app on your mobile phone, such as Google Authenticator or Authy. You have to enter the code that is displayed in the authentication app to your login.
|
||||
|
||||
@@ -138,7 +138,7 @@ You can remove or approve 2FA applications by confirming your password. Note tha
|
||||
|
||||
You can use your mobile phone as a 2FA device. The field *Identifier* will be pre-filled out, you will need to add your phone number and click the green **Continue** button.
|
||||
|
||||

|
||||

|
||||
|
||||
### Use your app-based authenticator
|
||||
|
||||
@@ -148,13 +148,13 @@ Click the grey **Register device** button to register an authentication app. Ope
|
||||
|
||||
Click the green **Continue** button to finish the registration.
|
||||
|
||||

|
||||

|
||||
|
||||
### Use the WebAuth authentication
|
||||
|
||||
Use Web Authentication to register a FIDO2 device (like a YubiKey) or the secure enclave of your mobile device as a second factor. After you have chosen a name, you can click the green **Continue** button.
|
||||
|
||||

|
||||

|
||||
|
||||
Your browser will prompt you to present your WebAuthn device (depending on your operational system and your browser, your options may vary). When you have done so, you are done registering the device.
|
||||
|
||||
@@ -166,7 +166,7 @@ If you have created backup codes before, they will be invalidated and will no lo
|
||||
|
||||
## Access tokens
|
||||
|
||||
To view and manage your OpenProject access tokens navigate to **My account** and choose **Access tokens** from the menu.
|
||||
To view and manage your OpenProject access tokens navigate to **Account settings** and choose **Access tokens** from the menu.
|
||||
Access tokens allow you to grant external applications access to resources in OpenProject.
|
||||
|
||||
### API
|
||||
@@ -175,22 +175,22 @@ API tokens allow third-party applications to communicate with this OpenProject i
|
||||
|
||||
You can enable an API token under [*Administration -> API and webhooks*](../../system-admin-guide/api-and-webhooks/).
|
||||
|
||||

|
||||

|
||||
|
||||
### iCalendar
|
||||
|
||||
iCalendar tokens allow users to subscribe to OpenProject calendars and view up-to-date work package information from external clients.
|
||||
This list will be empty if you have no calendar subscriptions yet. Once you [subscribe to a calendar](../../user-guide/calendar/#subscribe-to-a-calendar), a list of all the calendars that you have subscribed to will appear here. The name of the calendar is clickable and will lead you directly to the respective calendar in OpenProject.
|
||||
|
||||

|
||||

|
||||
|
||||
You can delete an entry in the iCalendar list by clicking on the **Delete** icon. This will trigger a warning message asking you to confirm the decision to delete. By deleting this token you will no longer have access to OpenProject information in all the linked clients using this token.
|
||||
|
||||

|
||||

|
||||
|
||||
You will then see a message informing you that the the token und the iCal URL are now invalid.
|
||||
|
||||

|
||||

|
||||
|
||||
### OAUTH
|
||||
|
||||
@@ -198,7 +198,7 @@ OAuth tokens allow third-party applications to connect with this OpenProject ins
|
||||
|
||||
If no third-party application integration has been activated yet, this list will be empty. Please contact your administrator to help you set it up. Once an integration has been set up, you will see the details here and will be able to delete any OAuth tokens by clicking on the **Delete** icon.
|
||||
|
||||

|
||||

|
||||
|
||||
### RSS
|
||||
|
||||
@@ -209,13 +209,13 @@ Create a new token by clicking the **+RSS token** button. This will create your
|
||||
> [!IMPORTANT]
|
||||
> You will only be able to see the RSS access token once, directly after you create it. Make sure to copy it.
|
||||
|
||||

|
||||

|
||||
|
||||
## Sessions management
|
||||
|
||||
To view and manage your OpenProject sessions navigate to **My account** and choose **Sessions management** from the menu.
|
||||
To view and manage your OpenProject sessions navigate to **Account settings** and choose **Sessions management** from the menu.
|
||||
|
||||

|
||||

|
||||
|
||||
- **Current sessions**: here you can see all of your sessions. If for example you are logged into OpenProject from different browsers or devices, all will be shown in the list. Current session is the one you are currently using. You can terminate the sessions that are no longer in use. Inactive sessions will be removed from the list after 7 days (depending on the authentication settings they may become invalid earlier).
|
||||
- **Remembered devices**: here you can see a list of all devices that you are logged into using the "Stay logged in" option. You will have selected that option when [logging in](../../getting-started/sign-in-registration/). Whether or not that option is available and the duration of time for which you can stay logged in depends on the authentication settings of your instance.
|
||||
@@ -225,9 +225,9 @@ To view and manage your OpenProject sessions navigate to **My account** and choo
|
||||
|
||||
## Notifications settings
|
||||
|
||||
To configure the notification settings which you receive from the system, navigate to **My account** and choose **Notifications settings** in the menu.
|
||||
To configure the notification settings which you receive from the system, navigate to **Account settings** and choose **Notifications settings** in the menu.
|
||||
|
||||

|
||||

|
||||
|
||||
In-app notifications can be configured and customized various ways. For a detailed guide, [click here](../../user-guide/notifications/notification-settings/).
|
||||
|
||||
@@ -235,9 +235,9 @@ Please also see our detailed [in-app notifications](../../user-guide/notificatio
|
||||
|
||||
## Email reminders
|
||||
|
||||
To configure the email reminders which you receive from the system, navigate to **My account** and choose **Email reminders** in the menu. Your system administrator can also set them for you or change the global default settings.
|
||||
To configure the email reminders which you receive from the system, navigate to **Account settings** and choose **Email reminders** in the menu. Your system administrator can also set them for you or change the global default settings.
|
||||
|
||||

|
||||

|
||||
|
||||
You can choose between several email reminders.
|
||||
|
||||
@@ -261,9 +261,9 @@ You can also opt-in to receive **email alerts for other items (that are not work
|
||||
|
||||
## Set an avatar
|
||||
|
||||
To change your profile picture in OpenProject you can set an avatar in your **My account** settings. Navigate to **Avatar** in the menu.
|
||||
To change your profile picture in OpenProject you can set an avatar in your **Account settings** settings. Navigate to **Avatar** in the menu.
|
||||
|
||||

|
||||

|
||||
|
||||
OpenProject uses Gravatar as default profile image. It displays a preview of your avatar.
|
||||
|
||||
@@ -274,13 +274,13 @@ Also, you can upload a **Custom Avatar** by choosing a Avatar to be uploaded fro
|
||||
|
||||
## Delete account
|
||||
|
||||
You can delete your own account in **My account**.
|
||||
You can delete your own account in **Account settings**.
|
||||
|
||||
To delete your account, select **Delete account** from the side menu and enter your login to confirm the deletion.
|
||||
|
||||

|
||||

|
||||
|
||||
> [!WARNING]
|
||||
> Deleting a user account is permanent and cannot be reversed.
|
||||
|
||||
If you cannot see the entry **Delete account** in the **My account** side menu, make sure the option "Users allowed to delete their account" is [activated in the administration](../../system-admin-guide/users-permissions/settings/#user-deletion).
|
||||
If you cannot see the entry **Delete account** in the **Account settings** side menu, make sure the option "Users allowed to delete their account" is [activated in the administration](../../system-admin-guide/users-permissions/settings/#user-deletion).
|
||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 117 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 88 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 130 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 175 KiB |
@@ -30,4 +30,4 @@ Please try these approaches:
|
||||
|
||||
## How can I change the user's colors in the task board?
|
||||
|
||||
The colors can be changed in each user's personal settings: Please click on your avatar, then navigate to *My account ->Settings ->Backlogs*. There you can change the task color.
|
||||
The colors can be changed in each user's personal settings: Please click on your avatar, then navigate to *Account settings ->Settings ->Backlogs*. There you can change the task color.
|
||||
|
||||
@@ -35,10 +35,10 @@ On the very top of the table, sprint impediments are documented and assigned to
|
||||
|
||||
The task colors are different for every team member, making it easy to associate tasks with their respective assignees.
|
||||
|
||||
## Configure Backlogs settings under My Account
|
||||
## Configure Backlogs settings under Account settings
|
||||
|
||||
If needed, the coloring can be adjusted in the personal user account settings (-> *My Account*). Use hex codes to specify the desired color.
|
||||
If needed, the coloring can be adjusted in the personal user account settings. Use hex codes to specify the desired color.
|
||||
|
||||

|
||||

|
||||
|
||||
Here, you can also specify whether the versions in the Backlogs view should be displayed folded. You can choose whether backlogs are to be displayed folded or collapsed by default. In *My account*, select *Settings* from the side menu and check or uncheck the respective box next to the field *Show versions folded*.
|
||||
Here, you can also specify whether the versions in the Backlogs view should be displayed folded. You can choose whether backlogs are to be displayed folded or collapsed by default. Under *Account settings*, select *Settings* from the side menu and check or uncheck the respective box next to the field *Show versions folded*.
|
||||
|
||||
|
Before Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 88 KiB |
@@ -110,7 +110,7 @@ To subscribe to a calendar:
|
||||
|
||||
1. Click on the **\[⋮\] (more) button** on the toolbar and select **Subscribe to calendar**.
|
||||
2. In the modal that appears, give this calendar a unique name (you can only use it once). We recommend naming it based on where you will be subscribing to this calendar from ("personal phone" or "work tablet" for example).
|
||||
3. Click on **Copy URL**. This creates the a [calendar token](../../user-guide/my-account/#access-tokens) and copies the calendar URL to your clipboard.
|
||||
3. Click on **Copy URL**. This creates the a [calendar token](../../user-guide/account-settings/#access-tokens) and copies the calendar URL to your clipboard.
|
||||
4. Paste this URL in your desired calendar client to subscribe.
|
||||
|
||||

|
||||
|
||||
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 54 KiB |
@@ -78,8 +78,7 @@ The **new forum message has been created**.
|
||||
|
||||

|
||||
|
||||
> [!TIP]
|
||||
>
|
||||
> [!TIP]
|
||||
> Changes you made are saved locally. If you navigated away from page or could not save your changes due to a technical difficulty, you can access latest changes via the editor toolbar.
|
||||
|
||||

|
||||
@@ -108,7 +107,7 @@ You will get a list of all messages within this forum.
|
||||
|
||||
Click the **Watch** icon in the top right corner of the forum.
|
||||
|
||||
You will then be notified via e-mail according to your [e-mail notifications](../../user-guide/my-account/#notifications-settings) about new messages and replies in a forum.
|
||||
You will then be notified via e-mail according to your [e-mail notifications](../../user-guide/account-settings/#notifications-settings) about new messages and replies in a forum.
|
||||
|
||||

|
||||
|
||||
@@ -146,4 +145,4 @@ The message details will then be opened. You can make your changes and click th
|
||||
|
||||
To **delete a message in a forum**, select the message which you want to delete and press the **Delete** button in the top right corner of the message details.
|
||||
|
||||

|
||||

|
||||
|
||||
|
Before Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 73 KiB |