Jak pobrać pliki z gitlaba?

0

Chciałbym zrobić połączenie z Gitlabem w aplikacji by pobrać pliki po naciśnięciu guzika niestety Nie bardzo wiem jak i czy to możliwe próby jakie robiłem wywoływały błędy autoryzacji używając tokena a gdy podałem hasło i login był inny błąd nie bardzo wiem jak to obejść

0

Myślę, że tokenem to nienajgłupszy pomysł tylko nie uprościłeś nie podając co tak na prawdę chcesz osiagnąć (np. pobieranie w imieniu użytkownika z repozytoriów do których on ma dostęp, czy pobieranie jako service-to-service) i jakie masz błędy.

2

Tokeny mają różne permissions i można je ustawiać.

0

Chciałbym sprawdzić czy w folderze aplikacji pliki są zgodne z gitem jeśli są stare to pobrał i je zaktualizował na gicie stworzyłem "personal token" w którym ndałem uprawnienia na wszystko

0

To podeślij kod, ale bez tego tokenu :P

1

Błąd podczas pobierania informacji o pliku: Forbidden

string gitLabUrl = "https://gitlab.com/AA9343701/AAA"; 
string projectId = "9343701";   
string privateToken = "glpat-aaa11AaAAA1aA1aAa1A1"; 

string fileName = "AAA/_WORK/IT_Misc.d"; 
using (var httpClient = new HttpClient())
{
    httpClient.DefaultRequestHeaders.Add("PRIVATE-TOKEN", privateToken);

    // Pobierz informacje o pliku
    var fileResponse = await httpClient.GetAsync($"{gitLabUrl}/api/v4/projects/{projectId}/repository/files/{Uri.EscapeDataString(fileName)}");

    if (fileResponse.IsSuccessStatusCode)
    {
        var fileContent = await fileResponse.Content.ReadAsStringAsync();
        var fileData = Newtonsoft.Json.JsonConvert.DeserializeObject<FileData>(fileContent);

        // Pobierz zawartość pliku
        var rawFileResponse = await httpClient.GetAsync($"{gitLabUrl}{fileData.RawPath}");

        if (rawFileResponse.IsSuccessStatusCode)
        {
            var fileBytes = await rawFileResponse.Content.ReadAsByteArrayAsync();

            // Zapisz plik lokalnie
            File.WriteAllBytes(fileName, fileBytes);
            Console.WriteLine($"Plik {fileName} został pomyślnie pobrany.");
        }
        else
        {
            Console.WriteLine($"Błąd podczas pobierania zawartości pliku: {rawFileResponse.StatusCode}");
        }
    }
    else
    {
        Console.WriteLine($"Błąd podczas pobierania informacji o pliku: {fileResponse.StatusCode}");
    }
}


class FileData
{
    public string RawPath { get; set; }
}

1
Andrzej Horabik napisał(a):

Chciałbym sprawdzić czy w folderze aplikacji pliki są zgodne z gitem jeśli są stare to pobrał i je zaktualizował na gicie stworzyłem "personal token" w którym ndałem uprawnienia na wszystko

A potrzebujesz do tego osobnego programu? Nie wystarczy zrobić git fetch albo git pull?

0

Potrzebuje to jako osobna funkcja w programie by ktoś bez posiadania gita był wstanie aktualizować pliki takie jak język czy inne mniejsze. funkcje które opisujesz z tego co wiem wymagają posiadania gita :x

0
Andrzej Horabik napisał(a):

Potrzebuje to jako osobna funkcja w programie by ktoś bez posiadania gita był wstanie aktualizować pliki takie jak język czy inne mniejsze. funkcje które opisujesz z tego co wiem wymagają posiadania gita :x

Czyli chcesz dodać do swojego programu funkcję automatycznego aktualizowania się, np. aktualizacje tłumaczeń?

2

@Andrzej Horabik Próbowałeś skonstruować samodzielnie i wysłać takiego curla z poziomu terminala? Co dostałeś?
Jak nie, to to powinno mniej więcej wyglądać tak:

