mirror of
https://github.com/outline/outline.git
synced 2026-06-13 11:25:03 +03:00
Utilize GitHub integration to fetch information about public issues/PRs (#10827)
* fix: use github APIs to unfurl public gh issues/prs * fix: revert * fix: multiple gh accounts * fix: use replacements
This commit is contained in:
@@ -14,20 +14,14 @@ export const isURLMentionable = ({
|
||||
integration: Integration;
|
||||
}): boolean => {
|
||||
const { hostname, pathname } = url;
|
||||
const pathParts = pathname.split("/");
|
||||
|
||||
switch (integration.service) {
|
||||
case IntegrationService.GitHub: {
|
||||
const settings =
|
||||
integration.settings as IntegrationSettings<IntegrationType.Embed>;
|
||||
|
||||
return (
|
||||
hostname === "github.com" &&
|
||||
settings.github?.installation.account.name === pathParts[1] // ensure installed org/account name matches with the provided url.
|
||||
);
|
||||
return hostname === "github.com";
|
||||
}
|
||||
|
||||
case IntegrationService.Linear: {
|
||||
const pathParts = pathname.split("/");
|
||||
const settings =
|
||||
integration.settings as IntegrationSettings<IntegrationType.Embed>;
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import {
|
||||
type OAuthWebFlowAuthOptions,
|
||||
type InstallationAuthOptions,
|
||||
} from "@octokit/auth-app";
|
||||
import { Sequelize } from "sequelize";
|
||||
import { Endpoints, OctokitResponse } from "@octokit/types";
|
||||
import { Octokit } from "octokit";
|
||||
import pluralize from "pluralize";
|
||||
@@ -229,11 +230,22 @@ export class GitHub {
|
||||
return;
|
||||
}
|
||||
|
||||
// Find integration, prioritizing one where the installation account matches the resource owner
|
||||
const integration = (await Integration.findOne({
|
||||
where: {
|
||||
service: IntegrationService.GitHub,
|
||||
teamId: actor.teamId,
|
||||
"settings.github.installation.account.name": resource.owner,
|
||||
},
|
||||
order: [
|
||||
[
|
||||
Sequelize.literal(
|
||||
`CASE WHEN "settings"->'github'->'installation'->'account'->>'name' = :owner THEN 0 ELSE 1 END`
|
||||
),
|
||||
"ASC",
|
||||
],
|
||||
],
|
||||
replacements: {
|
||||
owner: resource.owner,
|
||||
},
|
||||
})) as Integration<IntegrationType.Embed>;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user