blob: e2d5c0efbb0cf999b44b9c616492b8d008bac36c [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_WEBID_FEDERATED_SDJWT_HANDLER_H_
#define CONTENT_BROWSER_WEBID_FEDERATED_SDJWT_HANDLER_H_
#include <string>
#include "base/functional/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "content/browser/webid/sd_jwt.h"
#include "crypto/keypair.h"
#include "services/data_decoder/public/cpp/data_decoder.h"
#include "third_party/blink/public/mojom/webid/federated_auth_request.mojom-forward.h"
#include "url/gurl.h"
namespace content {
class FederatedAuthRequestImpl;
class RenderFrameHost;
class FederatedSdJwtHandler {
public:
explicit FederatedSdJwtHandler(
const blink::mojom::IdentityProviderRequestOptionsPtr& provider,
RenderFrameHost& render_frame_host,
FederatedAuthRequestImpl* federated_auth_request_impl);
~FederatedSdJwtHandler();
std::string ComputeUrlEncodedTokenPostDataForIssuers(
const std::string& account_id);
void ProcessSdJwt(const std::string& token);
private:
sdjwt::Jwk GetPublicKey() const;
void OnDisclosureParsed(base::RepeatingClosure cb,
const std::string& json,
data_decoder::DataDecoder::ValueOrError result);
void OnSdJwtParsed(const sdjwt::Jwt& jwt);
// A list of disclosures that were parsed in the token response, when
// the token's format is "vc+sd-jwt".
std::vector<std::pair<std::string, content::sdjwt::JSONString>> disclosures_;
// A private key that is used to bind the token when the token "format" is
// "vc+sd-jwt".
std::optional<crypto::keypair::PrivateKey> private_key_;
std::optional<std::vector<std::string>> fields_;
std::string nonce_;
GURL config_url_;
raw_ptr<RenderFrameHost> render_frame_host_;
raw_ptr<FederatedAuthRequestImpl> federated_auth_request_impl_;
base::WeakPtrFactory<FederatedSdJwtHandler> weak_ptr_factory_{this};
};
} // namespace content
#endif // CONTENT_BROWSER_WEBID_FEDERATED_SDJWT_HANDLER_H_