mirror of
https://github.com/discourse/discourse.git
synced 2025-05-24 23:31:21 +08:00
FEATURE: Allow for multiple GitHub onebox tokens (#27887)
Followup 560e8aff75e4bde67bb162e8fdea52e704a19f81 GitHub auth tokens cannot be made with permissions to access multiple organisations. This is quite limiting. This commit changes the site setting to be a "secret list" type, which allows for a key/value mapping where the value is treated like a password in the UI. Now when a GitHub URL is requested for oneboxing, the org name from the URL is used to determine which token to use for the request. Just in case anyone used the old site setting already, there is a migration to create a `default` entry with that token in the new list setting, and for a period of time we will consider that token valid to use for all GitHub oneboxes as well.
This commit is contained in:
@ -18,18 +18,18 @@ module Onebox
|
||||
always_https
|
||||
|
||||
def url
|
||||
"https://api.github.com/repos/#{match[:owner]}/#{match[:repository]}/pulls/#{match[:number]}"
|
||||
"https://api.github.com/repos/#{match[:org]}/#{match[:repository]}/pulls/#{match[:number]}"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def match
|
||||
@match ||=
|
||||
@url.match(%r{github\.com/(?<owner>[^/]+)/(?<repository>[^/]+)/pull/(?<number>[^/]+)})
|
||||
@url.match(%r{github\.com/(?<org>[^/]+)/(?<repository>[^/]+)/pull/(?<number>[^/]+)})
|
||||
end
|
||||
|
||||
def data
|
||||
result = raw(github_auth_header).clone
|
||||
result = raw(github_auth_header(match[:org])).clone
|
||||
result["link"] = link
|
||||
|
||||
created_at = Time.parse(result["created_at"])
|
||||
@ -78,7 +78,7 @@ module Onebox
|
||||
def load_commit(link)
|
||||
if commit_match = link.match(%r{commits/(\h+)})
|
||||
load_json(
|
||||
"https://api.github.com/repos/#{match[:owner]}/#{match[:repository]}/commits/#{commit_match[1]}",
|
||||
"https://api.github.com/repos/#{match[:org]}/#{match[:repository]}/commits/#{commit_match[1]}",
|
||||
)
|
||||
end
|
||||
end
|
||||
@ -86,7 +86,7 @@ module Onebox
|
||||
def load_comment(link)
|
||||
if comment_match = link.match(/#issuecomment-(\d+)/)
|
||||
load_json(
|
||||
"https://api.github.com/repos/#{match[:owner]}/#{match[:repository]}/issues/comments/#{comment_match[1]}",
|
||||
"https://api.github.com/repos/#{match[:org]}/#{match[:repository]}/issues/comments/#{comment_match[1]}",
|
||||
)
|
||||
end
|
||||
end
|
||||
@ -94,7 +94,7 @@ module Onebox
|
||||
def load_review(link)
|
||||
if review_match = link.match(/#discussion_r(\d+)/)
|
||||
load_json(
|
||||
"https://api.github.com/repos/#{match[:owner]}/#{match[:repository]}/pulls/comments/#{review_match[1]}",
|
||||
"https://api.github.com/repos/#{match[:org]}/#{match[:repository]}/pulls/comments/#{review_match[1]}",
|
||||
)
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user