Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(252)

Side by Side Diff: remoting/host/verify_config_window_win.cc

Issue 10071025: [Chromoting] Make the Windows host controller ask the user to confirm host registration. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Minor improvements to interfaces and comments. Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « remoting/host/verify_config_window_win.h ('k') | remoting/remoting.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "remoting/host/verify_config_window_win.h"
6
7 #include <atlbase.h>
8 #include <windows.h>
9
10 #include "base/base64.h"
11 #include "base/compiler_specific.h"
12 #include "base/logging.h"
13 #include "base/utf_string_conversions.h"
14 #include "remoting/host/elevated_controller_resource.h"
15 #include "remoting/protocol/authentication_method.h"
16
17 namespace remoting {
18
19 VerifyConfigWindowWin::VerifyConfigWindowWin(const std::string& email,
20 const std::string& host_id, const std::string& host_secret_hash)
21 : hwnd_(NULL),
22 email_(email),
23 host_id_(host_id),
24 host_secret_hash_(host_secret_hash) {
25 }
26
27 VerifyConfigWindowWin::~VerifyConfigWindowWin() {
28 EndDialog();
29 }
30
31 bool VerifyConfigWindowWin::Run() {
32 // TODO(simonmorris): Provide a handle of a parent window for this dialog.
33 return (DialogBoxParam(ATL::_AtlBaseModule.GetModuleInstance(),
34 MAKEINTRESOURCE(IDD_VERIFY_CONFIG_DIALOG),
35 NULL,
36 (DLGPROC)DialogProc,
37 (LPARAM)this) != 0);
38 }
39
40 BOOL CALLBACK VerifyConfigWindowWin::DialogProc(HWND hwnd, UINT msg,
41 WPARAM wParam, LPARAM lParam) {
42 VerifyConfigWindowWin* win = NULL;
43 if (msg == WM_INITDIALOG) {
44 win = reinterpret_cast<VerifyConfigWindowWin*>(lParam);
45 CHECK(win);
46 SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)win);
47 } else {
48 LONG_PTR lp = GetWindowLongPtr(hwnd, DWLP_USER);
49 win = reinterpret_cast<VerifyConfigWindowWin*>(lp);
50 }
51 if (win == NULL)
52 return FALSE;
53 return win->OnDialogMessage(hwnd, msg, wParam, lParam);
54 }
55
56 BOOL VerifyConfigWindowWin::OnDialogMessage(HWND hwnd, UINT msg,
57 WPARAM wParam, LPARAM lParam) {
58 switch (msg) {
59 case WM_INITDIALOG:
60 hwnd_ = hwnd;
61 InitDialog();
62 return TRUE;
63 case WM_DESTROY:
64 ::EndDialog(hwnd, 0);
65 case WM_COMMAND:
66 switch (LOWORD(wParam)) {
67 case IDOK:
68 ::EndDialog(hwnd, VerifyHostSecretHash());
69 hwnd_ = NULL;
70 return TRUE;
71 case IDCANCEL:
72 ::EndDialog(hwnd, 0);
73 hwnd_ = NULL;
74 return TRUE;
75 }
76 }
77 return FALSE;
78 }
79
80 void VerifyConfigWindowWin::InitDialog() {
81 // TODO(simonmorris): l10n.
82 SetWindowText(hwnd_, L"Chrome Remote Desktop");
83
84 HWND hwndOk = GetDlgItem(hwnd_, IDOK);
85 CHECK(hwndOk);
86 SetWindowText(hwndOk, L"OK");
87
88 HWND hwndCancel = GetDlgItem(hwnd_, IDCANCEL);
89 CHECK(hwndCancel);
90 SetWindowText(hwndCancel, L"Cancel");
91
92 HWND hwndMessage = GetDlgItem(hwnd_, IDC_MESSAGE);
93 CHECK(hwndMessage);
94 SetWindowText(hwndMessage, L"To confirm that your Chrome Remote Desktop "
95 L"should be accessible by this account, please enter your PIN below.");
96
97 HWND hwndEmail = GetDlgItem(hwnd_, IDC_EMAIL);
98 CHECK(hwndEmail);
99 SetWindowText(hwndEmail, UTF8ToUTF16(email_).c_str());
100
101 HWND hwndPin = GetDlgItem(hwnd_, IDC_PIN);
102 CHECK(hwndPin);
103 SetFocus(hwndPin);
104 }
105
106 void VerifyConfigWindowWin::EndDialog() {
107 if (hwnd_) {
108 ::EndDialog(hwnd_, 0);
109 hwnd_ = NULL;
110 }
111 }
112
113 bool VerifyConfigWindowWin::VerifyHostSecretHash() {
114 const int kMaxPinLength = 256;
115 // TODO(simonmorris): Use ATL's string class, if it's more convenient.
116 scoped_array<WCHAR> pinWSTR(new WCHAR[kMaxPinLength]);
117 HWND hwndPin = GetDlgItem(hwnd_, IDC_PIN);
118 CHECK(hwndPin);
119 GetWindowText(hwndPin, pinWSTR.get(), kMaxPinLength);
120
121 // TODO(simonmorris): This code was copied from host_script_object.cc.
122 // Refactor to use PinIsValid(), from CL 10008092.
Wez 2012/04/13 20:23:41 If you pass in the DictionaryValue containing the
123 std::string pin(UTF16ToUTF8(pinWSTR.get()));
124 std::string hash = protocol::AuthenticationMethod::ApplyHashFunction(
125 protocol::AuthenticationMethod::HMAC_SHA256, host_id_, pin);
126 std::string hash_base64;
127 bool base64_result = base::Base64Encode(hash, &hash_base64);
128 if (!base64_result) {
129 LOG(FATAL) << "Base64Encode failed";
130 return false;
131 }
132 hash_base64 = "hmac:" + hash_base64;
133
134 return (hash_base64 == host_secret_hash_);
135 }
136
137 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/verify_config_window_win.h ('k') | remoting/remoting.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698