2011-02-01 09:57:29 +08:00
#
2017-04-28 04:03:36 +08:00
# Copyright (C) 2011 - present Instructure, Inc.
2011-02-01 09:57:29 +08:00
#
# This file is part of Canvas.
#
# Canvas is free software: you can redistribute it and/or modify it under
# the terms of the GNU Affero General Public License as published by the Free
# Software Foundation, version 3 of the License.
#
# Canvas 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 Affero General Public License for more
# details.
#
# You should have received a copy of the GNU Affero General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
class HostUrl
class << self
2011-07-22 01:34:24 +08:00
attr_accessor :outgoing_email_address , :outgoing_email_domain , :outgoing_email_default_name
2011-02-23 07:16:02 +08:00
2011-06-24 00:27:05 +08:00
@@default_host = nil
@@file_host = nil
@@domain_config = nil
2012-06-26 23:52:40 +08:00
@@protocol = nil
2011-06-24 00:27:05 +08:00
2011-11-15 06:03:57 +08:00
def reset_cache!
2012-06-26 23:52:40 +08:00
@@default_host = @@file_host = @@domain_config = @@protocol = nil
2011-11-15 06:03:57 +08:00
end
2011-10-10 23:57:31 +08:00
def domain_config
2011-10-14 01:05:16 +08:00
if ! @@domain_config
2014-05-17 00:49:42 +08:00
@@domain_config = ConfigFile . load ( " domain " )
2011-10-10 23:57:31 +08:00
@@domain_config || = { }
end
@@domain_config
end
2012-06-26 23:52:40 +08:00
# returns "http" or "https" depending on whether this instance of canvas runs over ssl
def protocol
if ! @@protocol
if domain_config . key? ( 'ssl' )
is_secure = domain_config [ 'ssl' ]
elsif Attachment . file_store_config . key? ( 'secure' )
is_secure = Attachment . file_store_config [ 'secure' ]
else
is_secure = Rails . env . production?
end
@@protocol = is_secure ? " https " : " http "
end
@@protocol
end
2012-04-04 04:17:56 +08:00
def context_host ( context = nil , current_host = nil )
2011-02-01 09:57:29 +08:00
default_host
end
2012-04-06 06:32:31 +08:00
def context_hosts ( context = nil , current_host = nil )
Array ( context_host ( context , current_host ) )
end
2011-02-01 09:57:29 +08:00
def default_host
if ! @@default_host
2011-10-10 23:57:31 +08:00
@@default_host = domain_config [ :domain ] if domain_config . has_key? ( :domain )
2011-02-01 09:57:29 +08:00
end
res = @@default_host
res || = ENV [ 'RAILS_HOST_WITH_PORT' ]
res
end
2012-11-13 04:00:32 +08:00
def file_host_with_shard ( account , current_host = nil )
return [ @@file_host , Shard . default ] if @@file_host
2011-02-01 09:57:29 +08:00
res = nil
2011-10-10 23:57:31 +08:00
res = @@file_host = domain_config [ :files_domain ] if domain_config . has_key? ( :files_domain )
2011-05-20 05:39:43 +08:00
Rails . logger . warn ( " No separate files host specified for account id #{ account . id } . This is a potential security risk. " ) unless res || ! Rails . env . production?
2011-02-25 05:00:45 +08:00
res || = @@file_host = default_host
2012-11-13 04:00:32 +08:00
[ res , Shard . default ]
2011-02-01 09:57:29 +08:00
end
2012-10-09 07:51:32 +08:00
2012-11-13 04:00:32 +08:00
def file_host ( account , current_host = nil )
file_host_with_shard ( account , current_host ) . first
2012-11-09 04:10:01 +08:00
end
2012-10-09 07:51:32 +08:00
def cdn_host
# by default only set it for development. useful so that gravatar can
# proxy our fallback urls
host = ENV [ 'CANVAS_CDN_HOST' ]
host || = " canvas.instructure.com " if Rails . env . development?
host
end
2011-02-01 09:57:29 +08:00
def outgoing_email_address ( preferred_user = " notifications " )
2011-02-23 07:16:02 +08:00
@outgoing_email_address . presence || " #{ preferred_user } @ #{ outgoing_email_domain } "
2011-02-01 09:57:29 +08:00
end
2011-07-22 01:34:24 +08:00
def outgoing_email_default_name
@outgoing_email_default_name . presence || I18n . t ( " # email.default_from_name " , " Instructure Canvas " )
end
2011-02-25 05:00:45 +08:00
def file_host = ( val )
@@file_host = val
end
2015-04-28 01:47:25 +08:00
2011-02-25 05:00:45 +08:00
def default_host = ( val )
@@default_host = val
end
2011-05-28 06:34:51 +08:00
def is_file_host? ( domain )
safer_host = file_host ( Account . default )
safer_host != default_host && domain == safer_host
end
2012-04-07 05:54:51 +08:00
def has_file_host?
default_host != file_host ( Account . default )
end
2011-02-01 09:57:29 +08:00
end
end