feat(sync): GitHub en plus de Gitea, et refus d'un depot public
GitHub parle la meme API des contenus (base64, sha, corps du PUT) : meme chemin, reconnu a api.github.com/repos/. User-Agent pose partout (GitHub refuse sans). Un depot public est refuse avant toute lecture ou ecriture, Gitea comme GitHub : l'historique garde tous les instantanes chiffres. Telephone : github.com/O/R se convertit en URL d'API et inversement. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1396,7 +1396,14 @@ begin
|
||||
// changeait chaque ":" et "/" en trois caracteres.
|
||||
var LShort := LQrUrl;
|
||||
var LApi := Pos('/api/v1/repos/', LShort);
|
||||
if (LApi > 0) and EndsText('/contents/vault-sync.json', LShort) then
|
||||
// GitHub : l'adresse du depot est sur github.com, l'API sur api.github.com.
|
||||
if StartsText('https://api.github.com/repos/', LShort) and
|
||||
EndsText('/contents/vault-sync.json', LShort) then
|
||||
LShort := 'https://github.com/' +
|
||||
Copy(LShort, Length('https://api.github.com/repos/') + 1,
|
||||
Length(LShort) - Length('https://api.github.com/repos/') -
|
||||
Length('/contents/vault-sync.json'))
|
||||
else if (LApi > 0) and EndsText('/contents/vault-sync.json', LShort) then
|
||||
LShort := Copy(LShort, 1, LApi) +
|
||||
Copy(LShort, LApi + Length('/api/v1/repos/'),
|
||||
Length(LShort) - LApi - Length('/api/v1/repos/') - Length('/contents/vault-sync.json') + 1);
|
||||
@@ -1608,7 +1615,9 @@ begin
|
||||
// remplace l'authentification Basic, le corps d'un PUT est du JSON que JS
|
||||
// a deja mis en forme (le sha y voyage, pas dans un If-Match), et le test
|
||||
// de connexion se fait par GET - l'API des contenus ne repond pas a HEAD.
|
||||
var LGitea := LUrl.ToLower.Contains('/api/v1/repos/');
|
||||
// GitHub parle la meme API des contenus : meme traitement.
|
||||
var LGitea := LUrl.ToLower.Contains('/api/v1/repos/') or
|
||||
LUrl.ToLower.Contains('api.github.com/repos/');
|
||||
TThread.CreateAnonymousThread(
|
||||
procedure
|
||||
var
|
||||
@@ -1631,6 +1640,8 @@ begin
|
||||
try
|
||||
LHttp.ConnectionTimeout := 10000;
|
||||
LHttp.ResponseTimeout := 30000;
|
||||
// GitHub REFUSE toute requete sans User-Agent (403) ; Gitea l'ignore.
|
||||
LHttp.UserAgent := 'PMServer';
|
||||
// "token <PAT>" et non "Bearer" : c'est la forme que Gitea attend
|
||||
// d'un jeton d'acces personnel, et l'autre donne un 401 muet.
|
||||
if LGitea then
|
||||
|
||||
Reference in New Issue
Block a user