authorisedList entries with * never match repository URLs

Abierto
#1,589 3 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
62/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
git, github, nodejs, typescript

Línea de trabajo

Comienza en el punto de entrada getRepoByUrl y sigue la búsqueda en authorisedList y el acceso a db.getRepos. Reproduce el caso de comodín de una organización de GitHub a través del proxy y verifica después que tanto las entradas de URL con comodín como las exactas se resuelvan correctamente, incluidas las URL de repositorios con y sin .git.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

enhancement

Describe the bug

getRepoByUrl performs an exact URL lookup on authorisedList. Entries intended as org-level wildcards, e.g. https://github.com/example-org/*, do not match concrete repo URLs such as https://github.com/example-org/some-repo.git. There is no way to allowlist all repos under an org without enumerating every URL.

To Reproduce

Steps to reproduce the behavior:

  1. Run @finos/[email protected].
  2. Add an authorised list entry: { "url": "https://github.com/example-org/*" }
  3. Clone or pull https://github.com/example-org/some-repo through the proxy.
  4. See error: repo not found on authorised list / request rejected as unauthorised.

Expected behavior

https://github.com/example-org/* should match any repo under that org, e.g. https://github.com/example-org/foo and https://github.com/example-org/foo.git. For github.com, repo URLs are always owner/repo. Exact URL entries should continue to work as today.

Screenshots

N/A

Desktop (please complete the following information):

  • OS: Linux; macOS
  • Browser: N/A (HTTP client / git CLI)
  • Version: Node 20+; @finos/git-proxy 2.0.0

Smartphone (please complete the following information):

  • Device: N/A
  • OS: N/A
  • Browser: N/A
  • Version: N/A

Additional context

Suggested fallback when exact lookup misses:

function wildcardToRegExp(pattern) {
  const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
  return new RegExp('^' + escaped.replace(/\*/g, '[^/]+') + '$');
}

const originalGetRepoByUrl = db.getRepoByUrl;
db.getRepoByUrl = async function (url) {
  const exact = await originalGetRepoByUrl(url);
  if (exact) return exact;
  for (const repo of await db.getRepos()) {
    if (repo.url?.includes('*') && wildcardToRegExp(repo.url).test(url)) {
      return repo;
    }
  }
  return null;
};

Happy to open a PR if useful.

Lenguaje dominante
TypeScript
Estrellas
263
Forks
185
Merge medio
2 d 15 h
PR fusionados (30 d)
39

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de finos/git-proxy

Todos los issues de finos/git-proxy

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.