EAP-GTC challenge/response prompt now functional
This commit is contained in:
parent
27ae8baf3a
commit
a78901cb63
@ -367,11 +367,11 @@ void eap::peer_ttls::get_ui_context(
|
|||||||
auto s = static_cast<session*>(hSession);
|
auto s = static_cast<session*>(hSession);
|
||||||
|
|
||||||
// Get context data from method.
|
// Get context data from method.
|
||||||
sanitizing_blob context_data;
|
ui_context_ttls ctx(*this, s->m_cfg, s->m_cred);
|
||||||
s->m_method->get_ui_context(context_data);
|
s->m_method->get_ui_context(ctx.m_data);
|
||||||
|
|
||||||
// Pack data.
|
// Pack context data.
|
||||||
pack(context_data, ppUIContextData, pdwUIContextDataSize);
|
pack(ctx, ppUIContextData, pdwUIContextDataSize);
|
||||||
if (s->m_blob_ui_ctx)
|
if (s->m_blob_ui_ctx)
|
||||||
free_memory(s->m_blob_ui_ctx);
|
free_memory(s->m_blob_ui_ctx);
|
||||||
s->m_blob_ui_ctx = *ppUIContextData;
|
s->m_blob_ui_ctx = *ppUIContextData;
|
||||||
|
@ -389,13 +389,75 @@ void eap::peer_ttls_ui::invoke_interactive_ui(
|
|||||||
_Inout_ BYTE **ppDataFromInteractiveUI,
|
_Inout_ BYTE **ppDataFromInteractiveUI,
|
||||||
_Inout_ DWORD *pdwDataFromInteractiveUISize)
|
_Inout_ DWORD *pdwDataFromInteractiveUISize)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(pUIContextData);
|
// Unpack context data.
|
||||||
UNREFERENCED_PARAMETER(dwUIContextDataSize);
|
config_connection cfg(*this);
|
||||||
UNREFERENCED_PARAMETER(ppDataFromInteractiveUI);
|
credentials_connection cred(*this, cfg);
|
||||||
UNREFERENCED_PARAMETER(pdwDataFromInteractiveUISize);
|
ui_context_ttls ctx(*this, cfg, cred);
|
||||||
|
unpack(ctx, pUIContextData, dwUIContextDataSize);
|
||||||
|
|
||||||
InitCommonControls();
|
// Look-up the provider.
|
||||||
MessageBox(hwndParent, _T(PRODUCT_NAME_STR) _T(" interactive UI goes here!"), _T(PRODUCT_NAME_STR) _T(" Prompt"), MB_OK);
|
config_provider *cfg_prov;
|
||||||
|
config_method_ttls *cfg_method;
|
||||||
|
for (auto _cfg_prov = cfg.m_providers.begin(), cfg_prov_end = cfg.m_providers.end();; ++_cfg_prov) {
|
||||||
|
if (_cfg_prov != cfg_prov_end) {
|
||||||
|
if (cred.match(*_cfg_prov)) {
|
||||||
|
// Matching provider found.
|
||||||
|
if (_cfg_prov->m_methods.empty())
|
||||||
|
throw invalid_argument(string_printf(__FUNCTION__ " %ls provider has no methods.", _cfg_prov->get_id().c_str()));
|
||||||
|
cfg_prov = &*_cfg_prov;
|
||||||
|
cfg_method = dynamic_cast<config_method_ttls*>(_cfg_prov->m_methods.front().get());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
throw invalid_argument(string_printf(__FUNCTION__ " Credentials do not match to any provider within this connection configuration (provider: %ls).", cred.get_id().c_str()));
|
||||||
|
}
|
||||||
|
|
||||||
|
int result;
|
||||||
|
{
|
||||||
|
// Initialize application.
|
||||||
|
wxInitializerPeer init(m_instance);
|
||||||
|
|
||||||
|
{
|
||||||
|
// Create wxWidget-approved parent window.
|
||||||
|
wxWindow parent;
|
||||||
|
parent.SetHWND((WXHWND)(hwndParent ? hwndParent : GetForegroundWindow()));
|
||||||
|
parent.AdoptAttributesFromHWND();
|
||||||
|
wxTopLevelWindows.Append(&parent);
|
||||||
|
|
||||||
|
{
|
||||||
|
sanitizing_wstring
|
||||||
|
challenge(reinterpret_cast<sanitizing_wstring::const_pointer>(ctx.m_data.data()), ctx.m_data.size()/sizeof(sanitizing_wstring::value_type)),
|
||||||
|
response;
|
||||||
|
|
||||||
|
// Build dialog to prompt for response.
|
||||||
|
wxGTCResponseDialog dlg(*cfg_prov, &parent);
|
||||||
|
auto panel = new wxGTCResponsePanel(response, challenge.c_str(), &dlg);
|
||||||
|
dlg.AddContent(panel);
|
||||||
|
|
||||||
|
// Update dialog layout.
|
||||||
|
dlg.Layout();
|
||||||
|
dlg.GetSizer()->Fit(&dlg);
|
||||||
|
|
||||||
|
// Centre and display dialog.
|
||||||
|
dlg.Centre(wxBOTH);
|
||||||
|
if ((result = dlg.ShowModal()) == wxID_OK) {
|
||||||
|
// Save response.
|
||||||
|
ctx.m_data.assign(
|
||||||
|
reinterpret_cast<sanitizing_blob::const_pointer>(response.data() ),
|
||||||
|
reinterpret_cast<sanitizing_blob::const_pointer>(response.data() + response.length()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
wxTopLevelWindows.DeleteObject(&parent);
|
||||||
|
parent.SetHWND((WXHWND)NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result != wxID_OK)
|
||||||
|
throw win_runtime_error(ERROR_CANCELLED, __FUNCTION__ " Cancelled.");
|
||||||
|
|
||||||
|
// Pack output data.
|
||||||
|
pack(ctx.m_data, ppDataFromInteractiveUI, pdwDataFromInteractiveUISize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include "../../GTC_UI/include/GTC_UI.h"
|
#include "../../GTC_UI/include/GTC_UI.h"
|
||||||
|
|
||||||
#include "../../EapHost/include/Credentials.h"
|
#include "../../EapHost/include/Credentials.h"
|
||||||
|
#include "../../TTLS/include/UIContext.h"
|
||||||
|
|
||||||
#include <wxex/common.h>
|
#include <wxex/common.h>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user