From 09af3481805c3bfa7a1e520d6efee45379822319 Mon Sep 17 00:00:00 2001 From: Mysaa Java Date: Fri, 18 Jun 2021 20:04:37 +0200 Subject: [PATCH] Ajout des sections dans le cgit-config-gen. --- Makefile | 2 ++ cgit-config-gen.c | 18 +++++++++++------- sql/AccessType.sql | 8 ++++---- sql/ReadableRepos.sql | 8 ++++---- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/Makefile b/Makefile index c8ad7a6..5bcc619 100644 --- a/Makefile +++ b/Makefile @@ -15,6 +15,8 @@ auth-keys-gen: authKeysPg.c cgit-config-gen: cgit-config-gen.c gcc cgit-config-gen.c -o cgit-config-gen -L/usr/server/postgresql/lib -I/usr/server/postgresql/include -lpq $(CFLAGS) +install-sql: sql/AccessType.sql sql/ReadableRepos.sql + /usr/server/postgresql/bin/psql -Upostgres -dpipi -f sql/AccessType.sql -f sql/ReadableRepos.sql install: all cp pam_oath_key.so /lib/security diff --git a/cgit-config-gen.c b/cgit-config-gen.c index 3acb72f..b4e06ce 100644 --- a/cgit-config-gen.c +++ b/cgit-config-gen.c @@ -26,7 +26,7 @@ main(int argc, char **argv) PGconn *conn; PGresult *res; int i; - + char* lastRgid; // Euhhhhhhhhhh /* DIR *dp; @@ -55,7 +55,7 @@ main(int argc, char **argv) c = fgetc(fd); } fclose(fd); - + printf("## Maintenant les repos ##\n\n"); // Récupère le mdp à la BDD @@ -72,7 +72,6 @@ main(int argc, char **argv) fclose(dbPassFile); connInfo[pos] = '\''; - fprintf(stderr,"On va tenter de se connecter à la bdd en tant que %d\n",geteuid()); // Connecte à la BDD conn = PQconnectdb(connInfo); @@ -95,18 +94,23 @@ main(int argc, char **argv) // Demande les données à la BDD - const char const * sqlParamValues[] = {"1"}; - res = PQexecParams(conn,"SELECT path,owner,description,logoUrl FROM git.\"ReadableRepos\"($1)",1,NULL,sqlParamValues,NULL,NULL,1); + const char const * sqlParamValues[] = {"0"}; + res = PQexecParams(conn,"SELECT path,owner,description,logoUrl,groupeID,gdr.nom FROM git.\"ReadableRepos\"($1) JOIN git.\"groupesDeRepo\" AS gdr ON gdr.\"ID\"=groupeID ORDER BY groupeID",1,NULL,sqlParamValues,NULL,NULL,0); if (PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr,"Impossible de lancer la requête SQL pour la liste des repos: %s",PQerrorMessage(conn)); PQclear(res); PQfinish(conn); return 1; } - + lastRgid = ""; // Renvoie le résultat à travers stdout for (i = 0; i < PQntuples(res); i++) { + + if(PQgetisnull(res,i,4)!=1 && (strcmp(PQgetvalue(res, i, 4),lastRgid)!=0)){ + lastRgid = PQgetvalue(res, i, 4); + printf("\nsection=%s\n\n",PQgetvalue(res,i,5)); + } printf("repo.url=%s\n",PQgetvalue(res,i,0)); printf("repo.path=/srv/git/%s\n",PQgetvalue(res,i,0)); if(PQgetisnull(res,i,1)!=1) @@ -118,7 +122,7 @@ main(int argc, char **argv) printf("\n"); } - + PQclear(res); PQfinish(conn); return 0; diff --git a/sql/AccessType.sql b/sql/AccessType.sql index 4fd0b3c..f6f86c0 100644 --- a/sql/AccessType.sql +++ b/sql/AccessType.sql @@ -28,7 +28,7 @@ BEGIN FROM git.perms JOIN git.repos ON repoID=repos."ID" JOIN git.appartenances ON appartenances."groupeID"=-perms."userID" - WHERE repos.path=gitrepo AND appartenances.utilisateurID=gituserid; + WHERE repos.path=gitrepo AND appartenances."utilisateurID"=gituserid; IF selectedrepo != NULL THEN RETURN selectedrepo; @@ -38,8 +38,8 @@ BEGIN SELECT MAX('accessType') INTO selectedrepo FROM git.perms - JOIN git.repos ON repoID=-repos."groupeID" - WHERE repos.path=gitrepo AND userID=gituserid; + JOIN git.repos ON "repoID"=-repos."groupeID" + WHERE repos.path=gitrepo AND "userID"=gituserid; IF selectedrepo != NULL THEN RETURN selectedrepo; @@ -51,7 +51,7 @@ BEGIN FROM git.perms JOIN git.appartenances ON appartenances."groupeID"=-perms."userID" JOIN git.repos ON "repoID"=-repos."groupeID" - WHERE repos.path=gitrepo AND userID=gituserid; + WHERE repos.path=gitrepo AND "userID"=gituserid; RETURN selectedRepo; diff --git a/sql/ReadableRepos.sql b/sql/ReadableRepos.sql index 12cf75e..f76ab23 100644 --- a/sql/ReadableRepos.sql +++ b/sql/ReadableRepos.sql @@ -18,26 +18,26 @@ BEGIN SELECT repos.* FROM git.perms JOIN git.repos ON "repoID"=repos."ID" - WHERE "accessType">'READ' AND "userID"=gituserid + WHERE "accessType">='READ' AND "userID"=gituserid UNION /* groupe.repo */ SELECT repos.* FROM git.perms JOIN git.repos ON "repoID"=repos."ID" JOIN git.appartenances ON appartenances."groupeID"=-perms."userID" - WHERE "accessType">'READ' AND appartenances."utilisateurID"=gituserid + WHERE "accessType">='READ' AND appartenances."utilisateurID"=gituserid UNION /* user.repoGroup */ SELECT repos.* FROM git.perms JOIN git.repos ON "repoID"=-repos."groupeID" - WHERE "accessType">'READ' AND "userID"=gituserid + WHERE "accessType">='READ' AND "userID"=gituserid UNION /* groupe.repoGroupe */ SELECT repos.* FROM git.perms JOIN git.appartenances ON appartenances."groupeID"=-perms."userID" JOIN git.repos ON "repoID"=-repos."groupeID" - WHERE "accessType">'READ' AND "userID"=gituserid; + WHERE "accessType">='READ' AND "userID"=gituserid; END $code$