@@ -15,7 +15,16 @@ const timeout = 10 * time.Second
1515// CodacyApiBase is the base URL for the Codacy API
1616var CodacyApiBase = "https://app.codacy.com"
1717
18- func getRequest (url string , apiToken string ) ([]byte , error ) {
18+ // getTokenFromFlags extracts the appropriate token and its type from init flags.
19+ // Project tokens take precedence over API tokens.
20+ func getTokenFromFlags (initFlags domain.InitFlags ) (token string , isProjectToken bool ) {
21+ if initFlags .ProjectToken != "" {
22+ return initFlags .ProjectToken , true
23+ }
24+ return initFlags .ApiToken , false
25+ }
26+
27+ func getRequest (url string , apiToken string , isProjectToken bool ) ([]byte , error ) {
1928 client := & http.Client {
2029 Timeout : timeout ,
2130 }
@@ -26,7 +35,11 @@ func getRequest(url string, apiToken string) ([]byte, error) {
2635 }
2736
2837 if apiToken != "" {
29- req .Header .Set ("api-token" , apiToken )
38+ if isProjectToken {
39+ req .Header .Set ("project-token" , apiToken )
40+ } else {
41+ req .Header .Set ("api-token" , apiToken )
42+ }
3043 }
3144
3245 resp , err := client .Do (req )
@@ -56,7 +69,8 @@ func GetPage[T any](
5669 initFlags domain.InitFlags ,
5770 parser func ([]byte ) ([]T , string , error ),
5871) ([]T , string , error ) {
59- response , err := getRequest (url , initFlags .ApiToken )
72+ token , isProjectToken := getTokenFromFlags (initFlags )
73+ response , err := getRequest (url , token , isProjectToken )
6074 if err != nil {
6175 return nil , "" , fmt .Errorf ("failed to get page: %w" , err )
6276 }
@@ -211,7 +225,8 @@ func GetRepositoryTools(initFlags domain.InitFlags) ([]domain.Tool, error) {
211225 initFlags .Organization ,
212226 initFlags .Repository )
213227
214- bodyResponse , err := getRequest (baseURL , initFlags .ApiToken )
228+ token , isProjectToken := getTokenFromFlags (initFlags )
229+ bodyResponse , err := getRequest (baseURL , token , isProjectToken )
215230 if err != nil {
216231 return nil , fmt .Errorf ("failed to get repository tools: %w" , err )
217232 }
@@ -251,7 +266,7 @@ func GetRepositoryTools(initFlags domain.InitFlags) ([]domain.Tool, error) {
251266func GetToolsVersions () ([]domain.Tool , error ) {
252267 baseURL := fmt .Sprintf ("%s/api/v3/tools" , CodacyApiBase )
253268
254- bodyResponse , err := getRequest (baseURL , "" )
269+ bodyResponse , err := getRequest (baseURL , "" , false )
255270 if err != nil {
256271 return nil , fmt .Errorf ("failed to get tool versions: %w" , err )
257272 }
@@ -273,7 +288,8 @@ func GetRepositoryLanguages(initFlags domain.InitFlags) ([]domain.RepositoryLang
273288 initFlags .Organization ,
274289 initFlags .Repository )
275290
276- bodyResponse , err := getRequest (baseURL , initFlags .ApiToken )
291+ token , isProjectToken := getTokenFromFlags (initFlags )
292+ bodyResponse , err := getRequest (baseURL , token , isProjectToken )
277293 if err != nil {
278294 return nil , fmt .Errorf ("failed to get repository languages: %w" , err )
279295 }
@@ -291,7 +307,7 @@ func GetRepositoryLanguages(initFlags domain.InitFlags) ([]domain.RepositoryLang
291307func GetLanguageTools () ([]domain.LanguageTool , error ) {
292308 baseURL := fmt .Sprintf ("%s/api/v3/languages/tools" , CodacyApiBase )
293309
294- bodyResponse , err := getRequest (baseURL , "" )
310+ bodyResponse , err := getRequest (baseURL , "" , false )
295311 if err != nil {
296312 return nil , fmt .Errorf ("failed to get language tools: %w" , err )
297313 }
0 commit comments