25#include <winpr/string.h> 
   26#include <freerdp/log.h> 
   27#include <freerdp/utils/aad.h> 
   29#include "sdl_webview.hpp" 
   30#include "webview_impl.hpp" 
   32#define TAG CLIENT_TAG("SDL.webview") 
   34static std::string from_settings(
const rdpSettings* settings, FreeRDP_Settings_Keys_String 
id)
 
   45static std::string from_aad_wellknown(rdpContext* context, AAD_WELLKNOWN_VALUES which)
 
   47  auto val = freerdp_utils_aad_get_wellknown_string(context, which);
 
   51    WLog_WARN(TAG, 
"[wellknown] key %s is NULL", freerdp_utils_aad_wellknwon_value_name(which));
 
   57static BOOL sdl_webview_get_rdsaad_access_token(freerdp* instance, 
const char* scope,
 
   58                                                const char* req_cnf, 
char** token)
 
   60  WINPR_ASSERT(instance);
 
   62  WINPR_ASSERT(req_cnf);
 
   65  WINPR_UNUSED(instance);
 
   67  auto context = instance->context;
 
   68  WINPR_UNUSED(context);
 
   70  auto settings = context->settings;
 
   71  WINPR_ASSERT(settings);
 
   73  std::shared_ptr<char> request(freerdp_client_get_aad_url((rdpClientContext*)instance->context,
 
   74                                                           FREERDP_CLIENT_AAD_AUTH_REQUEST,
 
   77  const std::string title = 
"FreeRDP WebView - AAD access token";
 
   79  auto rc = webview_impl_run(title, request.get(), code);
 
   80  if (!rc || code.empty())
 
   83  std::shared_ptr<char> token_request(
 
   84      freerdp_client_get_aad_url((rdpClientContext*)instance->context,
 
   85                                 FREERDP_CLIENT_AAD_TOKEN_REQUEST, scope, code.c_str(), req_cnf),
 
   87  return client_common_get_access_token(instance, token_request.get(), token);
 
   90static BOOL sdl_webview_get_avd_access_token(freerdp* instance, 
char** token)
 
   93  WINPR_ASSERT(instance);
 
   94  WINPR_ASSERT(instance->context);
 
   96  std::shared_ptr<char> request(freerdp_client_get_aad_url((rdpClientContext*)instance->context,
 
   97                                                           FREERDP_CLIENT_AAD_AVD_AUTH_REQUEST),
 
  100  const std::string title = 
"FreeRDP WebView - AVD access token";
 
  102  auto rc = webview_impl_run(title, request.get(), code);
 
  103  if (!rc || code.empty())
 
  106  std::shared_ptr<char> token_request(
 
  107      freerdp_client_get_aad_url((rdpClientContext*)instance->context,
 
  108                                 FREERDP_CLIENT_AAD_AVD_TOKEN_REQUEST, code.c_str()),
 
  110  return client_common_get_access_token(instance, token_request.get(), token);
 
  113BOOL sdl_webview_get_access_token(freerdp* instance, AccessTokenType tokenType, 
char** token,
 
  116  WINPR_ASSERT(instance);
 
  120    case ACCESS_TOKEN_TYPE_AAD:
 
  125                 "ACCESS_TOKEN_TYPE_AAD expected 2 additional arguments, but got %" PRIuz
 
  132                  "ACCESS_TOKEN_TYPE_AAD expected 2 additional arguments, but got %" PRIuz
 
  137      const char* scope = va_arg(ap, 
const char*);
 
  138      const char* req_cnf = va_arg(ap, 
const char*);
 
  139      const BOOL rc = sdl_webview_get_rdsaad_access_token(instance, scope, req_cnf, token);
 
  143    case ACCESS_TOKEN_TYPE_AVD:
 
  146                  "ACCESS_TOKEN_TYPE_AVD expected 0 additional arguments, but got %" PRIuz
 
  149      return sdl_webview_get_avd_access_token(instance, token);
 
  151      WLog_ERR(TAG, 
"Unexpected value for AccessTokenType [%" PRIuz 
"], aborting", tokenType);
 
FREERDP_API const char * freerdp_settings_get_name_for_key(SSIZE_T key)
Returns the type name for a key.
 
FREERDP_API const char * freerdp_settings_get_string(const rdpSettings *settings, FreeRDP_Settings_Keys_String id)
Returns a immutable string settings value.