From 0074ededdd3aed936f59b2a1c75a1bd8228ca622 Mon Sep 17 00:00:00 2001 From: Sean Hatfield Date: Mon, 21 Oct 2024 15:25:35 -0700 Subject: [PATCH] Github data connector improvements (#2439) * fix tree/blob github urls from branches not being loaded * improve ux of github data connector * lint * patch Github URL parser to just validate with `URL` native parser * uncheck LocalStorage of PAT for security reasons --------- Co-authored-by: Timothy Carambat --- .../RepoLoader/GithubRepo/RepoLoader/index.js | 42 +++++++++++++------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/collector/utils/extensions/RepoLoader/GithubRepo/RepoLoader/index.js b/collector/utils/extensions/RepoLoader/GithubRepo/RepoLoader/index.js index 61f20874..61ef2036 100644 --- a/collector/utils/extensions/RepoLoader/GithubRepo/RepoLoader/index.js +++ b/collector/utils/extensions/RepoLoader/GithubRepo/RepoLoader/index.js @@ -29,20 +29,36 @@ class GitHubRepoLoader { } #validGithubUrl() { - const UrlPattern = require("url-pattern"); - const pattern = new UrlPattern( - "https\\://github.com/(:author)/(:project(*))", - { - // fixes project names with special characters (.github) - segmentValueCharset: "a-zA-Z0-9-._~%/+", - } - ); - const match = pattern.match(this.repo); - if (!match) return false; + try { + const url = new URL(this.repo); - this.author = match.author; - this.project = match.project; - return true; + // Not a github url at all. + if (url.hostname !== "github.com") { + console.log( + `[Github Loader]: Invalid Github URL provided! Hostname must be 'github.com'. Got ${url.hostname}` + ); + return false; + } + + // Assume the url is in the format of github.com/{author}/{project} + // Remove the first slash from the pathname so we can split it properly. + const [author, project, ..._rest] = url.pathname.slice(1).split("/"); + if (!author || !project) { + console.log( + `[Github Loader]: Invalid Github URL provided! URL must be in the format of 'github.com/{author}/{project}'. Got ${url.pathname}` + ); + return false; + } + + this.author = author; + this.project = project; + return true; + } catch (e) { + console.log( + `[Github Loader]: Invalid Github URL provided! Error: ${e.message}` + ); + return false; + } } // Ensure the branch provided actually exists