Skip to content

Commit

Permalink
Add OpenAPI subcommand
Browse files Browse the repository at this point in the history
  • Loading branch information
SafeEval committed Jul 23, 2024
1 parent 2f8ca55 commit 844c550
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
37 changes: 37 additions & 0 deletions cmd/jwt-block/openapi.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package cmd

import (
"fmt"

"github.com/spf13/cobra"
"github.com/spf13/viper"

"github.com/divergentcodes/jwt-block/internal/core"
"github.com/divergentcodes/jwt-block/web"
)

var openapiCmd = &cobra.Command{
Use: "openapi",
Short: "Generate OpenAPI specs for jwt-block",
Long: "Generate OpenAPI specs for jwt-block",
Run: openapi,
}

func init() {
openapiCmd.PersistentFlags().String("format", "yaml", "A string flag with limited values (value1, value2)")
viper.BindPFlag("format", openapiCmd.PersistentFlags().Lookup("format"))

rootCmd.AddCommand(openapiCmd)
}

func openapi(cmd *cobra.Command, args []string) {
logger := core.GetLogger()

format := viper.GetString("format")
schema, err := web.GenerateOpenAPI(format)
if err != nil {
logger.Fatalw(err.Error())
}

fmt.Print(schema)
}
33 changes: 33 additions & 0 deletions web/openapi.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package web

import (
"fmt"

"github.com/swaggest/openapi-go/openapi3"
)

// Generate the OpenAPI spec for the service.
func GenerateOpenAPI(format string) (string, error) {
reflector := openapi3.Reflector{}

// Declare security scheme.
securityName := "bearer_token"
reflector.SpecEns().SetHTTPBearerTokenSecurity(securityName, "JWT", "Admin Access")

// Endpoints
blockGenerateOpenAPI(&reflector)

var schema []byte
var err error
if format == "json" {
schema, err = reflector.Spec.MarshalJSON()
} else if format == "yaml" {
schema, err = reflector.Spec.MarshalYAML()
} else {
return "", fmt.Errorf("invalid OpenAPI output format: %s", format)
}
if err != nil {
return "", err
}
return string(schema), nil
}

0 comments on commit 844c550

Please sign in to comment.