Skip to content
This repository was archived by the owner on Feb 4, 2021. It is now read-only.

Commit 6d3f05a

Browse files
authored
Merge pull request #171 from ProgrammingLab/gedorinku/new_hydra_sdk
Use new hydra sdk
2 parents 66f9940 + aa36fe5 commit 6d3f05a

File tree

4 files changed

+711
-100
lines changed

4 files changed

+711
-100
lines changed

app/di/client_component.go

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ package di
22

33
import (
44
"context"
5+
"net/url"
56

6-
hydra "github.com/ory/hydra-legacy-sdk"
7+
"github.com/ory/hydra/sdk/go/hydra/client"
78
"github.com/pkg/errors"
89

910
"github.com/ProgrammingLab/prolab-accounts/app/config"
@@ -13,7 +14,7 @@ import (
1314

1415
// ClientComponent is an interface of api clients
1516
type ClientComponent interface {
16-
HydraClient(ctx context.Context) *hydra.CodeGenSDK
17+
HydraClient(ctx context.Context) *client.OryHydra
1718
EmailSender(ctx context.Context) email.Sender
1819
}
1920

@@ -36,24 +37,28 @@ func NewClientComponent(cfg *config.Config) (ClientComponent, error) {
3637
}, nil
3738
}
3839

39-
func newHydraClient(cfg *config.Config) (*hydra.CodeGenSDK, error) {
40-
hc := &hydra.Configuration{
41-
AdminURL: cfg.HydraAdminURL,
42-
}
43-
cli, err := hydra.NewSDK(hc)
40+
func newHydraClient(cfg *config.Config) (*client.OryHydra, error) {
41+
adminURL, err := url.Parse(cfg.HydraAdminURL)
4442
if err != nil {
4543
return nil, errors.WithStack(err)
4644
}
45+
46+
cliCfg := &client.TransportConfig{
47+
Schemes: []string{adminURL.Scheme},
48+
Host: adminURL.Host,
49+
BasePath: adminURL.Path,
50+
}
51+
cli := client.NewHTTPClientWithConfig(nil, cliCfg)
4752
return cli, nil
4853
}
4954

5055
type clientComponentImpl struct {
5156
cfg *config.Config
52-
hydraCli *hydra.CodeGenSDK
57+
hydraCli *client.OryHydra
5358
emails *static.EmailAsset
5459
}
5560

56-
func (c *clientComponentImpl) HydraClient(ctx context.Context) *hydra.CodeGenSDK {
61+
func (c *clientComponentImpl) HydraClient(ctx context.Context) *client.OryHydra {
5762
return c.hydraCli
5863
}
5964

app/server/oauth_server.go

Lines changed: 76 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,18 @@ package server
33
import (
44
"context"
55
"database/sql"
6-
"encoding/json"
7-
"net/http"
86
"strconv"
97
"time"
108

119
"github.com/izumin5210/grapi/pkg/grapiserver"
12-
"github.com/ory/hydra-legacy-sdk/swagger"
10+
"github.com/ory/hydra/sdk/go/hydra/client/admin"
11+
"github.com/ory/hydra/sdk/go/hydra/models"
1312
"github.com/pkg/errors"
1413
"golang.org/x/crypto/bcrypt"
15-
"google.golang.org/grpc/status"
1614

1715
api_pb "github.com/ProgrammingLab/prolab-accounts/api"
1816
type_pb "github.com/ProgrammingLab/prolab-accounts/api/type"
1917
"github.com/ProgrammingLab/prolab-accounts/app/di"
20-
"github.com/ProgrammingLab/prolab-accounts/app/util"
2118
)
2219

2320
// OAuthServiceServer is a composite interface of api_pb.OAuthServiceServer and grapiserver.Server.
@@ -42,26 +39,28 @@ type oAuthServiceServerImpl struct {
4239
func (s *oAuthServiceServerImpl) StartOAuthLogin(ctx context.Context, req *api_pb.StartOAuthLoginRequest) (*api_pb.StartOAuthLoginResponse, error) {
4340
cli := s.HydraClient(ctx)
4441
challenge := req.GetLoginChallenge()
45-
res, resp, err := cli.GetLoginRequest(challenge)
42+
params := &admin.GetLoginRequestParams{
43+
Context: ctx,
44+
LoginChallenge: challenge,
45+
}
46+
res, err := cli.Admin.GetLoginRequest(params)
4647
if err != nil {
4748
return nil, errors.WithStack(err)
4849
}
49-
if err := hydraError(resp); err != nil {
50-
return nil, err
51-
}
5250

53-
if res.Skip {
54-
res, resp, err := cli.AcceptLoginRequest(challenge, swagger.AcceptLoginRequest{})
51+
if res.Payload.Skip {
52+
params := &admin.AcceptLoginRequestParams{
53+
Context: ctx,
54+
LoginChallenge: challenge,
55+
}
56+
res, err := cli.Admin.AcceptLoginRequest(params)
5557
if err != nil {
5658
return nil, errors.WithStack(err)
5759
}
58-
if err := hydraError(resp); err != nil {
59-
return nil, err
60-
}
6160

6261
return &api_pb.StartOAuthLoginResponse{
6362
Skip: true,
64-
RedirectUrl: res.RedirectTo,
63+
RedirectUrl: res.Payload.RedirectTo,
6564
}, nil
6665
}
6766

@@ -81,130 +80,126 @@ func (s *oAuthServiceServerImpl) OAuthLogin(ctx context.Context, req *api_pb.OAu
8180
}
8281

8382
cli := s.HydraClient(ctx)
84-
acReq := swagger.AcceptLoginRequest{
85-
Subject: strconv.FormatInt(int64(session.UserID), 10),
86-
Remember: req.Remember,
87-
RememberFor: int64(time.Hour.Seconds()),
88-
}
89-
res, resp, err := cli.AcceptLoginRequest(req.GetLoginChallenge(), acReq)
83+
sub := strconv.FormatInt(int64(session.UserID), 10)
84+
params := &admin.AcceptLoginRequestParams{
85+
Context: ctx,
86+
LoginChallenge: req.GetLoginChallenge(),
87+
Body: &models.HandledLoginRequest{
88+
Subject: &sub,
89+
Remember: req.Remember,
90+
RememberFor: int64(time.Hour.Seconds()),
91+
},
92+
}
93+
res, err := cli.Admin.AcceptLoginRequest(params)
9094
if err != nil {
9195
return nil, err
9296
}
93-
if err := hydraError(resp); err != nil {
94-
return nil, err
95-
}
9697

9798
return &api_pb.OAuthLoginResponse{
98-
RedirectUrl: res.RedirectTo,
99+
RedirectUrl: res.Payload.RedirectTo,
99100
}, nil
100101
}
101102

102103
func (s *oAuthServiceServerImpl) StartOAuthConsent(ctx context.Context, req *api_pb.StartOAuthConsentRequest) (*api_pb.StartOAuthConsentResponse, error) {
103104
cli := s.HydraClient(ctx)
104105
challenge := req.GetConsentChallenge()
105-
res, resp, err := cli.GetConsentRequest(challenge)
106-
if err != nil {
107-
return nil, err
106+
params := &admin.GetConsentRequestParams{
107+
Context: ctx,
108+
ConsentChallenge: challenge,
108109
}
109-
if err := hydraError(resp); err != nil {
110+
res, err := cli.Admin.GetConsentRequest(params)
111+
if err != nil {
110112
return nil, err
111113
}
112114

113-
if res.Skip {
114-
req := swagger.AcceptConsentRequest{
115-
GrantScope: res.RequestedScope,
116-
GrantAccessTokenAudience: res.RequestedAccessTokenAudience,
115+
if res.Payload.Skip {
116+
body := &models.HandledConsentRequest{
117+
GrantedScope: res.Payload.RequestedScope,
118+
GrantedAudience: res.Payload.RequestedAudience,
117119
}
118-
res, resp, err := cli.AcceptConsentRequest(challenge, req)
119-
if err != nil {
120-
return nil, err
120+
params := &admin.AcceptConsentRequestParams{
121+
Context: ctx,
122+
ConsentChallenge: challenge,
123+
Body: body,
121124
}
122-
if err := hydraError(resp); err != nil {
125+
res, err := cli.Admin.AcceptConsentRequest(params)
126+
if err != nil {
123127
return nil, err
124128
}
125129

126130
return &api_pb.StartOAuthConsentResponse{
127131
Skip: true,
128-
RedirectUrl: res.RedirectTo,
132+
RedirectUrl: res.Payload.RedirectTo,
129133
}, nil
130134
}
131135

132136
return &api_pb.StartOAuthConsentResponse{
133137
Skip: false,
134-
RequestedScopes: res.RequestedScope,
135-
Client: clientToResponse(res.Client),
138+
RequestedScopes: res.Payload.RequestedScope,
139+
Client: clientToResponse(res.Payload.Client),
136140
}, nil
137141
}
138142

139143
func (s *oAuthServiceServerImpl) OAuthConsent(ctx context.Context, req *api_pb.OAuthConsentRequest) (*api_pb.OAuthConsentResponse, error) {
140144
challenge := req.GetConsentChallenge()
141145
cli := s.HydraClient(ctx)
142146
if req.GetAccept() {
143-
cons, resp, err := cli.GetConsentRequest(challenge)
144-
if err != nil {
145-
return nil, err
147+
params := &admin.GetConsentRequestParams{
148+
Context: ctx,
149+
ConsentChallenge: challenge,
146150
}
147-
if err := hydraError(resp); err != nil {
151+
cons, err := cli.Admin.GetConsentRequest(params)
152+
if err != nil {
148153
return nil, err
149154
}
150155

151-
acReq := swagger.AcceptConsentRequest{
152-
GrantScope: req.GetGrantScopes(),
153-
GrantAccessTokenAudience: cons.RequestedAccessTokenAudience,
154-
Remember: req.GetRemember(),
155-
RememberFor: int64(time.Hour.Seconds()),
156+
body := &models.HandledConsentRequest{
157+
GrantedScope: req.GetGrantScopes(),
158+
GrantedAudience: cons.Payload.RequestedAudience,
159+
Remember: req.GetRemember(),
160+
RememberFor: int64(time.Hour.Seconds()),
156161
}
157-
res, resp, err := cli.AcceptConsentRequest(challenge, acReq)
158-
if err != nil {
159-
return nil, err
162+
acParams := &admin.AcceptConsentRequestParams{
163+
Context: ctx,
164+
ConsentChallenge: challenge,
165+
Body: body,
160166
}
161-
if err := hydraError(resp); err != nil {
167+
res, err := cli.Admin.AcceptConsentRequest(acParams)
168+
if err != nil {
162169
return nil, err
163170
}
164171

165172
return &api_pb.OAuthConsentResponse{
166-
RedirectUrl: res.RedirectTo,
173+
RedirectUrl: res.Payload.RedirectTo,
167174
}, nil
168175
}
169176

170-
rej := swagger.RejectRequest{
171-
Error_: "access_denied",
172-
ErrorDescription: "The resource owner denied the request",
177+
body := &models.RequestDeniedError{
178+
Name: "access_denied",
179+
Description: "The resource owner denied the request",
173180
}
174-
res, resp, err := cli.RejectConsentRequest(challenge, rej)
175-
if err != nil {
176-
return nil, err
181+
params := &admin.RejectConsentRequestParams{
182+
Context: ctx,
183+
Body: body,
184+
ConsentChallenge: challenge,
177185
}
178-
if err := hydraError(resp); err != nil {
186+
res, err := cli.Admin.RejectConsentRequest(params)
187+
if err != nil {
179188
return nil, err
180189
}
181190

182191
return &api_pb.OAuthConsentResponse{
183-
RedirectUrl: res.RedirectTo,
192+
RedirectUrl: res.Payload.RedirectTo,
184193
}, nil
185194
}
186195

187-
func clientToResponse(cli swagger.OAuth2Client) *type_pb.Client {
196+
func clientToResponse(cli *models.Client) *type_pb.Client {
188197
return &type_pb.Client{
189-
Id: cli.ClientId,
190-
Name: cli.ClientName,
191-
Uri: cli.ClientUri,
198+
Id: cli.ClientID,
199+
Name: cli.Name,
200+
Uri: cli.ClientURI,
192201
Contacts: cli.Contacts,
193-
LogoUri: cli.LogoUri,
202+
LogoUri: cli.LogoURI,
194203
Owner: cli.Owner,
195204
}
196205
}
197-
198-
func hydraError(resp *swagger.APIResponse) error {
199-
defer resp.Body.Close()
200-
if resp.StatusCode == http.StatusOK {
201-
return nil
202-
}
203-
204-
generic := &swagger.GenericError{}
205-
err := json.Unmarshal(resp.Payload, generic)
206-
if err != nil {
207-
return errors.WithStack(err)
208-
}
209-
return status.Error(util.CodeFromHTTPStatus(resp.StatusCode), generic.Error_)
210-
}

go.mod

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,17 @@ go 1.12
44

55
require (
66
github.com/PuerkitoBio/goquery v1.5.0 // indirect
7+
github.com/go-openapi/analysis v0.19.6 // indirect
8+
github.com/go-openapi/jsonreference v0.19.3 // indirect
9+
github.com/go-openapi/loads v0.19.4 // indirect
10+
github.com/go-openapi/runtime v0.19.7 // indirect
11+
github.com/go-openapi/spec v0.19.4 // indirect
12+
github.com/go-openapi/validate v0.19.4 // indirect
713
github.com/go-redis/redis v6.14.1+incompatible
814
github.com/gobuffalo/envy v1.7.0 // indirect
915
github.com/gobuffalo/packr/v2 v2.1.0
1016
github.com/gobwas/glob v0.2.3
11-
github.com/gofrs/uuid v3.2.0+incompatible // indirect
1217
github.com/gogo/protobuf v1.2.1
13-
github.com/golang/mock v1.3.1 // indirect
1418
github.com/golang/protobuf v1.3.2
1519
github.com/google/wire v0.3.0 // indirect
1620
github.com/grpc-ecosystem/grpc-gateway v1.9.6
@@ -20,35 +24,31 @@ require (
2024
github.com/jordan-wright/email v0.0.0-20180115032944-94ae17dedda2
2125
github.com/kat-co/vala v0.0.0-20140812221447-bfe9b50e828a
2226
github.com/kelseyhightower/envconfig v1.3.0
23-
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
2427
github.com/lib/pq v1.2.0
25-
github.com/magiconair/properties v1.8.1 // indirect
28+
github.com/mailru/easyjson v0.7.0 // indirect
2629
github.com/minio/minio-go v0.0.0-20190207005939-34f2b94c43ca
2730
github.com/mmcdole/gofeed v1.0.0-beta2
2831
github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf // indirect
2932
github.com/mwitkow/go-proto-validators v0.0.0-20190212092829-1f388280e944
30-
github.com/onsi/ginkgo v1.7.0 // indirect
31-
github.com/onsi/gomega v1.4.3 // indirect
33+
github.com/ory/hydra v1.0.8
3234
github.com/ory/hydra-legacy-sdk v0.0.0-20190409103449-1f564942be76
33-
github.com/pelletier/go-toml v1.4.0 // indirect
3435
github.com/pkg/errors v0.8.1
3536
github.com/rs/cors v1.6.0
3637
github.com/shurcooL/githubv4 v0.0.0-20190119021625-d9689b595017
3738
github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f // indirect
38-
github.com/spf13/jwalterweatherman v1.1.0 // indirect
3939
github.com/spf13/viper v1.4.0
4040
github.com/srvc/appctx v0.1.0
4141
github.com/volatiletech/inflect v0.0.0-20170731032912-e7201282ae8d // indirect
4242
github.com/volatiletech/null v8.0.0+incompatible
4343
github.com/volatiletech/sqlboiler v3.2.0+incompatible
44+
go.mongodb.org/mongo-driver v1.1.2 // indirect
4445
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586
4546
golang.org/x/image v0.0.0-20190802002840-cff245a6509b
46-
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297
47+
golang.org/x/net v0.0.0-20191028085509-fe3aa8a45271
4748
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
4849
golang.org/x/sync v0.0.0-20190423024810-112230192c58
4950
golang.org/x/sys v0.0.0-20191029155521-f43be2a4598c // indirect
5051
golang.org/x/tools v0.0.0-20191030062658-86caa796c7ab // indirect
51-
google.golang.org/appengine v1.6.1 // indirect
5252
google.golang.org/genproto v0.0.0-20190817000702-55e96fffbd48
5353
google.golang.org/grpc v1.23.0
5454
gopkg.in/DATA-DOG/go-sqlmock.v1 v1.3.0 // indirect

0 commit comments

Comments
 (0)