@@ -3,21 +3,18 @@ package server
3
3
import (
4
4
"context"
5
5
"database/sql"
6
- "encoding/json"
7
- "net/http"
8
6
"strconv"
9
7
"time"
10
8
11
9
"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"
13
12
"github.com/pkg/errors"
14
13
"golang.org/x/crypto/bcrypt"
15
- "google.golang.org/grpc/status"
16
14
17
15
api_pb "github.com/ProgrammingLab/prolab-accounts/api"
18
16
type_pb "github.com/ProgrammingLab/prolab-accounts/api/type"
19
17
"github.com/ProgrammingLab/prolab-accounts/app/di"
20
- "github.com/ProgrammingLab/prolab-accounts/app/util"
21
18
)
22
19
23
20
// OAuthServiceServer is a composite interface of api_pb.OAuthServiceServer and grapiserver.Server.
@@ -42,26 +39,28 @@ type oAuthServiceServerImpl struct {
42
39
func (s * oAuthServiceServerImpl ) StartOAuthLogin (ctx context.Context , req * api_pb.StartOAuthLoginRequest ) (* api_pb.StartOAuthLoginResponse , error ) {
43
40
cli := s .HydraClient (ctx )
44
41
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 )
46
47
if err != nil {
47
48
return nil , errors .WithStack (err )
48
49
}
49
- if err := hydraError (resp ); err != nil {
50
- return nil , err
51
- }
52
50
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 )
55
57
if err != nil {
56
58
return nil , errors .WithStack (err )
57
59
}
58
- if err := hydraError (resp ); err != nil {
59
- return nil , err
60
- }
61
60
62
61
return & api_pb.StartOAuthLoginResponse {
63
62
Skip : true ,
64
- RedirectUrl : res .RedirectTo ,
63
+ RedirectUrl : res .Payload . RedirectTo ,
65
64
}, nil
66
65
}
67
66
@@ -81,130 +80,126 @@ func (s *oAuthServiceServerImpl) OAuthLogin(ctx context.Context, req *api_pb.OAu
81
80
}
82
81
83
82
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 )
90
94
if err != nil {
91
95
return nil , err
92
96
}
93
- if err := hydraError (resp ); err != nil {
94
- return nil , err
95
- }
96
97
97
98
return & api_pb.OAuthLoginResponse {
98
- RedirectUrl : res .RedirectTo ,
99
+ RedirectUrl : res .Payload . RedirectTo ,
99
100
}, nil
100
101
}
101
102
102
103
func (s * oAuthServiceServerImpl ) StartOAuthConsent (ctx context.Context , req * api_pb.StartOAuthConsentRequest ) (* api_pb.StartOAuthConsentResponse , error ) {
103
104
cli := s .HydraClient (ctx )
104
105
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 ,
108
109
}
109
- if err := hydraError (resp ); err != nil {
110
+ res , err := cli .Admin .GetConsentRequest (params )
111
+ if err != nil {
110
112
return nil , err
111
113
}
112
114
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 ,
117
119
}
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 ,
121
124
}
122
- if err := hydraError (resp ); err != nil {
125
+ res , err := cli .Admin .AcceptConsentRequest (params )
126
+ if err != nil {
123
127
return nil , err
124
128
}
125
129
126
130
return & api_pb.StartOAuthConsentResponse {
127
131
Skip : true ,
128
- RedirectUrl : res .RedirectTo ,
132
+ RedirectUrl : res .Payload . RedirectTo ,
129
133
}, nil
130
134
}
131
135
132
136
return & api_pb.StartOAuthConsentResponse {
133
137
Skip : false ,
134
- RequestedScopes : res .RequestedScope ,
135
- Client : clientToResponse (res .Client ),
138
+ RequestedScopes : res .Payload . RequestedScope ,
139
+ Client : clientToResponse (res .Payload . Client ),
136
140
}, nil
137
141
}
138
142
139
143
func (s * oAuthServiceServerImpl ) OAuthConsent (ctx context.Context , req * api_pb.OAuthConsentRequest ) (* api_pb.OAuthConsentResponse , error ) {
140
144
challenge := req .GetConsentChallenge ()
141
145
cli := s .HydraClient (ctx )
142
146
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 ,
146
150
}
147
- if err := hydraError (resp ); err != nil {
151
+ cons , err := cli .Admin .GetConsentRequest (params )
152
+ if err != nil {
148
153
return nil , err
149
154
}
150
155
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 ()),
156
161
}
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 ,
160
166
}
161
- if err := hydraError (resp ); err != nil {
167
+ res , err := cli .Admin .AcceptConsentRequest (acParams )
168
+ if err != nil {
162
169
return nil , err
163
170
}
164
171
165
172
return & api_pb.OAuthConsentResponse {
166
- RedirectUrl : res .RedirectTo ,
173
+ RedirectUrl : res .Payload . RedirectTo ,
167
174
}, nil
168
175
}
169
176
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" ,
173
180
}
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 ,
177
185
}
178
- if err := hydraError (resp ); err != nil {
186
+ res , err := cli .Admin .RejectConsentRequest (params )
187
+ if err != nil {
179
188
return nil , err
180
189
}
181
190
182
191
return & api_pb.OAuthConsentResponse {
183
- RedirectUrl : res .RedirectTo ,
192
+ RedirectUrl : res .Payload . RedirectTo ,
184
193
}, nil
185
194
}
186
195
187
- func clientToResponse (cli swagger. OAuth2Client ) * type_pb.Client {
196
+ func clientToResponse (cli * models. Client ) * type_pb.Client {
188
197
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 ,
192
201
Contacts : cli .Contacts ,
193
- LogoUri : cli .LogoUri ,
202
+ LogoUri : cli .LogoURI ,
194
203
Owner : cli .Owner ,
195
204
}
196
205
}
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
- }
0 commit comments