Skip to content

Commit

Permalink
Implement new SDK pipeline (interim)
Browse files Browse the repository at this point in the history
This is an interim commit that got pushed to master by the CI on accident.
  • Loading branch information
aeneasr committed Jan 7, 2020
1 parent 4293f5f commit c499e52
Show file tree
Hide file tree
Showing 130 changed files with 1,053 additions and 1,232 deletions.
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ version: 2.1

orbs:
changelog: ory/changelog@0.0.3
sdk: ory/sdk@0.1.4
sdk: ory/sdk@0.1.6

jobs:
format:
Expand Down
10 changes: 6 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ SHELL=/bin/bash -o pipefail
.PHONY: tools
tools:
npm i
go install github.com/ory/go-acc github.com/ory/x/tools/listx github.com/go-swagger/go-swagger/cmd/swagger github.com/go-bindata/go-bindata/go-bindata github.com/sqs/goreturns
go install github.com/ory/go-acc github.com/ory/x/tools/listx github.com/go-swagger/go-swagger/cmd/swagger github.com/go-bindata/go-bindata/go-bindata github.com/sqs/goreturns github.com/ory/sdk/swagutil

# Runs full test suite including tests where databases are enabled
.PHONY: test
Expand Down Expand Up @@ -87,10 +87,12 @@ gen: mocks sqlbin sdk
# Generates the SDKs
.PHONY: sdk
sdk:
$$(go env GOPATH)/bin/swagger generate spec -m -o ./docs/api.swagger.json -x sdk
$$(go env GOPATH)/bin/swagger generate spec -m -o ./docs/api.swagger.json -x internal/httpclient
$$(go env GOPATH)/bin/swagutil sanitize ./docs/api.swagger.json
$$(go env GOPATH)/bin/swagger validate ./docs/api.swagger.json
rm -rf ./sdk/go/hydra
$$(go env GOPATH)/bin/swagger generate client -f ./docs/api.swagger.json -t sdk/go/hydra -A Ory_Hydra
rm -rf internal/httpclient
mkdir -p internal/httpclient
$$(go env GOPATH)/bin/swagger generate client -f ./docs/api.swagger.json -t internal/httpclient -A Ory_Hydra
make format


Expand Down
25 changes: 25 additions & 0 deletions UPGRADE.md
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,31 @@ Do you want the latest features and patches without work and hassle? Are you loo
secure deployment with zero effort? We can run it for you! If you're interested,
[contact us now](mailto:hi@ory.sh)!

## 1.2.0

This release focuses on a rework of the SDK pipeline. First of all, we have introduced new SDKs for all popular programming
languages and published them on their respective package repositories:

