MCPcopy Create free account
hub / github.com/pydio/cells / CreateAuthCode

Method CreateAuthCode

idm/oauth/grpc/handler.go:343–459  ·  view source on GitHub ↗
(ctx context.Context, in *pauth.CreateAuthCodeRequest)

Source from the content-addressed store, hash-verified

341}
342
343func (h *Handler) CreateAuthCode(ctx context.Context, in *pauth.CreateAuthCodeRequest) (*pauth.CreateAuthCodeResponse, error) {
344 reg, err := manager.Resolve[oauth.Registry](ctx)
345 if err != nil {
346 return nil, err
347 }
348
349 host, _ := middleware.HttpMetaFromGrpcContext(ctx, keys.HttpMetaHost)
350
351 values := url.Values{}
352 values.Set("client_id", in.GetClientID())
353 values.Set("redirect_uri", in.GetRedirectURI())
354 values.Set("response_type", "code")
355 values.Set("consent_verifier", in.GetConsent().GetChallenge())
356 values.Set("state", uuid.New())
357 if in.GetCodeChallenge() != "" {
358 values.Set("code_challenge", in.GetCodeChallenge())
359 values.Set("code_challenge_method", in.GetCodeChallengeMethod())
360 }
361
362 req, err := http.NewRequestWithContext(ctx, "POST", "http://"+host, strings.NewReader(values.Encode()))
363 if err != nil {
364 return nil, err
365 }
366
367 // Replicate Post values to URL Query
368 query := req.URL.Query()
369 for k, v := range values {
370 query[k] = v
371 }
372 req.URL.RawQuery = query.Encode()
373
374 req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
375
376 ar, err := reg.OAuth2Provider().NewAuthorizeRequest(ctx, req)
377 if err != nil {
378 return nil, errors.WithMessage(err, "while trying to create authorize request")
379 }
380
381 cookieStore, err := reg.CookieStore(ctx)
382 if err != nil {
383 return nil, err
384 }
385
386 cl := ar.GetClient().(*client.Client)
387 clientSpecificCookieNameConsentCSRF := fmt.Sprintf("%s_%s", reg.Config().CookieNameConsentCSRF(ctx), cl.CookieSuffix())
388
389 cookieSession, err := cookieStore.Get(req, clientSpecificCookieNameConsentCSRF)
390 if err != nil {
391 return nil, err
392 }
393 cookieSession.Values["csrf"] = in.GetConsent().GetCSRF()
394
395 session, f, err := reg.ConsentStrategy().HandleOAuth2AuthorizationRequest(ctx, http.ResponseWriter(nil), req, ar)
396 if errors.Is(err, consent.ErrAbortOAuth2Request) {
397 // do nothing
398 return &pauth.CreateAuthCodeResponse{}, nil
399 } else if err != nil {
400 return nil, errors.WithMessage(err, "while trying to authorize request")

Callers 1

loginToCodeMethod · 0.95

Calls 15

HttpMetaFromGrpcContextFunction · 0.92
NewFunction · 0.92
GetRedirectURIMethod · 0.80
GetCodeChallengeMethod · 0.80
OAuth2ProviderMethod · 0.80
CookieStoreMethod · 0.80
GetClientMethod · 0.80
GetCSRFMethod · 0.80
ConsentStrategyMethod · 0.80
OpenIDJWTStrategyMethod · 0.80

Tested by

no test coverage detected