pull/10703/head
commit
5a7aa2afba
@ -0,0 +1,71 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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. |
||||
#++ |
||||
|
||||
class Day < ApplicationRecord |
||||
include Tableless |
||||
|
||||
belongs_to :week_day, |
||||
inverse_of: false, |
||||
class_name: 'WeekDay', |
||||
foreign_key: :day_of_week, |
||||
primary_key: :day |
||||
|
||||
attribute :date, :date, default: nil |
||||
attribute :day_of_week, :integer, default: nil |
||||
attribute :working, :boolean, default: 't' |
||||
|
||||
delegate :name, to: :week_day |
||||
|
||||
def self.default |
||||
today = Time.zone.today |
||||
from = today.at_beginning_of_month |
||||
to = today.next_month.at_end_of_month |
||||
|
||||
select('days.*') |
||||
.includes(:week_day) |
||||
.from(Arel.sql(from_sql(from:, to:))) |
||||
end |
||||
|
||||
def self.from_sql(from:, to:) |
||||
<<~SQL.squish |
||||
( |
||||
SELECT |
||||
date_trunc('day', dd)::date date, |
||||
extract(isodow from dd) day_of_week, |
||||
week_days.working |
||||
FROM generate_series |
||||
( '#{from}'::timestamp, |
||||
'#{to}'::timestamp, |
||||
'1 day'::interval) dd |
||||
LEFT JOIN week_days |
||||
ON extract(isodow from dd) = week_days.day |
||||
ORDER BY date |
||||
) days |
||||
SQL |
||||
end |
||||
end |
@ -0,0 +1,4 @@ |
||||
class NonWorkingDay < ApplicationRecord |
||||
validates :name, :date, presence: true |
||||
validates :date, uniqueness: true |
||||
end |
@ -0,0 +1,34 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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 Queries::Days |
||||
::Queries::Register.register(DayQuery) do |
||||
filter Filters::DatesIntervalFilter |
||||
filter Filters::WorkingFilter |
||||
end |
||||
end |
@ -0,0 +1,62 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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. |
||||
#++ |
||||
|
||||
class Queries::Days::Filters::DatesIntervalFilter < Queries::Days::Filters::DayFilter |
||||
include Queries::Operators::DateRangeClauses |
||||
|
||||
def type |
||||
:date |
||||
end |
||||
|
||||
def self.key |
||||
:date |
||||
end |
||||
|
||||
def from |
||||
from, to = values.map { |v| v.blank? ? nil : Date.parse(v) } |
||||
|
||||
# Both from and to cannot be blank at this point |
||||
if from.nil? |
||||
from = to.at_beginning_of_month |
||||
end |
||||
|
||||
if to.nil? |
||||
to = from.next_month.at_end_of_month |
||||
end |
||||
|
||||
model.from_sql(from:, to:) |
||||
end |
||||
|
||||
def type_strategy |
||||
@type_strategy ||= Queries::Filters::Strategies::DateInterval.new(self) |
||||
end |
||||
|
||||
def connection |
||||
ActiveRecord::Base::connection |
||||
end |
||||
end |
@ -0,0 +1,35 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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. |
||||
#++ |
||||
|
||||
class Queries::Days::Filters::DayFilter < Queries::Filters::Base |
||||
self.model = Day |
||||
|
||||
def human_name |
||||
model.human_attribute_name(name) |
||||
end |
||||
end |
@ -0,0 +1,35 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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. |
||||
#++ |
||||
|
||||
class Queries::Days::Filters::WorkingFilter < Queries::Days::Filters::DayFilter |
||||
include Queries::Filters::Shared::BooleanFilter |
||||
|
||||
def self.key |
||||
:working |
||||
end |
||||
end |
@ -0,0 +1,30 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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. |
||||
#++ |
||||
|
||||
class Queries::WeekDays::WeekDayQuery < Queries::BaseQuery |
||||
end |
@ -0,0 +1,80 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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. |
||||
#++ |
||||
|
||||
class Setting |
||||
module MailSettings |
||||
## |
||||
# Reload the currently configured mailer configuration |
||||
def reload_mailer_settings! |
||||
ActionMailer::Base.perform_deliveries = true |
||||
ActionMailer::Base.delivery_method = Setting.email_delivery_method if Setting.email_delivery_method |
||||
|
||||
if Setting.email_delivery_method == :smtp |
||||
reload_smtp_settings! |
||||
end |
||||
rescue StandardError => e |
||||
Rails.logger.error "Unable to set ActionMailer settings (#{e.message}). " \ |
||||
"Email sending will most likely NOT work." |
||||
end |
||||
|
||||
private |
||||
|
||||
# rubocop:disable Metrics/AbcSize |
||||
def reload_smtp_settings! |
||||
# Correct smtp settings when using authentication :none |
||||
authentication = Setting.smtp_authentication.try(:to_sym) |
||||
keys = %i[address port domain authentication user_name password] |
||||
if authentication == :none |
||||
# Rails Mailer will croak if passing :none as the authentication. |
||||
# Instead, it requires to be removed from its settings |
||||
ActionMailer::Base.smtp_settings.delete :user_name |
||||
ActionMailer::Base.smtp_settings.delete :password |
||||
ActionMailer::Base.smtp_settings.delete :authentication |
||||
|
||||
keys = %i[address port domain] |
||||
end |
||||
|
||||
keys.each do |setting| |
||||
value = Setting["smtp_#{setting}"] |
||||
if value.present? |
||||
ActionMailer::Base.smtp_settings[setting] = value |
||||
else |
||||
ActionMailer::Base.smtp_settings.delete setting |
||||
end |
||||
end |
||||
|
||||
ActionMailer::Base.smtp_settings[:enable_starttls_auto] = Setting.smtp_enable_starttls_auto? |
||||
ActionMailer::Base.smtp_settings[:ssl] = Setting.smtp_ssl? |
||||
|
||||
Setting.smtp_openssl_verify_mode.tap do |mode| |
||||
ActionMailer::Base.smtp_settings[:openssl_verify_mode] = mode unless mode.nil? |
||||
end |
||||
end |
||||
# rubocop:enable Metrics/AbcSize |
||||
end |
||||
end |
@ -0,0 +1,6 @@ |
||||
class WeekDay < ApplicationRecord |
||||
def name |
||||
day_names = I18n.t('date.day_names') |
||||
day_names[day % 7] |
||||
end |
||||
end |
@ -0,0 +1,58 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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 BasicData |
||||
class WeekDaySeeder < Seeder |
||||
def seed_data! |
||||
WeekDay.transaction do |
||||
days.each do |attributes| |
||||
WeekDay.create!(attributes) |
||||
end |
||||
end |
||||
end |
||||
|
||||
def applicable? |
||||
WeekDay.none? |
||||
end |
||||
|
||||
def not_applicable_message |
||||
'Skipping week days as there are already some configured' |
||||
end |
||||
|
||||
def days |
||||
[ |
||||
{ day: 1, working: true }, |
||||
{ day: 2, working: true }, |
||||
{ day: 3, working: true }, |
||||
{ day: 4, working: true }, |
||||
{ day: 5, working: true }, |
||||
{ day: 6, working: false }, |
||||
{ day: 7, working: false } |
||||
] |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,41 @@ |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2010-2022 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 OpenProject |
||||
module ProjectActivity |
||||
class << self |
||||
def register(on:, attribute:, chain: []) |
||||
@registered ||= Set.new |
||||
|
||||
@registered << { on: on, |
||||
chain: chain, |
||||
attribute: attribute } |
||||
end |
||||
|
||||
attr_reader :registered |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,32 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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. |
||||
#++ |
||||
|
||||
# Be sure to restart your server when you modify this file. |
||||
OpenProject::Application.configure do |
||||
OpenProject::Configuration.configure_cache(config) |
||||
end |
@ -1,10 +0,0 @@ |
||||
OpenProject::Application.configure do |
||||
config.after_initialize do |
||||
# settings table may not exist when you run db:migrate at installation |
||||
# time, so just ignore this block when that happens. |
||||
if Setting.settings_table_exists_yet? |
||||
OpenProject::Configuration.migrate_mailer_configuration! |
||||
OpenProject::Configuration.reload_mailer_configuration! |
||||
end |
||||
end |
||||
end |
@ -1,10 +1,12 @@ |
||||
## |
||||
# The default behaviour is to send the user a sign-up mail |
||||
# when they were invited. |
||||
OpenProject::Notifications.subscribe UserInvitation::Events.user_invited do |token| |
||||
Rails.application.config.after_initialize do |
||||
## |
||||
# The default behaviour is to send the user a sign-up mail |
||||
# when they were invited. |
||||
OpenProject::Notifications.subscribe UserInvitation::Events.user_invited do |token| |
||||
Mails::InvitationJob.perform_later(token) |
||||
end |
||||
end |
||||
|
||||
OpenProject::Notifications.subscribe UserInvitation::Events.user_reinvited do |token| |
||||
OpenProject::Notifications.subscribe UserInvitation::Events.user_reinvited do |token| |
||||
Mails::InvitationJob.perform_later(token) |
||||
end |
||||
end |
||||
|
@ -1,32 +1,20 @@ |
||||
require 'open_project/authentication' |
||||
Rails.application.config.after_initialize do |
||||
namespace = OpenProject::Authentication::Strategies::Warden |
||||
|
||||
# Strategies provided by OpenProject: |
||||
require 'open_project/authentication/strategies/warden/basic_auth_failure' |
||||
require 'open_project/authentication/strategies/warden/global_basic_auth' |
||||
require 'open_project/authentication/strategies/warden/user_basic_auth' |
||||
require 'open_project/authentication/strategies/warden/doorkeeper_oauth' |
||||
require 'open_project/authentication/strategies/warden/session' |
||||
strategies = [ |
||||
[:basic_auth_failure, namespace::BasicAuthFailure, 'Basic'], |
||||
[:global_basic_auth, namespace::GlobalBasicAuth, 'Basic'], |
||||
[:user_basic_auth, namespace::UserBasicAuth, 'Basic'], |
||||
[:oauth, namespace::DoorkeeperOAuth, 'OAuth'], |
||||
[:anonymous_fallback, namespace::AnonymousFallback, 'Basic'], |
||||
[:session, namespace::Session, 'Session'] |
||||
] |
||||
|
||||
WS = OpenProject::Authentication::Strategies::Warden |
||||
|
||||
strategies = [ |
||||
[:basic_auth_failure, WS::BasicAuthFailure, 'Basic'], |
||||
[:global_basic_auth, WS::GlobalBasicAuth, 'Basic'], |
||||
[:user_basic_auth, WS::UserBasicAuth, 'Basic'], |
||||
[:oauth, WS::DoorkeeperOAuth, 'OAuth'], |
||||
[:anonymous_fallback, WS::AnonymousFallback, 'Basic'], |
||||
[:session, WS::Session, 'Session'] |
||||
] |
||||
|
||||
strategies.each do |name, clazz, auth_scheme| |
||||
strategies.each do |name, clazz, auth_scheme| |
||||
OpenProject::Authentication.add_strategy name, clazz, auth_scheme |
||||
end |
||||
|
||||
include OpenProject::Authentication::Scope |
||||
end |
||||
|
||||
api_v3_options = { |
||||
store: false |
||||
} |
||||
OpenProject::Authentication.update_strategies(API_V3, api_v3_options) do |_strategies| |
||||
OpenProject::Authentication.update_strategies(OpenProject::Authentication::Scope::API_V3, { store: false }) do |_| |
||||
%i[global_basic_auth user_basic_auth basic_auth_failure oauth session anonymous_fallback] |
||||
end |
||||
end |
||||
|
@ -0,0 +1,21 @@ |
||||
class CreateWeekDays < ActiveRecord::Migration[6.1] |
||||
def up |
||||
create_table :week_days do |t| |
||||
t.integer :day, null: false |
||||
t.boolean :working, null: false, default: true |
||||
|
||||
t.timestamps |
||||
end |
||||
|
||||
execute <<-SQL.squish |
||||
ALTER TABLE week_days |
||||
ADD CONSTRAINT unique_day_number UNIQUE (day); |
||||
ALTER TABLE week_days |
||||
ADD CHECK (day >= 1 AND day <=7); |
||||
SQL |
||||
end |
||||
|
||||
def down |
||||
drop_table :week_days |
||||
end |
||||
end |
@ -0,0 +1,11 @@ |
||||
class CreateNonWorkingDays < ActiveRecord::Migration[6.1] |
||||
def change |
||||
create_table :non_working_days do |t| |
||||
t.string :name, null: false |
||||
t.date :date, null: false |
||||
|
||||
t.timestamps |
||||
end |
||||
add_index :non_working_days, :date, unique: true |
||||
end |
||||
end |
@ -0,0 +1,32 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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 API::V3::Days |
||||
class DayCollectionRepresenter < ::API::Decorators::UnpaginatedCollection |
||||
end |
||||
end |
@ -0,0 +1,43 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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 API::V3::Days |
||||
class DaysAPI < ::API::OpenProjectAPI |
||||
helpers ::API::Utilities::UrlPropsParsingHelper |
||||
|
||||
resources :days do |
||||
mount NonWorkingDaysAPI |
||||
mount WeekAPI |
||||
|
||||
get &::API::V3::Utilities::Endpoints::Index.new( |
||||
model: Day, |
||||
self_path: -> { api_v3_paths.days } |
||||
).mount |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,43 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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 API::V3::Days |
||||
class NonWorkingDayRepresenter < ::API::Decorators::Single |
||||
include ::API::Decorators::DateProperty |
||||
include ::API::Caching::CachedRepresenter |
||||
|
||||
property :name |
||||
date_property :date |
||||
|
||||
self_link path: :days_non_working_day, id_attribute: :date |
||||
|
||||
def _type |
||||
'NonWorkingDay' |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,45 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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 API::V3::Days |
||||
class NonWorkingDaysAPI < ::API::OpenProjectAPI |
||||
helpers ::API::Utilities::UrlPropsParsingHelper |
||||
|
||||
resources :non_working do |
||||
route_param :date, type: Date, desc: 'NonWorkingDay DATE' do |
||||
after_validation do |
||||
@non_working_day = NonWorkingDay.find_by!(date: declared_params[:date]) |
||||
end |
||||
|
||||
get &::API::V3::Utilities::Endpoints::Show.new(model: NonWorkingDay, |
||||
render_representer: NonWorkingDayRepresenter) |
||||
.mount |
||||
end |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,47 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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 API::V3::Days |
||||
class WeekAPI < ::API::OpenProjectAPI |
||||
helpers ::API::Utilities::UrlPropsParsingHelper |
||||
|
||||
resources :week do |
||||
get &::API::V3::Utilities::Endpoints::Index.new(model: WeekDay, |
||||
render_representer: WeekDayCollectionRepresenter, |
||||
self_path: -> { api_v3_paths.days_week }) |
||||
.mount |
||||
route_param :day, type: Integer, desc: 'WeekDay ID' do |
||||
after_validation do |
||||
@week_day = WeekDay.find_by!(day: declared_params[:day]) |
||||
end |
||||
|
||||
get &::API::V3::Utilities::Endpoints::Show.new(model: WeekDay, render_representer: WeekDayRepresenter).mount |
||||
end |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,32 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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 API::V3::Days |
||||
class WeekDayCollectionRepresenter < ::API::Decorators::UnpaginatedCollection |
||||
end |
||||
end |
@ -0,0 +1,43 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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 API::V3::Days |
||||
class WeekDayRepresenter < ::API::Decorators::Single |
||||
include ::API::Caching::CachedRepresenter |
||||
|
||||
property :day |
||||
property :name |
||||
property :working |
||||
|
||||
self_link path: :days_week_day, id_attribute: :day |
||||
|
||||
def _type |
||||
'WeekDay' |
||||
end |
||||
end |
||||
end |
@ -1,237 +0,0 @@ |
||||
#-- copyright |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2012-2022 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. |
||||
#++ |
||||
|
||||
require_relative 'configuration/helpers' |
||||
require_relative 'configuration/asset_host' |
||||
|
||||
module OpenProject |
||||
module Configuration |
||||
extend Helpers |
||||
|
||||
class << self |
||||
# Returns a configuration setting |
||||
def [](name) |
||||
Settings::Definition[name]&.value |
||||
end |
||||
|
||||
# Sets configuration setting |
||||
def []=(name, value) |
||||
Settings::Definition[name].value = value |
||||
end |
||||
|
||||
def configure_cache(application_config) |
||||
return unless override_cache_config? application_config |
||||
|
||||
# rails defaults to :file_store, use :mem_cache_store when :memcache is configured in configuration.yml |
||||
# Also use :mem_cache_store for when :dalli_store is configured |
||||
cache_store = self['rails_cache_store'].try(:to_sym) |
||||
|
||||
case cache_store |
||||
when :memcache, :dalli_store |
||||
cache_config = [:mem_cache_store] |
||||
cache_config << self['cache_memcache_server'] if self['cache_memcache_server'] |
||||
# default to :file_store |
||||
when NilClass, :file_store |
||||
cache_config = [:file_store, Rails.root.join('tmp/cache')] |
||||
else |
||||
cache_config = [cache_store] |
||||
end |
||||
|
||||
parameters = cache_parameters |
||||
cache_config << parameters if parameters.size > 0 |
||||
|
||||
application_config.cache_store = cache_config |
||||
end |
||||
|
||||
def override_cache_config?(application_config) |
||||
# override if cache store is not set |
||||
# or cache store is :file_store |
||||
# or there is something to overwrite it |
||||
application_config.cache_store.nil? || |
||||
application_config.cache_store == :file_store || |
||||
self['rails_cache_store'].present? |
||||
end |
||||
|
||||
def migrate_mailer_configuration! |
||||
# do not migrate if forced to legacy configuration (using settings or ENV) |
||||
return true if self['email_delivery_configuration'] == 'legacy' |
||||
# do not migrate if no legacy configuration |
||||
return true if self['email_delivery_method'].blank? |
||||
# do not migrate if the setting already exists and is not blank |
||||
return true if Setting.email_delivery_method.present? |
||||
|
||||
Rails.logger.info 'Migrating existing email configuration to the settings table...' |
||||
Setting.email_delivery_method = self['email_delivery_method'].to_sym |
||||
|
||||
['smtp_', 'sendmail_'].each do |config_type| |
||||
mail_delivery_configs = Settings::Definition.all_of_prefix(config_type) |
||||
|
||||
next if mail_delivery_configs.empty? |
||||
|
||||
mail_delivery_configs.each do |config| |
||||
Setting["#{config_type}#{config.name}"] = case config.value |
||||
when TrueClass |
||||
1 |
||||
when FalseClass |
||||
0 |
||||
else |
||||
v |
||||
end |
||||
end |
||||
end |
||||
|
||||
true |
||||
end |
||||
|
||||
def reload_mailer_configuration! |
||||
if self['email_delivery_configuration'] == 'legacy' |
||||
configure_legacy_action_mailer |
||||
else |
||||
case Setting.email_delivery_method |
||||
when :smtp |
||||
ActionMailer::Base.perform_deliveries = true |
||||
ActionMailer::Base.delivery_method = Setting.email_delivery_method |
||||
|
||||
reload_smtp_settings! |
||||
when :sendmail |
||||
ActionMailer::Base.perform_deliveries = true |
||||
ActionMailer::Base.delivery_method = Setting.email_delivery_method |
||||
end |
||||
end |
||||
rescue StandardError => e |
||||
Rails.logger.warn "Unable to set ActionMailer settings (#{e.message}). " \ |
||||
'Email sending will most likely NOT work.' |
||||
end |
||||
|
||||
# This is used to configure email sending from users who prefer to |
||||
# continue using environment variables of configuration.yml settings. Our |
||||
# hosted SaaS version requires this. |
||||
def configure_legacy_action_mailer |
||||
return true if self['email_delivery_method'].blank? |
||||
|
||||
ActionMailer::Base.perform_deliveries = true |
||||
ActionMailer::Base.delivery_method = self['email_delivery_method'].to_sym |
||||
|
||||
%w[smtp_ sendmail_].each do |config_type| |
||||
config = settings_of_prefix(config_type) |
||||
|
||||
next if config.empty? |
||||
|
||||
ActionMailer::Base.send("#{config_type}settings=", config) |
||||
end |
||||
end |
||||
|
||||
private |
||||
|
||||
def reload_smtp_settings! |
||||
# Correct smtp settings when using authentication :none |
||||
authentication = Setting.smtp_authentication.try(:to_sym) |
||||
keys = %i[address port domain authentication user_name password] |
||||
if authentication == :none |
||||
# Rails Mailer will croak if passing :none as the authentication. |
||||
# Instead, it requires to be removed from its settings |
||||
ActionMailer::Base.smtp_settings.delete :user_name |
||||
ActionMailer::Base.smtp_settings.delete :password |
||||
ActionMailer::Base.smtp_settings.delete :authentication |
||||
|
||||
keys = %i[address port domain] |
||||
end |
||||
|
||||
keys.each do |setting| |
||||
value = Setting["smtp_#{setting}"] |
||||
if value.present? |
||||
ActionMailer::Base.smtp_settings[setting] = value |
||||
else |
||||
ActionMailer::Base.smtp_settings.delete setting |
||||
end |
||||
end |
||||
|
||||
ActionMailer::Base.smtp_settings[:enable_starttls_auto] = Setting.smtp_enable_starttls_auto? |
||||
ActionMailer::Base.smtp_settings[:ssl] = Setting.smtp_ssl? |
||||
|
||||
Setting.smtp_openssl_verify_mode.tap do |mode| |
||||
ActionMailer::Base.smtp_settings[:openssl_verify_mode] = mode unless mode.nil? |
||||
end |
||||
end |
||||
|
||||
def cache_parameters |
||||
mapping = { |
||||
'cache_expires_in_seconds' => %i[expires_in to_i], |
||||
'cache_namespace' => %i[namespace to_s] |
||||
} |
||||
parameters = {} |
||||
mapping.each_pair do |from, to| |
||||
if self[from] |
||||
to_key, method = to |
||||
parameters[to_key] = self[from].method(method).call |
||||
end |
||||
end |
||||
parameters |
||||
end |
||||
|
||||
def method_missing(name, *args, &block) |
||||
setting_name = name.to_s.sub(/\?$/, '') |
||||
|
||||
definition = Settings::Definition[setting_name] |
||||
|
||||
if definition |
||||
define_config_methods(definition) |
||||
|
||||
send(name, *args, &block) |
||||
else |
||||
super |
||||
end |
||||
end |
||||
|
||||
def respond_to_missing?(name, include_private = false) |
||||
Settings::Definition.exists?(name.to_s.sub(/\?$/, '')) || super |
||||
end |
||||
|
||||
def define_config_methods(definition) |
||||
define_singleton_method definition.name do |
||||
self[definition.name] |
||||
end |
||||
|
||||
define_singleton_method "#{definition.name}?" do |
||||
if definition.format != :boolean |
||||
ActiveSupport::Deprecation.warn "Calling #{self}.#{definition.name}? is deprecated since it is not a boolean", caller |
||||
end |
||||
['true', true, '1'].include? self[definition.name] |
||||
end |
||||
end |
||||
|
||||
# Filters a hash with String keys by a key prefix and removes the prefix from the keys |
||||
def settings_of_prefix(prefix) |
||||
Settings::Definition |
||||
.all_of_prefix(prefix) |
||||
.to_h { |setting| [setting.name.delete_prefix(prefix), setting.value] } |
||||
.symbolize_keys! |
||||
end |
||||
end |
||||
end |
||||
end |
@ -1,3 +1,29 @@ |
||||
# OpenProject is an open source project management software. |
||||
# Copyright (C) 2022 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. |
||||
|
||||
require 'open_project/authentication/manager' |
||||
|
||||
module OpenProject |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue