@@ -2,6 +2,7 @@ package cli
22
33import (
44 "context"
5+ "encoding/json"
56 "errors"
67 "fmt"
78 "net/url"
6869 ShortForm : "n" ,
6970 Help : "Number of APIs to retrieve. Minimum 1, maximum 1000." ,
7071 }
72+ apiSubjectTypeAuthorization = Flag {
73+ Name : "Subject Type Authorization" ,
74+ LongForm : "subject-type-authorization" ,
75+ Help : "JSON object defining access policies for user and client flows. Example: '{\" user\" :{\" policy\" :\" require_client_grant\" },\" client\" :{\" policy\" :\" deny_all\" }}'" ,
76+ }
7177)
7278
7379func apisCmd (cli * cli ) * cobra.Command {
@@ -214,12 +220,13 @@ func showAPICmd(cli *cli) *cobra.Command {
214220
215221func createAPICmd (cli * cli ) * cobra.Command {
216222 var inputs struct {
217- Name string
218- Identifier string
219- Scopes []string
220- TokenLifetime int
221- AllowOfflineAccess bool
222- SigningAlgorithm string
223+ Name string
224+ Identifier string
225+ Scopes []string
226+ TokenLifetime int
227+ AllowOfflineAccess bool
228+ SigningAlgorithm string
229+ SubjectTypeAuthorization string
223230 }
224231
225232 cmd := & cobra.Command {
@@ -238,7 +245,8 @@ func createAPICmd(cli *cli) *cobra.Command {
238245 auth0 apis create --name myapi --identifier http://my-api --token-lifetime 6100 --offline-access=false --scopes "letter:write,letter:read"
239246 auth0 apis create --name myapi --identifier http://my-api --token-lifetime 6100 --offline-access=false --scopes "letter:write,letter:read" --signing-alg "RS256"
240247 auth0 apis create -n myapi -i http://my-api -t 6100 -o false -s "letter:write,letter:read" --signing-alg "RS256" --json
241- auth0 apis create -n myapi -i http://my-api -t 6100 -o false -s "letter:write,letter:read" --signing-alg "RS256" --json-compact` ,
248+ auth0 apis create -n myapi -i http://my-api -t 6100 -o false -s "letter:write,letter:read" --signing-alg "RS256" --json-compact
249+ auth0 apis create --name myapi --identifier http://my-api --subject-type-authorization '{"user":{"policy":"allow_all"},"client":{"policy":"deny_all"}}'` ,
242250 RunE : func (cmd * cobra.Command , args []string ) error {
243251 if err := apiName .Ask (cmd , & inputs .Name , nil ); err != nil {
244252 return err
@@ -265,6 +273,10 @@ func createAPICmd(cli *cli) *cobra.Command {
265273 return err
266274 }
267275
276+ if err := apiSubjectTypeAuthorization .Ask (cmd , & inputs .SubjectTypeAuthorization , nil ); err != nil {
277+ return err
278+ }
279+
268280 api := & management.ResourceServer {
269281 Name : & inputs .Name ,
270282 Identifier : & inputs .Identifier ,
@@ -283,6 +295,14 @@ func createAPICmd(cli *cli) *cobra.Command {
283295 api .TokenLifetime = auth0 .Int (inputs .TokenLifetime )
284296 }
285297
298+ if inputs .SubjectTypeAuthorization != "{}" {
299+ var subjectTypeAuth management.ResourceServerSubjectTypeAuthorization
300+ if err := json .Unmarshal ([]byte (inputs .SubjectTypeAuthorization ), & subjectTypeAuth ); err != nil {
301+ return fmt .Errorf ("invalid JSON for subject-type-authorization: %w" , err )
302+ }
303+ api .SubjectTypeAuthorization = & subjectTypeAuth
304+ }
305+
286306 if err := ansi .Waiting (func () error {
287307 return cli .api .ResourceServer .Create (cmd .Context (), api )
288308 }); err != nil {
@@ -308,18 +328,20 @@ func createAPICmd(cli *cli) *cobra.Command {
308328 apiOfflineAccess .RegisterBool (cmd , & inputs .AllowOfflineAccess , false )
309329 apiTokenLifetime .RegisterInt (cmd , & inputs .TokenLifetime , 0 )
310330 apiSigningAlgorithm .RegisterString (cmd , & inputs .SigningAlgorithm , "RS256" )
331+ apiSubjectTypeAuthorization .RegisterString (cmd , & inputs .SubjectTypeAuthorization , "{}" )
311332
312333 return cmd
313334}
314335
315336func updateAPICmd (cli * cli ) * cobra.Command {
316337 var inputs struct {
317- ID string
318- Name string
319- Scopes []string
320- TokenLifetime int
321- AllowOfflineAccess bool
322- SigningAlgorithm string
338+ ID string
339+ Name string
340+ Scopes []string
341+ TokenLifetime int
342+ AllowOfflineAccess bool
343+ SigningAlgorithm string
344+ SubjectTypeAuthorization string
323345 }
324346
325347 cmd := & cobra.Command {
@@ -337,7 +359,8 @@ func updateAPICmd(cli *cli) *cobra.Command {
337359 auth0 apis update <api-id|api-audience> --name myapi --token-lifetime 6100 --offline-access=false
338360 auth0 apis update <api-id|api-audience> --name myapi --token-lifetime 6100 --offline-access=false --scopes "letter:write,letter:read" --signing-alg "RS256"
339361 auth0 apis update <api-id|api-audience> -n myapi -t 6100 -o false -s "letter:write,letter:read" --signing-alg "RS256" --json
340- auth0 apis update <api-id|api-audience> -n myapi -t 6100 -o false -s "letter:write,letter:read" --signing-alg "RS256" --json-compact` ,
362+ auth0 apis update <api-id|api-audience> -n myapi -t 6100 -o false -s "letter:write,letter:read" --signing-alg "RS256" --json-compact
363+ auth0 apis update <api-id|api-audience> --subject-type-authorization '{"user":{"policy":"require_client_grant"},"client":{"policy":"deny_all"}}'` ,
341364 RunE : func (cmd * cobra.Command , args []string ) error {
342365 if len (args ) == 0 {
343366 if err := apiID .Pick (cmd , & inputs .ID , cli .apiPickerOptions ); err != nil {
@@ -380,6 +403,18 @@ func updateAPICmd(cli *cli) *cobra.Command {
380403 return err
381404 }
382405
406+ // Current subject type authorization value for display.
407+ var currentSubjectTypeJSON string
408+ if current .SubjectTypeAuthorization != nil {
409+ if jsonBytes , err := json .Marshal (current .SubjectTypeAuthorization ); err == nil {
410+ currentSubjectTypeJSON = string (jsonBytes )
411+ }
412+ }
413+
414+ if err := apiSubjectTypeAuthorization .AskU (cmd , & inputs .SubjectTypeAuthorization , & currentSubjectTypeJSON ); err != nil {
415+ return err
416+ }
417+
383418 api := & management.ResourceServer {
384419 AllowOfflineAccess : & inputs .AllowOfflineAccess ,
385420 }
@@ -404,6 +439,15 @@ func updateAPICmd(cli *cli) *cobra.Command {
404439 api .SigningAlgorithm = & inputs .SigningAlgorithm
405440 }
406441
442+ api .SubjectTypeAuthorization = current .SubjectTypeAuthorization
443+ if inputs .SubjectTypeAuthorization != "{}" {
444+ var subjectTypeAuth management.ResourceServerSubjectTypeAuthorization
445+ if err := json .Unmarshal ([]byte (inputs .SubjectTypeAuthorization ), & subjectTypeAuth ); err != nil {
446+ return fmt .Errorf ("invalid JSON for subject-type-authorization: %w" , err )
447+ }
448+ api .SubjectTypeAuthorization = & subjectTypeAuth
449+ }
450+
407451 if err := ansi .Waiting (func () error {
408452 return cli .api .ResourceServer .Update (cmd .Context (), current .GetID (), api )
409453 }); err != nil {
@@ -423,6 +467,7 @@ func updateAPICmd(cli *cli) *cobra.Command {
423467 apiOfflineAccess .RegisterBoolU (cmd , & inputs .AllowOfflineAccess , false )
424468 apiTokenLifetime .RegisterIntU (cmd , & inputs .TokenLifetime , 0 )
425469 apiSigningAlgorithm .RegisterStringU (cmd , & inputs .SigningAlgorithm , "RS256" )
470+ apiSubjectTypeAuthorization .RegisterStringU (cmd , & inputs .SubjectTypeAuthorization , "{}" )
426471
427472 return cmd
428473}
0 commit comments