2021-06-08 01:23:25 +05:30
# frozen_string_literal: true
module Integrations
2022-06-21 17:19:12 +05:30
class Confluence < BaseThirdPartyWiki
2021-06-08 01:23:25 +05:30
VALID_SCHEME_MATCH = %r{ \ Ahttps? \ Z } . freeze
VALID_HOST_MATCH = %r{ \ A.+ \ .atlassian \ .net \ Z } . freeze
VALID_PATH_MATCH = %r{ \ A/wiki(/| \ Z) } . freeze
prop_accessor :confluence_url
validates :confluence_url , presence : true , if : :activated?
validate :validate_confluence_url_is_cloud , if : :activated?
def self . to_param
'confluence'
end
def title
s_ ( 'ConfluenceService|Confluence Workspace' )
end
def description
s_ ( 'ConfluenceService|Link to a Confluence Workspace from the sidebar.' )
end
def help
return unless project & . wiki_enabled?
if activated?
wiki_url = project . wiki . web_url
s_ (
'ConfluenceService|Your GitLab wiki is still available at %{wiki_link}. To re-enable the link to the GitLab wiki, disable this integration.' %
2022-05-07 20:08:51 +05:30
{ wiki_link : ActionController :: Base . helpers . link_to ( wiki_url , wiki_url ) }
2021-06-08 01:23:25 +05:30
) . html_safe
else
s_ ( 'ConfluenceService|Link to a Confluence Workspace from the sidebar. Enabling this integration replaces the "Wiki" sidebar link with a link to the Confluence Workspace. The GitLab wiki is still available at the original URL.' ) . html_safe
end
end
def fields
[
{
type : 'text' ,
name : 'confluence_url' ,
title : s_ ( 'Confluence Cloud Workspace URL' ) ,
placeholder : 'https://example.atlassian.net/wiki' ,
required : true
}
]
end
2021-09-30 23:02:18 +05:30
def testable?
2021-06-08 01:23:25 +05:30
false
end
private
def validate_confluence_url_is_cloud
unless confluence_uri_valid?
errors . add ( :confluence_url , 'URL must be to a Confluence Cloud Workspace hosted on atlassian.net' )
end
end
def confluence_uri_valid?
return false unless confluence_url
uri = URI . parse ( confluence_url )
( uri . scheme & . match ( VALID_SCHEME_MATCH ) &&
uri . host & . match ( VALID_HOST_MATCH ) &&
uri . path & . match ( VALID_PATH_MATCH ) ) . present?
rescue URI :: InvalidURIError
false
end
end
end