aboutsummaryrefslogtreecommitdiff
path: root/Src/auth/Loginbox/resultWebAuth.h
blob: ac4cdc34a1ee4b5a942a2129e00f6ade935d55b6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#ifndef NULLSOFT_AUTH_LOGINRESULT_WEBAUTH_HEADER
#define NULLSOFT_AUTH_LOGINRESULT_WEBAUTH_HEADER

#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif

#include "./loginResult.h"
#include "./browserEvent.h"
#include "../omBrowser/ifc_omservice.h"
#include "../omBrowser/ifc_omservicecommand.h"
#include "../../nu/dispatchTable.h"

#include <bfc/multipatch.h>

class LoginData;
class LoginCredentials;
class ExternalManager;
class obj_ombrowser;


#define MPIID_OMSVC				10
#define MPIID_OMSVCCOMMAND		20

class LoginResultWebAuth :	public LoginResult, 
							public IDispatch,
							public BrowserEvent,
							public MultiPatch<MPIID_OMSVC, ifc_omservice>,
							public MultiPatch<MPIID_OMSVCCOMMAND, ifc_omservicecommand>
							
{

public:
	typedef enum
	{
		DISPID_LOGINCOMPLETE	= 700,
		DISPID_GETPAGERECT		= 701,
		DISPID_GETBOXRECT		= 702,
		DISPID_SETSTATUS		= 703,
		DISPID_NAVIGATE			= 704,
		DISPID_GETSTRING		= 705,
	} DispatchCodes;

protected:
	LoginResultWebAuth(obj_ombrowser *pManager, LPCWSTR pszTargetUrl, LoginData *pInput, Callback fnCallback, void *pUser);
	~LoginResultWebAuth();

public:
	static HRESULT CreateInstance(LPCWSTR targetUrl, LoginData *input, Callback callback, void *user, LoginResultWebAuth **instance);

public:
	/* IUnknown */
	STDMETHOD(QueryInterface)(REFIID riid, PVOID *ppvObject);
	STDMETHOD_(ULONG, AddRef)(void);
	STDMETHOD_(ULONG, Release)(void);
	
	/* IDispatchable */
	DISPTABLE_INCLUDE();
	DISPHANDLER_REGISTER(OnLoginComplete);
	DISPHANDLER_REGISTER(OnGetPageRect);
	DISPHANDLER_REGISTER(OnGetBoxRect);
	DISPHANDLER_REGISTER(OnSetStatus);
	DISPHANDLER_REGISTER(OnNavigate);
	DISPHANDLER_REGISTER(OnGetString);

	/* LoignResult */
	HRESULT GetWaitHandle(HANDLE *handle);
	HRESULT GetUser(void **pUser);
	HRESULT	RequestAbort(BOOL fDrop);
	HRESULT IsCompleted();
	HRESULT IsAborting();
	HRESULT GetLoginData(LoginData **loginData);

	/* BrowserEvent */
	STDMETHOD_(void, Event_BrowserReady)(HWND hBrowser);
	STDMETHOD_(void, Event_DocumentReady)(HWND hBrowser);
	STDMETHOD_(void, Event_BrowserClosing)(HWND hBrowser);
	STDMETHOD_(void, Event_InvokeApc)(HWND hBrowser, LPARAM param);

protected:
	/* Dispatchable */
	size_t Wasabi_AddRef();
	size_t Wasabi_Release();
	int Wasabi_QueryInterface(GUID iid, void **object);

	/* ifc_omservice */
	unsigned int GetId();
	HRESULT GetName(wchar_t *pszBuffer, int cchBufferMax);
	HRESULT GetUrl(wchar_t *pszBuffer, int cchBufferMax);
	HRESULT GetExternal(IDispatch **ppDispatch);

	/* ifc_omservicecommand */
	HRESULT QueryState(HWND hBrowser, const GUID *commandGroup, UINT commandId);
	HRESULT Exec(HWND hBrowser, const GUID *commandGroup, UINT commandId, ULONG_PTR commandArg);
	
public:
	HRESULT GetResult(INT *authCode, LoginCredentials **credentials);

private:
	static HRESULT InitBrowserManager(obj_ombrowser **browserMngr);
	HRESULT Start();
	HRESULT Finish();
	void NotifyComplete();
	HRESULT DispParamsToCredentials(WORD wFlags, DISPPARAMS FAR *pdispparams, VARIANT FAR *pvarResult, UINT FAR *puArgErr, HRESULT *errorEx, LPWSTR *finishUrl);


protected:
	ULONG ref;
	LoginData *input;
	Callback callback;
	void *user;
	LoginCredentials *credentials;
	INT	 authCode;
	obj_ombrowser *browserMngr; 
	LPWSTR targetUrl;
	HWND hView;
	CRITICAL_SECTION lock;
	HANDLE completed;
	ExternalManager *external;
	DISPID	dispId;
	BOOL connectionVerified;
	LPWSTR readyUrl;
	

protected:
	RECVS_MULTIPATCH;
};

#endif //NULLSOFT_AUTH_LOGINRESULT_WEBAUTH_HEADER