@@ -34,13 +34,19 @@ type ProjectComponent struct {
3434 Version string `json:"version"`
3535 Tags []string `json:"tags,omitempty"`
3636 Visibility string `json:"visibility"`
37+ BadgeToken string `json:"token,omitempty"`
3738}
3839
3940// CreateProjectResponse for unmarshalling response body of project creation
4041type CreateProjectResponse struct {
4142 Project Project `json:"project"`
4243}
4344
45+ // BadgeTokenResponse for unmarshalling response body of badge token endpoint
46+ type BadgeTokenResponse struct {
47+ Token string `json:"token"`
48+ }
49+
4450// Returns the resource represented by this file.
4551func resourceSonarqubeProject () * schema.Resource {
4652 return & schema.Resource {
@@ -81,6 +87,11 @@ func resourceSonarqubeProject() *schema.Resource {
8187 },
8288 Description : "A list of tags to put on the project." ,
8389 },
90+ "badge_token" : {
91+ Type : schema .TypeString ,
92+ Computed : true ,
93+ Description : "The badge token for the project." ,
94+ },
8495 "setting" : {
8596 Type : schema .TypeList ,
8697 Optional : true ,
@@ -224,11 +235,41 @@ func resourceSonarqubeProjectRead(d *schema.ResourceData, m interface{}) error {
224235 return fmt .Errorf ("resourceSonarqubeProjectRead: Failed to decode json into struct: %+v" , err )
225236 }
226237
238+ // Get badge token
239+ badgeTokenURL := m .(* ProviderConfiguration ).sonarQubeURL
240+ badgeTokenURL .Path = strings .TrimSuffix (badgeTokenURL .Path , "/" ) + "/api/project_badges/token"
241+ badgeTokenURL .RawQuery = url.Values {
242+ "project" : []string {d .Get ("project" ).(string )},
243+ }.Encode ()
244+
245+ badgeResp , err := httpRequestHelper (
246+ m .(* ProviderConfiguration ).httpClient ,
247+ "GET" ,
248+ badgeTokenURL .String (),
249+ http .StatusOK ,
250+ "resourceSonarqubeProjectRead" ,
251+ )
252+ if err != nil {
253+ return fmt .Errorf ("resourceSonarqubeProjectRead: Failed to get badge token: %+v" , err )
254+ }
255+ defer badgeResp .Body .Close ()
256+
257+ // Decode badge token response
258+ badgeTokenResponse := BadgeTokenResponse {}
259+ err = json .NewDecoder (badgeResp .Body ).Decode (& badgeTokenResponse )
260+ if err != nil {
261+ return fmt .Errorf ("resourceSonarqubeProjectRead: Failed to decode badge token json: %+v" , err )
262+ }
263+
264+ // Set the token in the project component
265+ projectReadResponse .Component .BadgeToken = badgeTokenResponse .Token
266+
227267 d .SetId (projectReadResponse .Component .Key )
228268 errName := d .Set ("name" , projectReadResponse .Component .Name )
229269 errProject := d .Set ("project" , projectReadResponse .Component .Key )
230270 errVisibility := d .Set ("visibility" , projectReadResponse .Component .Visibility )
231- if err := errors .Join (errName , errProject , errVisibility ); err != nil {
271+ errToken := d .Set ("badge_token" , projectReadResponse .Component .BadgeToken )
272+ if err := errors .Join (errName , errProject , errVisibility , errToken ); err != nil {
232273 return err
233274 }
234275
0 commit comments