$ curl https://gitlab.com/AA9343701/AAA/api/v4/projects/9343701/repository/files/AAA/_WORK/IT_Misc.d -H "PRIVATE-TOKEN: glpat-aaa11AaAAA1aA1aAa1A1"

To co mnie zastanawia, to masz tutaj x2 AAA, może to drugie jest niepotrzebne?

0

z poziomu terminala by przetestować czy w ogole token działa? w innym wypadku nie bardzo rozumiem zastosowanie terminala dla pliku wykonywalnego

Riddle generalnie w programie generuje rózne pliki docelowo chciałbym by wysyłał je na gita a ktoś inny za pomocą tego samego programu mógł pobrać na innym komputerze tłumaczenie to pierwszy plik dla testu bowiem aplikacje udostępniam w kraju i za granicą

0
Andrzej Horabik napisał(a):

Riddle generalnie w programie generuje rózne pliki docelowo chciałbym by wysyłał je na gita a ktoś inny za pomocą tego samego programu mógł pobrać na innym komputerze tłumaczenie to pierwszy plik dla testu bowiem aplikacje udostępniam w kraju i za granicą

Czyli chcesz żeby Twoja aplikacja była klientami między różnymi userami, a gitlab ma być hostingiem plików?

0

Dokładnie tak o ile to w ogole jest możliwe

0

@Andrzej Horabik Terminal jest tylko w celach przetestowania. Jeśli sprawdzisz, że curl działa w terminalu to wiesz, że kod jest zły, jeśli curl nie działa, musisz poszukać przyczyny w nim. W curl nie tylko token może być zły. Może się zdarzyć, ze ścieżką jest niepoprawna.

1
Andrzej Horabik napisał(a):

Dokładnie tak o ile to w ogole jest możliwe

A ufasz tym ludziom którym dasz swój program (nie będą próbowali Cię zhackować), czy program powinien być bezpieczny?

0

Ten git jest specjalnie stworzony tylko pod ten program. wiec nie mam czego ryzykować.
Natomiast narzedzie trafiać będzie do wąskiej grupy w której są pasionaci bardziej niż złośliwcy

1
Andrzej Horabik napisał(a):

Ten git jest specjalnie stworzony tylko pod ten program. wiec nie mam czego ryzykować.

Nie chodzi o to. Nawet jak to repo jest do wyrzucenia, to nadal ludzie mając taki token mogą tam napsuć, np mogą usuwać pliki, i nawet nadpisywać historię (jeśli nie zablokujesz push --force).

Andrzej Horabik napisał(a):

Natomiast narzedzie trafiać będzie do wąskiej grupy w której są pasionaci bardziej niż złośliwcy

Jeśli te Twoje aplikacje mają wrzucać zmiany na gita (a zmiany to dodawanie, edycja, usuwanie, podmienianie, zmiana nazw i folderów, wszystko to będą mogli zrobić), to pewnie każdy z nich musiałby mieć token do jednego konta, prawdopodobnie Twojego, który musiałbyś udostępnić razem ze swoim programem. No jakoś może mogłoby to działać, jeśli faktycznie mówisz, żaden z tych userów nie ma złej woli.

Przeczytaj dokumentację jak się integrować z GitLab: https://docs.gitlab.com/ee/api/members.html#list-all-members-of-a-group-or-project

0

