Skip to content

Commit 5dd7866

Browse files
stanleyphukkajla12
andauthored
Add list warrants method and update sessions client (#50)
* Add nil check for nil params * Add relation field to QueryResult * Add ListWarrants method * Update session client and types to support additional params * Update error message Co-authored-by: Karan Kajla <kkajla12@users.noreply.github.com> * Update warrant and session tests --------- Co-authored-by: Karan Kajla <kkajla12@users.noreply.github.com>
1 parent dd2091f commit 5dd7866

File tree

15 files changed

+290
-29
lines changed

15 files changed

+290
-29
lines changed

apiclient.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func (client ApiClient) MakeRequest(method string, path string, payload interfac
5454
if client.Config.ApiKey != "" {
5555
request.Header.Add("Authorization", fmt.Sprintf("ApiKey %s", client.Config.ApiKey))
5656
}
57-
if options.WarrantToken != "" {
57+
if options != nil && options.WarrantToken != "" {
5858
request.Header.Add("Warrant-Token", options.WarrantToken)
5959
}
6060
request.Header.Add("User-Agent", fmt.Sprintf("warrant-go/%s", ClientVersion))

client.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,40 @@ func BatchDelete(params []WarrantParams) (string, error) {
101101
return getClient().BatchDelete(params)
102102
}
103103

104+
func (c WarrantClient) ListWarrants(listParams *ListWarrantParams) (ListResponse[Warrant], error) {
105+
if listParams == nil {
106+
listParams = &ListWarrantParams{}
107+
}
108+
var warrantsListResponse ListResponse[Warrant]
109+
queryParams, err := query.Values(listParams)
110+
if err != nil {
111+
return warrantsListResponse, WrapError("Error parsing ListWarrantParams", err)
112+
}
113+
114+
resp, err := c.apiClient.MakeRequest("GET", fmt.Sprintf("/v2/warrants?%s", queryParams.Encode()), warrantsListResponse, &listParams.RequestOptions)
115+
if err != nil {
116+
return warrantsListResponse, err
117+
}
118+
body, err := io.ReadAll(resp.Body)
119+
if err != nil {
120+
return warrantsListResponse, WrapError("Error reading response", err)
121+
}
122+
defer resp.Body.Close()
123+
err = json.Unmarshal([]byte(body), &warrantsListResponse)
124+
if err != nil {
125+
return warrantsListResponse, WrapError("Invalid response from server", err)
126+
}
127+
return warrantsListResponse, nil
128+
}
129+
130+
func ListWarrants(listParams *ListWarrantParams) (ListResponse[Warrant], error) {
131+
return getClient().ListWarrants(listParams)
132+
}
133+
104134
func (c WarrantClient) Query(queryString string, params *QueryParams) (ListResponse[QueryResult], error) {
135+
if params == nil {
136+
params = &QueryParams{}
137+
}
105138
var queryResponse ListResponse[QueryResult]
106139
queryParams, err := query.Values(params)
107140
if err != nil {
@@ -129,6 +162,9 @@ func Query(queryString string, params *QueryParams) (ListResponse[QueryResult],
129162
}
130163

131164
func (c WarrantClient) Check(params *WarrantCheckParams) (bool, error) {
165+
if params == nil {
166+
params = &WarrantCheckParams{}
167+
}
132168
accessCheckRequest := AccessCheckRequest{
133169
RequestOptions: params.RequestOptions,
134170
Warrants: []WarrantCheck{params.WarrantCheck},
@@ -152,6 +188,9 @@ func Check(params *WarrantCheckParams) (bool, error) {
152188
}
153189

154190
func (c WarrantClient) CheckMany(params *WarrantCheckManyParams) (bool, error) {
191+
if params == nil {
192+
params = &WarrantCheckManyParams{}
193+
}
155194
warrants := make([]WarrantCheck, 0)
156195
for _, warrantCheck := range params.Warrants {
157196
warrants = append(warrants, warrantCheck)
@@ -181,6 +220,9 @@ func CheckMany(params *WarrantCheckManyParams) (bool, error) {
181220
}
182221

183222
func (c WarrantClient) CheckUserHasPermission(params *PermissionCheckParams) (bool, error) {
223+
if params == nil {
224+
params = &PermissionCheckParams{}
225+
}
184226
return c.Check(&WarrantCheckParams{
185227
RequestOptions: params.RequestOptions,
186228
WarrantCheck: WarrantCheck{
@@ -204,6 +246,9 @@ func CheckUserHasPermission(params *PermissionCheckParams) (bool, error) {
204246
}
205247

206248
func (c WarrantClient) CheckUserHasRole(params *RoleCheckParams) (bool, error) {
249+
if params == nil {
250+
params = &RoleCheckParams{}
251+
}
207252
return c.Check(&WarrantCheckParams{
208253
RequestOptions: params.RequestOptions,
209254
WarrantCheck: WarrantCheck{
@@ -227,6 +272,9 @@ func CheckUserHasRole(params *RoleCheckParams) (bool, error) {
227272
}
228273

229274
func (c WarrantClient) CheckHasFeature(params *FeatureCheckParams) (bool, error) {
275+
if params == nil {
276+
params = &FeatureCheckParams{}
277+
}
230278
return c.Check(&WarrantCheckParams{
231279
RequestOptions: params.RequestOptions,
232280
WarrantCheck: WarrantCheck{

examples/live_test.go

Lines changed: 95 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ func TestMultiTenancy(t *testing.T) {
590590
if err != nil {
591591
t.Fatal(err)
592592
}
593-
user2, err := user.Create(&warrant.UserParams{})
593+
user2, err := user.Create(nil)
594594
if err != nil {
595595
t.Fatal(err)
596596
}
@@ -1749,12 +1749,21 @@ func TestSessions(t *testing.T) {
17491749
}
17501750
assert.NotEmpty(authzSessionToken)
17511751

1752-
ssDashUrl, err := session.CreateSelfServiceSession((&warrant.SelfServiceSessionParams{
1752+
authzSessionTokenWithTenant, err := session.CreateAuthorizationSession(&warrant.AuthorizationSessionParams{
1753+
UserId: user1.UserId,
1754+
TenantId: tenant1.TenantId,
1755+
})
1756+
if err != nil {
1757+
t.Fatal(err)
1758+
}
1759+
assert.NotEmpty(authzSessionTokenWithTenant)
1760+
1761+
ssDashUrl, err := session.CreateSelfServiceSession(&warrant.SelfServiceSessionParams{
17531762
UserId: user1.UserId,
17541763
TenantId: tenant1.TenantId,
17551764
RedirectUrl: "http://localhost:8080",
17561765
SelfServiceStrategy: warrant.SelfServiceStrategyFGAC,
1757-
}))
1766+
})
17581767
if err != nil {
17591768
t.Fatal(err)
17601769
}
@@ -1783,7 +1792,7 @@ func TestWarrants(t *testing.T) {
17831792
t.Fatal(err)
17841793
}
17851794

1786-
newPermission, err := permission.Create(&warrant.PermissionParams{
1795+
permission1, err := permission.Create(&warrant.PermissionParams{
17871796
PermissionId: "perm1",
17881797
Meta: map[string]interface{}{
17891798
"name": "Permission 1",
@@ -1794,14 +1803,25 @@ func TestWarrants(t *testing.T) {
17941803
t.Fatal(err)
17951804
}
17961805

1806+
permission2, err := permission.Create(&warrant.PermissionParams{
1807+
PermissionId: "perm2",
1808+
Meta: map[string]interface{}{
1809+
"name": "Permission 2",
1810+
"description": "Permission with id 2",
1811+
},
1812+
})
1813+
if err != nil {
1814+
t.Fatal(err)
1815+
}
1816+
17971817
checkResult, err := warrant.Check(&warrant.WarrantCheckParams{
17981818
RequestOptions: warrant.RequestOptions{
17991819
WarrantToken: "latest",
18001820
},
18011821
WarrantCheck: warrant.WarrantCheck{
18021822
Object: warrant.Object{
18031823
ObjectType: warrant.ObjectTypePermission,
1804-
ObjectId: newPermission.PermissionId,
1824+
ObjectId: permission1.PermissionId,
18051825
},
18061826
Relation: "member",
18071827
Subject: warrant.Subject{
@@ -1815,9 +1835,9 @@ func TestWarrants(t *testing.T) {
18151835
}
18161836
assert.False(checkResult)
18171837

1818-
newWarrant, err := warrant.Create(&warrant.WarrantParams{
1838+
permission1Warrant, err := warrant.Create(&warrant.WarrantParams{
18191839
ObjectType: warrant.ObjectTypePermission,
1820-
ObjectId: newPermission.PermissionId,
1840+
ObjectId: permission1.PermissionId,
18211841
Relation: "member",
18221842
Subject: warrant.Subject{
18231843
ObjectType: warrant.ObjectTypeUser,
@@ -1827,7 +1847,7 @@ func TestWarrants(t *testing.T) {
18271847
if err != nil {
18281848
t.Fatal(err)
18291849
}
1830-
assert.NotNil(newWarrant.WarrantToken)
1850+
assert.NotNil(permission1Warrant.WarrantToken)
18311851

18321852
checkResult, err = warrant.Check(&warrant.WarrantCheckParams{
18331853
RequestOptions: warrant.RequestOptions{
@@ -1836,7 +1856,7 @@ func TestWarrants(t *testing.T) {
18361856
WarrantCheck: warrant.WarrantCheck{
18371857
Object: warrant.Object{
18381858
ObjectType: warrant.ObjectTypePermission,
1839-
ObjectId: newPermission.PermissionId,
1859+
ObjectId: permission1.PermissionId,
18401860
},
18411861
Relation: "member",
18421862
Subject: warrant.Subject{
@@ -1850,23 +1870,78 @@ func TestWarrants(t *testing.T) {
18501870
}
18511871
assert.True(checkResult)
18521872

1873+
permission2Warrant, err := warrant.Create(&warrant.WarrantParams{
1874+
ObjectType: warrant.ObjectTypePermission,
1875+
ObjectId: permission2.PermissionId,
1876+
Relation: "member",
1877+
Subject: warrant.Subject{
1878+
ObjectType: warrant.ObjectTypeUser,
1879+
ObjectId: newUser.UserId,
1880+
},
1881+
})
1882+
if err != nil {
1883+
t.Fatal(err)
1884+
}
1885+
assert.NotNil(permission2Warrant.WarrantToken)
1886+
1887+
warrantsList, err := warrant.ListWarrants(&warrant.ListWarrantParams{
1888+
ObjectType: warrant.ObjectTypePermission,
1889+
ObjectId: permission1.PermissionId,
1890+
})
1891+
if err != nil {
1892+
t.Fatal(err)
1893+
}
1894+
1895+
assert.Equal(1, len(warrantsList.Results))
1896+
assert.Equal("permission", warrantsList.Results[0].ObjectType)
1897+
assert.Equal("perm1", warrantsList.Results[0].ObjectId)
1898+
assert.Equal("member", warrantsList.Results[0].Relation)
1899+
assert.Equal("user", warrantsList.Results[0].Subject.ObjectType)
1900+
assert.Equal(newUser.UserId, warrantsList.Results[0].Subject.ObjectId)
1901+
1902+
warrantsList, err = warrant.ListWarrants(&warrant.ListWarrantParams{
1903+
SubjectType: warrant.ObjectTypeUser,
1904+
SubjectId: newUser.UserId,
1905+
})
1906+
if err != nil {
1907+
t.Fatal(err)
1908+
}
1909+
1910+
assert.Equal(2, len(warrantsList.Results))
1911+
assert.Equal("permission", warrantsList.Results[0].ObjectType)
1912+
assert.Equal("perm1", warrantsList.Results[0].ObjectId)
1913+
assert.Equal("member", warrantsList.Results[0].Relation)
1914+
assert.Equal("user", warrantsList.Results[0].Subject.ObjectType)
1915+
assert.Equal(newUser.UserId, warrantsList.Results[0].Subject.ObjectId)
1916+
assert.Equal("permission", warrantsList.Results[1].ObjectType)
1917+
assert.Equal("perm2", warrantsList.Results[1].ObjectId)
1918+
assert.Equal("member", warrantsList.Results[1].Relation)
1919+
assert.Equal("user", warrantsList.Results[1].Subject.ObjectType)
1920+
assert.Equal(newUser.UserId, warrantsList.Results[1].Subject.ObjectId)
1921+
18531922
queryResult, err := warrant.Query(fmt.Sprintf("select * where %s:%s is *", "user", newUser.UserId), &warrant.QueryParams{})
18541923
if err != nil {
18551924
fmt.Println(err)
18561925
return
18571926
}
18581927

1859-
assert.Equal(1, len(queryResult.Results))
1928+
assert.Equal(2, len(queryResult.Results))
18601929
assert.Equal("permission", queryResult.Results[0].ObjectType)
18611930
assert.Equal("perm1", queryResult.Results[0].ObjectId)
1862-
assert.Equal("member", queryResult.Results[0].Warrant.Relation)
1931+
assert.Equal("member", queryResult.Results[0].Relation)
18631932
assert.NotNil(queryResult.Results[0].Meta)
18641933
assert.Equal("Permission 1", queryResult.Results[0].Meta["name"])
18651934
assert.Equal("Permission with id 1", queryResult.Results[0].Meta["description"])
1935+
assert.Equal("permission", queryResult.Results[1].ObjectType)
1936+
assert.Equal("perm2", queryResult.Results[1].ObjectId)
1937+
assert.Equal("member", queryResult.Results[1].Relation)
1938+
assert.NotNil(queryResult.Results[1].Meta)
1939+
assert.Equal("Permission 2", queryResult.Results[1].Meta["name"])
1940+
assert.Equal("Permission with id 2", queryResult.Results[1].Meta["description"])
18661941

18671942
warrantToken, err := warrant.Delete(&warrant.WarrantParams{
18681943
ObjectType: warrant.ObjectTypePermission,
1869-
ObjectId: newPermission.PermissionId,
1944+
ObjectId: permission1.PermissionId,
18701945
Relation: "member",
18711946
Subject: warrant.Subject{
18721947
ObjectType: warrant.ObjectTypeUser,
@@ -1885,7 +1960,7 @@ func TestWarrants(t *testing.T) {
18851960
WarrantCheck: warrant.WarrantCheck{
18861961
Object: warrant.Object{
18871962
ObjectType: warrant.ObjectTypePermission,
1888-
ObjectId: newPermission.PermissionId,
1963+
ObjectId: permission1.PermissionId,
18891964
},
18901965
Relation: "member",
18911966
Subject: warrant.Subject{
@@ -1906,7 +1981,13 @@ func TestWarrants(t *testing.T) {
19061981
}
19071982
assert.NotNil(warrantToken)
19081983

1909-
warrantToken, err = permission.Delete(newPermission.PermissionId)
1984+
warrantToken, err = permission.Delete(permission1.PermissionId)
1985+
if err != nil {
1986+
t.Fatal(err)
1987+
}
1988+
assert.NotNil(warrantToken)
1989+
1990+
warrantToken, err = permission.Delete(permission2.PermissionId)
19101991
if err != nil {
19111992
t.Fatal(err)
19121993
}

feature/client.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ func NewClient(config warrant.ClientConfig) Client {
1818
}
1919

2020
func (c Client) Create(params *warrant.FeatureParams) (*warrant.Feature, error) {
21+
if params == nil {
22+
params = &warrant.FeatureParams{}
23+
}
2124
objectParams := warrant.ObjectParams{
2225
ObjectType: warrant.ObjectTypeFeature,
2326
RequestOptions: params.RequestOptions,
@@ -43,6 +46,9 @@ func Create(params *warrant.FeatureParams) (*warrant.Feature, error) {
4346
}
4447

4548
func (c Client) Get(featureId string, params *warrant.FeatureParams) (*warrant.Feature, error) {
49+
if params == nil {
50+
params = &warrant.FeatureParams{}
51+
}
4652
objectParams := warrant.ObjectParams{
4753
ObjectType: warrant.ObjectTypeFeature,
4854
ObjectId: featureId,
@@ -64,6 +70,9 @@ func Get(featureId string, params *warrant.FeatureParams) (*warrant.Feature, err
6470
}
6571

6672
func (c Client) Update(featureId string, params *warrant.FeatureParams) (*warrant.Feature, error) {
73+
if params == nil {
74+
params = &warrant.FeatureParams{}
75+
}
6776
objectParams := warrant.ObjectParams{
6877
ObjectType: warrant.ObjectTypeFeature,
6978
ObjectId: featureId,
@@ -93,6 +102,9 @@ func Delete(featureId string) (string, error) {
93102
}
94103

95104
func (c Client) ListFeatures(listParams *warrant.ListFeatureParams) (warrant.ListResponse[warrant.Feature], error) {
105+
if listParams == nil {
106+
listParams = &warrant.ListFeatureParams{}
107+
}
96108
var featuresListResponse warrant.ListResponse[warrant.Feature]
97109

98110
objectsListResponse, err := object.ListObjects(&warrant.ListObjectParams{
@@ -125,6 +137,9 @@ func ListFeatures(listParams *warrant.ListFeatureParams) (warrant.ListResponse[w
125137
}
126138

127139
func (c Client) ListFeaturesForPricingTier(pricingTierId string, listParams *warrant.ListFeatureParams) (warrant.ListResponse[warrant.Feature], error) {
140+
if listParams == nil {
141+
listParams = &warrant.ListFeatureParams{}
142+
}
128143
var featuresListResponse warrant.ListResponse[warrant.Feature]
129144

130145
queryResponse, err := warrant.Query(fmt.Sprintf("select feature where pricing-tier:%s is *", pricingTierId), &warrant.QueryParams{
@@ -188,6 +203,9 @@ func RemoveFeatureFromPricingTier(featureId string, pricingTierId string) (strin
188203
}
189204

190205
func (c Client) ListFeaturesForTenant(tenantId string, listParams *warrant.ListFeatureParams) (warrant.ListResponse[warrant.Feature], error) {
206+
if listParams == nil {
207+
listParams = &warrant.ListFeatureParams{}
208+
}
191209
var featuresListResponse warrant.ListResponse[warrant.Feature]
192210

193211
queryResponse, err := warrant.Query(fmt.Sprintf("select feature where tenant:%s is *", tenantId), &warrant.QueryParams{
@@ -251,6 +269,9 @@ func RemoveFeatureFromTenant(featureId string, tenantId string) (string, error)
251269
}
252270

253271
func (c Client) ListFeaturesForUser(userId string, listParams *warrant.ListFeatureParams) (warrant.ListResponse[warrant.Feature], error) {
272+
if listParams == nil {
273+
listParams = &warrant.ListFeatureParams{}
274+
}
254275
var featuresListResponse warrant.ListResponse[warrant.Feature]
255276

256277
queryResponse, err := warrant.Query(fmt.Sprintf("select feature where user:%s is *", userId), &warrant.QueryParams{

object/client.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ func BatchCreate(params []warrant.ObjectParams) ([]warrant.Object, error) {
6464
}
6565

6666
func (c Client) Get(objectType string, objectId string, params *warrant.ObjectParams) (*warrant.Object, error) {
67+
if params == nil {
68+
params = &warrant.ObjectParams{}
69+
}
6770
resp, err := c.apiClient.MakeRequest("GET", fmt.Sprintf("/v2/objects/%s/%s", objectType, objectId), nil, &params.RequestOptions)
6871
if err != nil {
6972
return nil, err
@@ -136,6 +139,9 @@ func BatchDelete(params []warrant.ObjectParams) (string, error) {
136139
}
137140

138141
func (c Client) ListObjects(listParams *warrant.ListObjectParams) (warrant.ListResponse[warrant.Object], error) {
142+
if listParams == nil {
143+
listParams = &warrant.ListObjectParams{}
144+
}
139145
var objectsListResponse warrant.ListResponse[warrant.Object]
140146
queryParams, err := query.Values(listParams)
141147
if err != nil {

0 commit comments

Comments
 (0)