- [Python](https://pypi.org/project/ory-hydra-client/)
- [PHP](https://packagist.org/packages/ory/hydra-client)
- [Go](https://github.com/ory/hydra-client-go)
- [NodeJS](https://www.npmjs.com/package/@oryd/hydra-client) (with TypeScript)
- [Java](https://search.maven.org/artifact/sh.ory.hydra/hydra-client)
- [Ruby](https://rubygems.org/gems/ory-hydra-client)

The SDKs hosted in this repository (under ./sdk/...) have been completely removed. Please use only the SDKs from the
above sources from now on as it will also remove several issues that were caused by the previous SDK pipeline.

Unfortunately, there were breaking changes introduced by the new SDK generation:

- Several structs and fields have been renamed in the Go SDK. However, nothing else changed so upgrading should be a matter of
half an hour if you made extensive use of the SDK, or several minutes if just one or two methods are being used.
- All other SDKs changed to `openapi-generator`, which is a better maintained generator that creates
better code than the one previously used. This manifests in TypeScript definitions for the NodeJS SDK and
several other goodies. We do not have a proper migration path for those, unfortunately.

If you have issues with upgrading the SDK, please let us know in an issue on this repository!

## 1.1.0

Several indices have been added to the SQL Migrations. There are no backwards incompatible changes in this release
Expand Down
49 changes: 25 additions & 24 deletions client/sdk_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,13 @@ import (

"github.com/go-openapi/strfmt"

"github.com/ory/hydra/sdk/go/hydra/client/admin"
"github.com/ory/hydra/sdk/go/hydra/models"
"github.com/ory/hydra/x"
"github.com/ory/x/pointerx"
"github.com/ory/x/urlx"

"github.com/ory/hydra/internal/httpclient/client/admin"
"github.com/ory/hydra/internal/httpclient/models"
"github.com/ory/hydra/x"

"github.com/ory/viper"

"github.com/ory/hydra/driver/configuration"
Expand All @@ -44,30 +45,30 @@ import (
"github.com/ory/hydra/internal"

"github.com/ory/hydra/client"
hydra "github.com/ory/hydra/sdk/go/hydra/client"
hydra "github.com/ory/hydra/internal/httpclient/client"
)

func createTestClient(prefix string) *models.Client {
return &models.Client{
func createTestClient(prefix string) *models.OAuth2Client {
return &models.OAuth2Client{
ClientID: "1234",
Name: prefix + "name",
Secret: prefix + "secret",
ClientName: prefix + "name",
ClientSecret: prefix + "secret",
ClientURI: prefix + "uri",
Contacts: []string{prefix + "peter", prefix + "pan"},
GrantTypes: []string{prefix + "client_credentials", prefix + "authorize_code"},
LogoURI: prefix + "logo",
Owner: prefix + "an-owner",
PolicyURI: prefix + "policy-uri",
Scope: prefix + "foo bar baz",
TermsOfServiceURI: prefix + "tos-uri",
TosURI: prefix + "tos-uri",
ResponseTypes: []string{prefix + "id_token", prefix + "code"},
RedirectURIs: []string{"https://" + prefix + "redirect-url", "https://" + prefix + "redirect-uri"},
SecretExpiresAt: 0,
RedirectUris: []string{"https://" + prefix + "redirect-url", "https://" + prefix + "redirect-uri"},
ClientSecretExpiresAt: 0,
TokenEndpointAuthMethod: "client_secret_basic",
UserinfoSignedResponseAlg: "none",
SubjectType: "public",
Metadata: map[string]interface{}{"foo": "bar"},
//SectorIdentifierUri: "https://sector.com/foo",
// SectorIdentifierUri: "https://sector.com/foo",
}
}

Expand All @@ -85,7 +86,7 @@ func TestClientSDK(t *testing.T) {
c := hydra.NewHTTPClientWithConfig(nil, &hydra.TransportConfig{Schemes: []string{"http"}, Host: urlx.ParseOrPanic(server.URL).Host})

t.Run("case=client default scopes are set", func(t *testing.T) {
result, err := c.Admin.CreateOAuth2Client(admin.NewCreateOAuth2ClientParams().WithBody(&models.Client{
result, err := c.Admin.CreateOAuth2Client(admin.NewCreateOAuth2ClientParams().WithBody(&models.OAuth2Client{
ClientID: "scoped",
}))
require.NoError(t, err)
Expand All @@ -109,10 +110,10 @@ func TestClientSDK(t *testing.T) {
assert.NotEmpty(t, result.Payload.CreatedAt)
result.Payload.CreatedAt = strfmt.DateTime{}
assert.EqualValues(t, compareClient, result.Payload)
assert.EqualValues(t, "bar", result.Payload.Metadata["foo"])
assert.EqualValues(t, "bar", result.Payload.Metadata.(map[string]interface{})["foo"])

// secret is not returned on GetOAuth2Client
compareClient.Secret = ""
compareClient.ClientSecret = ""
gresult, err := c.Admin.GetOAuth2Client(admin.NewGetOAuth2ClientParams().WithID(createClient.ClientID))
require.NoError(t, err)
assert.NotEmpty(t, gresult.Payload.UpdatedAt)
Expand All @@ -132,7 +133,7 @@ func TestClientSDK(t *testing.T) {
assert.EqualValues(t, compareClient, results.Payload[0])

// SecretExpiresAt gets overwritten with 0 on Update
compareClient.Secret = createClient.Secret
compareClient.ClientSecret = createClient.ClientSecret
uresult, err := c.Admin.UpdateOAuth2Client(admin.NewUpdateOAuth2ClientParams().WithID(createClient.ClientID).WithBody(createClient))
require.NoError(t, err)
assert.NotEmpty(t, uresult.Payload.UpdatedAt)
Expand All @@ -149,7 +150,7 @@ func TestClientSDK(t *testing.T) {

// again, test if secret is not returned on Get
compareClient = updateClient
compareClient.Secret = ""
compareClient.ClientSecret = ""
gresult, err = c.Admin.GetOAuth2Client(admin.NewGetOAuth2ClientParams().WithID(updateClient.ClientID))
require.NoError(t, err)
assert.NotEmpty(t, gresult.Payload.UpdatedAt)
Expand All @@ -165,33 +166,33 @@ func TestClientSDK(t *testing.T) {
})

t.Run("case=public client is transmitted without secret", func(t *testing.T) {
result, err := c.Admin.CreateOAuth2Client(admin.NewCreateOAuth2ClientParams().WithBody(&models.Client{
result, err := c.Admin.CreateOAuth2Client(admin.NewCreateOAuth2ClientParams().WithBody(&models.OAuth2Client{
TokenEndpointAuthMethod: "none",
}))
require.NoError(t, err)

assert.Equal(t, "", result.Payload.Secret)
assert.Equal(t, "", result.Payload.ClientSecret)

result, err = c.Admin.CreateOAuth2Client(admin.NewCreateOAuth2ClientParams().WithBody(createTestClient("")))
require.NoError(t, err)

assert.Equal(t, "secret", result.Payload.Secret)
assert.Equal(t, "secret", result.Payload.ClientSecret)
})

t.Run("case=id should be set properly", func(t *testing.T) {
for k, tc := range []struct {
client *models.Client
client *models.OAuth2Client
expectID string
}{
{
client: &models.Client{},
client: &models.OAuth2Client{},
},
{
client: &models.Client{ClientID: "set-properly-1"},
client: &models.OAuth2Client{ClientID: "set-properly-1"},
expectID: "set-properly-1",
},
{
client: &models.Client{ClientID: "set-properly-2"},
client: &models.OAuth2Client{ClientID: "set-properly-2"},
expectID: "set-properly-2",
},
} {
Expand Down
40 changes: 20 additions & 20 deletions cmd/cli/handler_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ import (

"github.com/spf13/cobra"

"github.com/ory/hydra/sdk/go/hydra/client/admin"
"github.com/ory/hydra/sdk/go/hydra/models"
"github.com/ory/hydra/internal/httpclient/client/admin"
"github.com/ory/hydra/internal/httpclient/models"
"github.com/ory/hydra/x"
"github.com/ory/x/cmdx"
"github.com/ory/x/flagx"
Expand All @@ -53,28 +53,28 @@ func (h *ClientHandler) ImportClients(cmd *cobra.Command, args []string) {
reader, err := os.Open(path)
cmdx.Must(err, "Could not open file %s: %s", path, err)

var c models.Client
var c models.OAuth2Client
err = json.NewDecoder(reader).Decode(&c)
cmdx.Must(err, "Could not parse JSON from file %s: %s", path, err)

response, err := m.Admin.CreateOAuth2Client(admin.NewCreateOAuth2ClientParams().WithBody(&c))
cmdx.Must(err, "The request failed with the following error message:\n%s", formatSwaggerError(err))
result := response.Payload

if c.Secret == "" {
if c.ClientSecret == "" {
if encryptSecret {
enc, err := ek.Encrypt([]byte(result.Secret))
enc, err := ek.Encrypt([]byte(result.ClientSecret))
if err == nil {
fmt.Printf("Imported OAuth 2.0 Client %s from: %s\n", result.ClientID, path)
fmt.Printf("OAuth 2.0 Encrypted Client Secret: %s\n\n", enc.Base64Encode())
continue
}

fmt.Printf("Imported OAuth 2.0 Client %s:%s from: %s\n", result.ClientID, result.Secret, path)
fmt.Printf("Imported OAuth 2.0 Client %s:%s from: %s\n", result.ClientID, result.ClientSecret, path)
cmdx.Must(err, "Failed to encrypt client secret: %s", err)
}

fmt.Printf("Imported OAuth 2.0 Client %s:%s from: %s\n", result.ClientID, result.Secret, path)
fmt.Printf("Imported OAuth 2.0 Client %s:%s from: %s\n", result.ClientID, result.ClientSecret, path)
} else {
fmt.Printf("Imported OAuth 2.0 Client %s from: %s\n", result.ClientID, path)
}
Expand All @@ -101,37 +101,37 @@ func (h *ClientHandler) CreateClient(cmd *cobra.Command, args []string) {
ek, encryptSecret, err := newEncryptionKey(cmd, nil)
cmdx.Must(err, "Failed to load encryption key: %s", err)

cc := models.Client{
cc := models.OAuth2Client{
ClientID: flagx.MustGetString(cmd, "id"),
Secret: secret,
ClientSecret: secret,
ResponseTypes: flagx.MustGetStringSlice(cmd, "response-types"),
Scope: strings.Join(flagx.MustGetStringSlice(cmd, "scope"), " "),
GrantTypes: flagx.MustGetStringSlice(cmd, "grant-types"),
RedirectURIs: flagx.MustGetStringSlice(cmd, "callbacks"),
Name: flagx.MustGetString(cmd, "name"),
RedirectUris: flagx.MustGetStringSlice(cmd, "callbacks"),
ClientName: flagx.MustGetString(cmd, "name"),
TokenEndpointAuthMethod: flagx.MustGetString(cmd, "token-endpoint-auth-method"),
JSONWebKeysURI: flagx.MustGetString(cmd, "jwks-uri"),
TermsOfServiceURI: flagx.MustGetString(cmd, "tos-uri"),
JwksURI: flagx.MustGetString(cmd, "jwks-uri"),
TosURI: flagx.MustGetString(cmd, "tos-uri"),
PolicyURI: flagx.MustGetString(cmd, "policy-uri"),
LogoURI: flagx.MustGetString(cmd, "logo-uri"),
ClientURI: flagx.MustGetString(cmd, "client-uri"),
AllowedCORSOrigins: flagx.MustGetStringSlice(cmd, "allowed-cors-origins"),
AllowedCorsOrigins: flagx.MustGetStringSlice(cmd, "allowed-cors-origins"),
SubjectType: flagx.MustGetString(cmd, "subject-type"),
Audience: flagx.MustGetStringSlice(cmd, "audience"),
PostLogoutRedirectURIs: flagx.MustGetStringSlice(cmd, "post-logout-callbacks"),
PostLogoutRedirectUris: flagx.MustGetStringSlice(cmd, "post-logout-callbacks"),
}

response, err := m.Admin.CreateOAuth2Client(admin.NewCreateOAuth2ClientParams().WithBody(&cc))
cmdx.Must(err, "The request failed with the following error message:\n%s", formatSwaggerError(err))
result := response.Payload

fmt.Printf("OAuth 2.0 Client ID: %s\n", result.ClientID)
if result.Secret == "" {
if result.ClientSecret == "" {
fmt.Println("This OAuth 2.0 Client has no secret")
} else {
if echoSecret {
if encryptSecret {
enc, err := ek.Encrypt([]byte(result.Secret))
enc, err := ek.Encrypt([]byte(result.ClientSecret))
if err == nil {
fmt.Printf("OAuth 2.0 Encrypted Client Secret: %s\n", enc.Base64Encode())
return
Expand All @@ -142,7 +142,7 @@ func (h *ClientHandler) CreateClient(cmd *cobra.Command, args []string) {
defer cmdx.Must(err, "Failed to encrypt client secret: %s", err)
}

fmt.Printf("OAuth 2.0 Client Secret: %s\n", result.Secret)
fmt.Printf("OAuth 2.0 Client Secret: %s\n", result.ClientSecret)
}
}
}
Expand Down Expand Up @@ -199,10 +199,10 @@ func (h *ClientHandler) ListClients(cmd *cobra.Command, args []string) {
for i, cl := range cls {
data[i] = []string{
cl.ClientID,
cl.Name,
cl.ClientName,
strings.Join(cl.ResponseTypes, ","),
cl.Scope,
strings.Join(cl.RedirectURIs, "\n"),
strings.Join(cl.RedirectUris, "\n"),
strings.Join(cl.GrantTypes, ","),
cl.TokenEndpointAuthMethod,
}
Expand Down
2 changes: 1 addition & 1 deletion cmd/cli/handler_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import (

httptransport "github.com/go-openapi/runtime/client"

hydra "github.com/ory/hydra/sdk/go/hydra/client"
hydra "github.com/ory/hydra/internal/httpclient/client"
"github.com/ory/x/cmdx"
"github.com/ory/x/flagx"
)
Expand Down
2 changes: 1 addition & 1 deletion cmd/cli/handler_introspection.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (

"github.com/go-openapi/runtime"

"github.com/ory/hydra/sdk/go/hydra/client/admin"
"github.com/ory/hydra/internal/httpclient/client/admin"
"github.com/ory/x/pointerx"

"github.com/spf13/cobra"
Expand Down
12 changes: 6 additions & 6 deletions cmd/cli/handler_jwk.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,8 @@ import (
"io/ioutil"
"net/http"

"github.com/ory/hydra/sdk/go/hydra/client/admin"
"github.com/ory/hydra/sdk/go/hydra/models"
"github.com/ory/hydra/internal/httpclient/client/admin"
"github.com/ory/hydra/internal/httpclient/models"
"github.com/ory/x/pointerx"

"github.com/mendsley/gojwk"
Expand Down Expand Up @@ -57,10 +57,10 @@ func (h *JWKHandler) CreateKeys(cmd *cobra.Command, args []string) {
kid = args[1]
}

res, err := m.Admin.CreateJSONWebKeySet(admin.NewCreateJSONWebKeySetParams().WithSet(args[0]).WithBody(&models.CreateRequest{
Algorithm: pointerx.String(flagx.MustGetString(cmd, "alg")),
KeyID: pointerx.String(kid),
Use: pointerx.String(flagx.MustGetString(cmd, "use")),
res, err := m.Admin.CreateJSONWebKeySet(admin.NewCreateJSONWebKeySetParams().WithSet(args[0]).WithBody(&models.JSONWebKeySetGeneratorRequest{
Alg: pointerx.String(flagx.MustGetString(cmd, "alg")),
Kid: pointerx.String(kid),
Use: pointerx.String(flagx.MustGetString(cmd, "use")),
}))
cmdx.Must(err, "The request failed with the following error message:\n%s", formatSwaggerError(err))
fmt.Println(formatResponse(res.Payload))
Expand Down
6 changes: 3 additions & 3 deletions cmd/cli/handler_token.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ import (

"github.com/go-openapi/strfmt"

"github.com/ory/hydra/sdk/go/hydra/client/admin"
"github.com/ory/hydra/sdk/go/hydra/client/public"
"github.com/ory/hydra/sdk/go/hydra/models"
"github.com/ory/hydra/internal/httpclient/client/admin"
"github.com/ory/hydra/internal/httpclient/client/public"
"github.com/ory/hydra/internal/httpclient/models"

"github.com/spf13/cobra"

Expand Down
1 change: 1 addition & 0 deletions cmd/tools.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
_ "github.com/go-swagger/go-swagger/cmd/swagger"
_ "github.com/gobuffalo/packr/packr"
_ "github.com/golang/mock/mockgen"
_ "github.com/sdk/swagutil"
_ "github.com/sqs/goreturns"
_ "golang.org/x/tools/cmd/goimports"
_ "golang.org/x/tools/cmd/stringer"
Expand Down

0 comments on commit c499e52

Please sign in to comment.