No tak w tym wypadku masz racje ze ktoś mógłby napsuć dlatego z pozycji programu pewne funkcje nie są od tag do zlokalizowania ( Ja wiem że można aplikacje C# zdekompilować i pobrać dane) kwestia kodowania tokenu to już daleki temat pierw chce ustalić czy to zadziała.
no i druga kwestia kopie zapasową mam na dysku google wiec aż tak sie nie boje

1
Andrzej Horabik napisał(a):

No tak w tym wypadku masz racje ze ktoś mógłby napsuć dlatego z pozycji programu pewne funkcje nie są od tag do zlokalizowania ( Ja wiem że można aplikacje C# zdekompilować i pobrać dane) kwestia kodowania tokenu to już daleki temat pierw chce ustalić czy to zadziała.

Dużo prościej, wystarczy pobrać byle jaki sniffer, który czyta jakie żądania idą przez sieć, i masz token. Mi by to zajęło jakieś 30 sekund bez żadnego dekompilowania.

Andrzej Horabik napisał(a):

no i druga kwestia kopie zapasową mam na dysku google wiec aż tak sie nie boje

Powiedz po prostu tak od początku do końca co ten Twój program ma robić tak na prawdę, do czego ma służyć?

1

Narzedzie do tworzenia skryptów podgladu modeli tłumaczenia edycji efektów cząsteczkowych a dedykowany jest do gry Gothic 2
stad wąskie grono odbiorców

2
Andrzej Horabik napisał(a):

Dokładnie tak o ile to w ogole jest możliwe

Możliwe i wiele małych aplikacji i skryptów tak robi, natomiast musisz się liczyć z limitami które często w takich aplikacjach widziałem wykorzystane.
Jak duże są te pliki i jak często będą pobierane?
Gitlab pozwala na 10GB transferu miesięcznie, potem musisz kupić pakiet Storage za $60 za rok który daje dodatkowe 20GB miesięcznie. Dla dużej aplikacji bardziej się może opłacić wykupienie VPSa lub CDN pod hosting plików.

0

Ale jeszcze z jakichś innych funkcji GitLaba w tej aplikacji masz zamiar korzystać, czy chcesz tego użyć wyłącznie jako storage na pliki?

0
Andrzej Horabik napisał(a):

Narzedzie do tworzenia skryptów podgladu modeli tłumaczenia edycji efektów cząsteczkowych a dedykowany jest do gry Gothic 2
stad wąskie grono odbiorców

Okej, w końcu jakiś konkret. A co już masz zrobione?

0
obscurity napisał(a):

Możliwe i wiele małych aplikacji i skryptów tak robi, natomiast musisz się liczyć z limitami które często w takich aplikacjach widziałem wykorzystane.
Jak duże są te pliki i jak często będą pobierane?
Gitlab pozwala na 10GB transferu miesięcznie, potem musisz kupić pakiet Storage za $60 za rok który daje dodatkowe 20GB miesięcznie. Dla dużej aplikacji bardziej się może opłacić wykupienie VPSa lub CDN pod hosting plików.

@obscurity Plikow mam w sumie na +-5gb i teraz tylko dochodzą malutkie z racji iż już tylko jakieś listy czy konfiguracje. nie przewiduje tu wiekszego transferu.

Riddle napisał(a):

Okej, w końcu jakiś konkret. A co już masz zrobione?

@Riddle co do Twojego pytania to co napisałem powyzej mam już praktycznie gotowe a ponieważ daje juz testować programik zaufanym przyjaciołom pomyślałem jak by tu ułatwić aktualizacje bo manualnie wysyłac kazdy plik to udrenka dla mnie.

some_ONE napisał(a):

Ale jeszcze z jakichś innych funkcji GitLaba w tej aplikacji masz zamiar korzystać, czy chcesz tego użyć wyłącznie jako storage na pliki?

@some_ONE nie tylko dla wysyłki i pobierania plików jak mówiłem to git dedykowany tylko pod ten programik

0
Andrzej Horabik napisał(a):
Riddle napisał(a):

Okej, w końcu jakiś konkret. A co już masz zrobione?

@Riddle co do Twojego pytania to co napisałem powyzej mam już praktycznie gotowe a ponieważ daje juz testować programik zaufanym przyjaciołom pomyślałem jak by tu ułatwić aktualizacje bo manualnie wysyłac kazdy plik to udrenka dla mnie.

Skoro jesteś w stanie wysyłać pliki ręcznie, to czemu nie zrobisz normalnego repozytorium z tych plików, i nie posługujesz się normalnymi gitowymi komendami jak commit, push, pull? Miałbyś wtedy wersjonowanie tych plików za darmo.

0

wiaze sie to z tym ze trzeba miec gita zainstalowanego jak dla minie na swoim pc mam ale nie kazdy ma i ogarnia.

no chyba ze to teraz ja nie łapię :x

1 użytkowników online, w tym zalogowanych: 0, gości: 1