1*859212d1SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*859212d1SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*859212d1SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*859212d1SAndrew Rist * distributed with this work for additional information
6*859212d1SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*859212d1SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*859212d1SAndrew Rist * "License"); you may not use this file except in compliance
9*859212d1SAndrew Rist * with the License. You may obtain a copy of the License at
10cdf0e10cSrcweir *
11*859212d1SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir *
13*859212d1SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*859212d1SAndrew Rist * software distributed under the License is distributed on an
15*859212d1SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*859212d1SAndrew Rist * KIND, either express or implied. See the License for the
17*859212d1SAndrew Rist * specific language governing permissions and limitations
18*859212d1SAndrew Rist * under the License.
19cdf0e10cSrcweir *
20*859212d1SAndrew Rist *************************************************************/
21*859212d1SAndrew Rist
22*859212d1SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #include "com/sun/star/task/DocumentPasswordRequest.hpp"
25cdf0e10cSrcweir #include "com/sun/star/task/DocumentPasswordRequest2.hpp"
26cdf0e10cSrcweir #include "com/sun/star/task/DocumentMSPasswordRequest.hpp"
27cdf0e10cSrcweir #include "com/sun/star/task/DocumentMSPasswordRequest2.hpp"
28cdf0e10cSrcweir #include "com/sun/star/task/MasterPasswordRequest.hpp"
29cdf0e10cSrcweir #include "com/sun/star/task/XInteractionAbort.hpp"
30cdf0e10cSrcweir #include "com/sun/star/task/XInteractionPassword.hpp"
31cdf0e10cSrcweir #include "com/sun/star/task/XInteractionPassword2.hpp"
32cdf0e10cSrcweir #include "com/sun/star/task/XInteractionRetry.hpp"
33cdf0e10cSrcweir #include "com/sun/star/ucb/XInteractionSupplyAuthentication2.hpp"
34cdf0e10cSrcweir #include "com/sun/star/ucb/URLAuthenticationRequest.hpp"
35cdf0e10cSrcweir
36cdf0e10cSrcweir #include "osl/diagnose.h"
37cdf0e10cSrcweir #include "rtl/digest.h"
38cdf0e10cSrcweir #include "vos/mutex.hxx"
39cdf0e10cSrcweir #include "tools/errcode.hxx"
40cdf0e10cSrcweir #include "vcl/msgbox.hxx"
41cdf0e10cSrcweir #include "vcl/abstdlg.hxx"
42cdf0e10cSrcweir #include "vcl/svapp.hxx"
43cdf0e10cSrcweir
44cdf0e10cSrcweir #include "ids.hrc"
45cdf0e10cSrcweir #include "getcontinuations.hxx"
46cdf0e10cSrcweir #include "passwordcontainer.hxx"
47cdf0e10cSrcweir #include "loginerr.hxx"
48cdf0e10cSrcweir #include "logindlg.hxx"
49cdf0e10cSrcweir #include "masterpasscrtdlg.hxx"
50cdf0e10cSrcweir #include "masterpassworddlg.hxx"
51cdf0e10cSrcweir #include "passworddlg.hxx"
52cdf0e10cSrcweir
53cdf0e10cSrcweir #include "iahndl.hxx"
54cdf0e10cSrcweir
55cdf0e10cSrcweir using namespace com::sun::star;
56cdf0e10cSrcweir
57cdf0e10cSrcweir namespace {
58cdf0e10cSrcweir
59cdf0e10cSrcweir void
executeLoginDialog(Window * pParent,LoginErrorInfo & rInfo,rtl::OUString const & rRealm)60cdf0e10cSrcweir executeLoginDialog(
61cdf0e10cSrcweir Window * pParent,
62cdf0e10cSrcweir LoginErrorInfo & rInfo,
63cdf0e10cSrcweir rtl::OUString const & rRealm)
64cdf0e10cSrcweir SAL_THROW((uno::RuntimeException))
65cdf0e10cSrcweir {
66cdf0e10cSrcweir try
67cdf0e10cSrcweir {
68cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
69cdf0e10cSrcweir
70cdf0e10cSrcweir bool bAccount = (rInfo.GetFlags() & LOGINERROR_FLAG_MODIFY_ACCOUNT) != 0;
71cdf0e10cSrcweir bool bSavePassword = rInfo.GetCanRememberPassword();
72cdf0e10cSrcweir bool bCanUseSysCreds = rInfo.GetCanUseSystemCredentials();
73cdf0e10cSrcweir
74cdf0e10cSrcweir sal_uInt16 nFlags = 0;
75cdf0e10cSrcweir if (rInfo.GetPath().Len() == 0)
76cdf0e10cSrcweir nFlags |= LF_NO_PATH;
77cdf0e10cSrcweir if (rInfo.GetErrorText().Len() == 0)
78cdf0e10cSrcweir nFlags |= LF_NO_ERRORTEXT;
79cdf0e10cSrcweir if (!bAccount)
80cdf0e10cSrcweir nFlags |= LF_NO_ACCOUNT;
81cdf0e10cSrcweir if (!(rInfo.GetFlags() & LOGINERROR_FLAG_MODIFY_USER_NAME))
82cdf0e10cSrcweir nFlags |= LF_USERNAME_READONLY;
83cdf0e10cSrcweir
84cdf0e10cSrcweir if (!bSavePassword)
85cdf0e10cSrcweir nFlags |= LF_NO_SAVEPASSWORD;
86cdf0e10cSrcweir
87cdf0e10cSrcweir if (!bCanUseSysCreds)
88cdf0e10cSrcweir nFlags |= LF_NO_USESYSCREDS;
89cdf0e10cSrcweir
90cdf0e10cSrcweir std::auto_ptr< ResMgr > xManager( ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
91cdf0e10cSrcweir UniString aRealm(rRealm);
92cdf0e10cSrcweir std::auto_ptr< LoginDialog > xDialog(
93cdf0e10cSrcweir new LoginDialog( pParent, nFlags, rInfo.GetServer(), &aRealm, xManager.get()));
94cdf0e10cSrcweir if (rInfo.GetErrorText().Len() != 0)
95cdf0e10cSrcweir xDialog->SetErrorText(rInfo.GetErrorText());
96cdf0e10cSrcweir xDialog->SetName(rInfo.GetUserName());
97cdf0e10cSrcweir if (bAccount)
98cdf0e10cSrcweir xDialog->ClearAccount();
99cdf0e10cSrcweir else
100cdf0e10cSrcweir xDialog->ClearPassword();
101cdf0e10cSrcweir xDialog->SetPassword(rInfo.GetPassword());
102cdf0e10cSrcweir
103cdf0e10cSrcweir if (bSavePassword)
104cdf0e10cSrcweir {
105cdf0e10cSrcweir xDialog->SetSavePasswordText(
106cdf0e10cSrcweir ResId(rInfo.GetIsRememberPersistent()
107cdf0e10cSrcweir ? RID_SAVE_PASSWORD
108cdf0e10cSrcweir : RID_KEEP_PASSWORD,
109cdf0e10cSrcweir *xManager.get()));
110cdf0e10cSrcweir
111cdf0e10cSrcweir xDialog->SetSavePassword(rInfo.GetIsRememberPassword());
112cdf0e10cSrcweir }
113cdf0e10cSrcweir
114cdf0e10cSrcweir if ( bCanUseSysCreds )
115cdf0e10cSrcweir xDialog->SetUseSystemCredentials( rInfo.GetIsUseSystemCredentials() );
116cdf0e10cSrcweir
117cdf0e10cSrcweir rInfo.SetResult(xDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK :
118cdf0e10cSrcweir ERRCODE_BUTTON_CANCEL);
119cdf0e10cSrcweir rInfo.SetUserName(xDialog->GetName());
120cdf0e10cSrcweir rInfo.SetPassword(xDialog->GetPassword());
121cdf0e10cSrcweir rInfo.SetAccount(xDialog->GetAccount());
122cdf0e10cSrcweir rInfo.SetIsRememberPassword(xDialog->IsSavePassword());
123cdf0e10cSrcweir
124cdf0e10cSrcweir if ( bCanUseSysCreds )
125cdf0e10cSrcweir rInfo.SetIsUseSystemCredentials( xDialog->IsUseSystemCredentials() );
126cdf0e10cSrcweir }
127cdf0e10cSrcweir catch (std::bad_alloc const &)
128cdf0e10cSrcweir {
129cdf0e10cSrcweir throw uno::RuntimeException(
130cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
131cdf0e10cSrcweir uno::Reference< uno::XInterface >());
132cdf0e10cSrcweir }
133cdf0e10cSrcweir }
134cdf0e10cSrcweir
getRememberModes(uno::Sequence<ucb::RememberAuthentication> const & rRememberModes,ucb::RememberAuthentication & rPreferredMode,ucb::RememberAuthentication & rAlternateMode)135cdf0e10cSrcweir void getRememberModes(
136cdf0e10cSrcweir uno::Sequence< ucb::RememberAuthentication > const & rRememberModes,
137cdf0e10cSrcweir ucb::RememberAuthentication & rPreferredMode,
138cdf0e10cSrcweir ucb::RememberAuthentication & rAlternateMode )
139cdf0e10cSrcweir {
140cdf0e10cSrcweir sal_Int32 nCount = rRememberModes.getLength();
141cdf0e10cSrcweir OSL_ENSURE( (nCount > 0) && (nCount < 4),
142cdf0e10cSrcweir "ucb::RememberAuthentication sequence size mismatch!" );
143cdf0e10cSrcweir if ( nCount == 1 )
144cdf0e10cSrcweir {
145cdf0e10cSrcweir rPreferredMode = rAlternateMode = rRememberModes[ 0 ];
146cdf0e10cSrcweir return;
147cdf0e10cSrcweir }
148cdf0e10cSrcweir else
149cdf0e10cSrcweir {
150cdf0e10cSrcweir //bool bHasRememberModeNo = false;
151cdf0e10cSrcweir bool bHasRememberModeSession = false;
152cdf0e10cSrcweir bool bHasRememberModePersistent = false;
153cdf0e10cSrcweir
154cdf0e10cSrcweir for (sal_Int32 i = 0; i < nCount; ++i)
155cdf0e10cSrcweir {
156cdf0e10cSrcweir switch ( rRememberModes[i] )
157cdf0e10cSrcweir {
158cdf0e10cSrcweir case ucb::RememberAuthentication_NO:
159cdf0e10cSrcweir //bHasRememberModeNo = true;
160cdf0e10cSrcweir break;
161cdf0e10cSrcweir case ucb::RememberAuthentication_SESSION:
162cdf0e10cSrcweir bHasRememberModeSession = true;
163cdf0e10cSrcweir break;
164cdf0e10cSrcweir case ucb::RememberAuthentication_PERSISTENT:
165cdf0e10cSrcweir bHasRememberModePersistent = true;
166cdf0e10cSrcweir break;
167cdf0e10cSrcweir default:
168cdf0e10cSrcweir OSL_TRACE( "Unsupported RememberAuthentication value" );
169cdf0e10cSrcweir break;
170cdf0e10cSrcweir }
171cdf0e10cSrcweir }
172cdf0e10cSrcweir
173cdf0e10cSrcweir if (bHasRememberModePersistent)
174cdf0e10cSrcweir {
175cdf0e10cSrcweir rPreferredMode = ucb::RememberAuthentication_PERSISTENT;
176cdf0e10cSrcweir if (bHasRememberModeSession)
177cdf0e10cSrcweir rAlternateMode = ucb::RememberAuthentication_SESSION;
178cdf0e10cSrcweir else
179cdf0e10cSrcweir rAlternateMode = ucb::RememberAuthentication_NO;
180cdf0e10cSrcweir }
181cdf0e10cSrcweir else
182cdf0e10cSrcweir {
183cdf0e10cSrcweir rPreferredMode = ucb::RememberAuthentication_SESSION;
184cdf0e10cSrcweir rAlternateMode = ucb::RememberAuthentication_NO;
185cdf0e10cSrcweir }
186cdf0e10cSrcweir }
187cdf0e10cSrcweir }
188cdf0e10cSrcweir
189cdf0e10cSrcweir void
handleAuthenticationRequest_(Window * pParent,uno::Reference<task::XInteractionHandler> const & xIH,uno::Reference<lang::XMultiServiceFactory> const & xServiceFactory,ucb::AuthenticationRequest const & rRequest,uno::Sequence<uno::Reference<task::XInteractionContinuation>> const & rContinuations,const rtl::OUString & rURL)190cdf0e10cSrcweir handleAuthenticationRequest_(
191cdf0e10cSrcweir Window * pParent,
192cdf0e10cSrcweir uno::Reference< task::XInteractionHandler > const & xIH,
193cdf0e10cSrcweir uno::Reference< lang::XMultiServiceFactory > const & xServiceFactory,
194cdf0e10cSrcweir ucb::AuthenticationRequest const & rRequest,
195cdf0e10cSrcweir uno::Sequence< uno::Reference< task::XInteractionContinuation > > const &
196cdf0e10cSrcweir rContinuations,
197cdf0e10cSrcweir const rtl::OUString & rURL)
198cdf0e10cSrcweir SAL_THROW((uno::RuntimeException))
199cdf0e10cSrcweir {
200cdf0e10cSrcweir uno::Reference< task::XInteractionRetry > xRetry;
201cdf0e10cSrcweir uno::Reference< task::XInteractionAbort > xAbort;
202cdf0e10cSrcweir uno::Reference< ucb::XInteractionSupplyAuthentication >
203cdf0e10cSrcweir xSupplyAuthentication;
204cdf0e10cSrcweir uno::Reference< ucb::XInteractionSupplyAuthentication2 >
205cdf0e10cSrcweir xSupplyAuthentication2;
206cdf0e10cSrcweir getContinuations(rContinuations, &xRetry, &xAbort, &xSupplyAuthentication);
207cdf0e10cSrcweir if (xSupplyAuthentication.is())
208cdf0e10cSrcweir xSupplyAuthentication2.set(xSupplyAuthentication, uno::UNO_QUERY);
209cdf0e10cSrcweir
210cdf0e10cSrcweir //////////////////////////
211cdf0e10cSrcweir // First, try to obtain credentials from password container service.
212cdf0e10cSrcweir uui::PasswordContainerHelper aPwContainerHelper(xServiceFactory);
213cdf0e10cSrcweir if (aPwContainerHelper.handleAuthenticationRequest(rRequest,
214cdf0e10cSrcweir xSupplyAuthentication,
215cdf0e10cSrcweir rURL,
216cdf0e10cSrcweir xIH))
217cdf0e10cSrcweir {
218cdf0e10cSrcweir xSupplyAuthentication->select();
219cdf0e10cSrcweir return;
220cdf0e10cSrcweir }
221cdf0e10cSrcweir
222cdf0e10cSrcweir //////////////////////////
223cdf0e10cSrcweir // Second, try to obtain credentials from user via password dialog.
224cdf0e10cSrcweir ucb::RememberAuthentication eDefaultRememberMode
225cdf0e10cSrcweir = ucb::RememberAuthentication_SESSION;
226cdf0e10cSrcweir ucb::RememberAuthentication ePreferredRememberMode
227cdf0e10cSrcweir = eDefaultRememberMode;
228cdf0e10cSrcweir ucb::RememberAuthentication eAlternateRememberMode
229cdf0e10cSrcweir = ucb::RememberAuthentication_NO;
230cdf0e10cSrcweir
231cdf0e10cSrcweir if (xSupplyAuthentication.is())
232cdf0e10cSrcweir {
233cdf0e10cSrcweir getRememberModes(
234cdf0e10cSrcweir xSupplyAuthentication->getRememberPasswordModes(
235cdf0e10cSrcweir eDefaultRememberMode),
236cdf0e10cSrcweir ePreferredRememberMode,
237cdf0e10cSrcweir eAlternateRememberMode);
238cdf0e10cSrcweir }
239cdf0e10cSrcweir
240cdf0e10cSrcweir sal_Bool bCanUseSystemCredentials;
241cdf0e10cSrcweir sal_Bool bDefaultUseSystemCredentials;
242cdf0e10cSrcweir if (xSupplyAuthentication2.is())
243cdf0e10cSrcweir {
244cdf0e10cSrcweir bCanUseSystemCredentials
245cdf0e10cSrcweir = xSupplyAuthentication2->canUseSystemCredentials(
246cdf0e10cSrcweir bDefaultUseSystemCredentials);
247cdf0e10cSrcweir }
248cdf0e10cSrcweir else
249cdf0e10cSrcweir {
250cdf0e10cSrcweir bCanUseSystemCredentials = sal_False;
251cdf0e10cSrcweir bDefaultUseSystemCredentials = sal_False;
252cdf0e10cSrcweir }
253cdf0e10cSrcweir
254cdf0e10cSrcweir LoginErrorInfo aInfo;
255cdf0e10cSrcweir aInfo.SetTitle(rRequest.ServerName);
256cdf0e10cSrcweir aInfo.SetServer(rRequest.ServerName);
257cdf0e10cSrcweir if (rRequest.HasAccount)
258cdf0e10cSrcweir aInfo.SetAccount(rRequest.Account);
259cdf0e10cSrcweir if (rRequest.HasUserName)
260cdf0e10cSrcweir aInfo.SetUserName(rRequest.UserName);
261cdf0e10cSrcweir if (rRequest.HasPassword)
262cdf0e10cSrcweir aInfo.SetPassword(rRequest.Password);
263cdf0e10cSrcweir aInfo.SetErrorText(rRequest.Diagnostic);
264cdf0e10cSrcweir
265cdf0e10cSrcweir aInfo.SetCanRememberPassword(
266cdf0e10cSrcweir ePreferredRememberMode != eAlternateRememberMode);
267cdf0e10cSrcweir aInfo.SetIsRememberPassword(
268cdf0e10cSrcweir ePreferredRememberMode == eDefaultRememberMode);
269cdf0e10cSrcweir aInfo.SetIsRememberPersistent(
270cdf0e10cSrcweir ePreferredRememberMode == ucb::RememberAuthentication_PERSISTENT);
271cdf0e10cSrcweir
272cdf0e10cSrcweir aInfo.SetCanUseSystemCredentials(bCanUseSystemCredentials);
273cdf0e10cSrcweir aInfo.SetIsUseSystemCredentials( bDefaultUseSystemCredentials );
274cdf0e10cSrcweir aInfo.SetModifyAccount(rRequest.HasAccount
275cdf0e10cSrcweir && xSupplyAuthentication.is()
276cdf0e10cSrcweir && xSupplyAuthentication->canSetAccount());
277cdf0e10cSrcweir aInfo.SetModifyUserName(rRequest.HasUserName
278cdf0e10cSrcweir && xSupplyAuthentication.is()
279cdf0e10cSrcweir && xSupplyAuthentication->canSetUserName());
280cdf0e10cSrcweir executeLoginDialog(pParent,
281cdf0e10cSrcweir aInfo,
282cdf0e10cSrcweir rRequest.HasRealm ? rRequest.Realm : rtl::OUString());
283cdf0e10cSrcweir switch (aInfo.GetResult())
284cdf0e10cSrcweir {
285cdf0e10cSrcweir case ERRCODE_BUTTON_OK:
286cdf0e10cSrcweir if (xSupplyAuthentication.is())
287cdf0e10cSrcweir {
288cdf0e10cSrcweir if (xSupplyAuthentication->canSetUserName())
289cdf0e10cSrcweir xSupplyAuthentication->setUserName(aInfo.GetUserName());
290cdf0e10cSrcweir if (xSupplyAuthentication->canSetPassword())
291cdf0e10cSrcweir xSupplyAuthentication->setPassword(aInfo.GetPassword());
292cdf0e10cSrcweir
293cdf0e10cSrcweir if (ePreferredRememberMode != eAlternateRememberMode)
294cdf0e10cSrcweir {
295cdf0e10cSrcweir // user had te choice.
296cdf0e10cSrcweir if (aInfo.GetIsRememberPassword())
297cdf0e10cSrcweir xSupplyAuthentication->setRememberPassword(
298cdf0e10cSrcweir ePreferredRememberMode);
299cdf0e10cSrcweir else
300cdf0e10cSrcweir xSupplyAuthentication->setRememberPassword(
301cdf0e10cSrcweir eAlternateRememberMode);
302cdf0e10cSrcweir }
303cdf0e10cSrcweir else
304cdf0e10cSrcweir {
305cdf0e10cSrcweir // user had no choice.
306cdf0e10cSrcweir xSupplyAuthentication->setRememberPassword(
307cdf0e10cSrcweir ePreferredRememberMode);
308cdf0e10cSrcweir }
309cdf0e10cSrcweir
310cdf0e10cSrcweir if (rRequest.HasRealm)
311cdf0e10cSrcweir {
312cdf0e10cSrcweir if (xSupplyAuthentication->canSetRealm())
313cdf0e10cSrcweir xSupplyAuthentication->setRealm(aInfo.GetAccount());
314cdf0e10cSrcweir }
315cdf0e10cSrcweir else if (xSupplyAuthentication->canSetAccount())
316cdf0e10cSrcweir xSupplyAuthentication->setAccount(aInfo.GetAccount());
317cdf0e10cSrcweir
318cdf0e10cSrcweir if ( xSupplyAuthentication2.is() && bCanUseSystemCredentials )
319cdf0e10cSrcweir xSupplyAuthentication2->setUseSystemCredentials(
320cdf0e10cSrcweir aInfo.GetIsUseSystemCredentials() );
321cdf0e10cSrcweir
322cdf0e10cSrcweir xSupplyAuthentication->select();
323cdf0e10cSrcweir }
324cdf0e10cSrcweir
325cdf0e10cSrcweir //////////////////////////
326cdf0e10cSrcweir // Third, store credentials in password container.
327cdf0e10cSrcweir
328cdf0e10cSrcweir if ( aInfo.GetIsUseSystemCredentials() )
329cdf0e10cSrcweir {
330cdf0e10cSrcweir if (aInfo.GetIsRememberPassword())
331cdf0e10cSrcweir {
332cdf0e10cSrcweir if (!aPwContainerHelper.addRecord(
333cdf0e10cSrcweir rURL.getLength() ? rURL : rRequest.ServerName,
334cdf0e10cSrcweir rtl::OUString(), // empty u/p -> sys creds
335cdf0e10cSrcweir uno::Sequence< rtl::OUString >(),
336cdf0e10cSrcweir xIH,
337cdf0e10cSrcweir ePreferredRememberMode
338cdf0e10cSrcweir == ucb::RememberAuthentication_PERSISTENT))
339cdf0e10cSrcweir {
340cdf0e10cSrcweir xSupplyAuthentication->setRememberPassword(
341cdf0e10cSrcweir ucb::RememberAuthentication_NO);
342cdf0e10cSrcweir }
343cdf0e10cSrcweir }
344cdf0e10cSrcweir else if (eAlternateRememberMode
345cdf0e10cSrcweir == ucb::RememberAuthentication_SESSION)
346cdf0e10cSrcweir {
347cdf0e10cSrcweir if (!aPwContainerHelper.addRecord(
348cdf0e10cSrcweir rURL.getLength() ? rURL : rRequest.ServerName,
349cdf0e10cSrcweir rtl::OUString(), // empty u/p -> sys creds
350cdf0e10cSrcweir uno::Sequence< rtl::OUString >(),
351cdf0e10cSrcweir xIH,
352cdf0e10cSrcweir false /* SESSION */))
353cdf0e10cSrcweir {
354cdf0e10cSrcweir xSupplyAuthentication->setRememberPassword(
355cdf0e10cSrcweir ucb::RememberAuthentication_NO);
356cdf0e10cSrcweir }
357cdf0e10cSrcweir }
358cdf0e10cSrcweir }
359cdf0e10cSrcweir // Empty user name can not be valid:
360cdf0e10cSrcweir else if (aInfo.GetUserName().Len() != 0)
361cdf0e10cSrcweir {
362cdf0e10cSrcweir uno::Sequence< rtl::OUString >
363cdf0e10cSrcweir aPassList(aInfo.GetAccount().Len() == 0 ? 1 : 2);
364cdf0e10cSrcweir aPassList[0] = aInfo.GetPassword();
365cdf0e10cSrcweir if (aInfo.GetAccount().Len() != 0)
366cdf0e10cSrcweir aPassList[1] = aInfo.GetAccount();
367cdf0e10cSrcweir
368cdf0e10cSrcweir if (aInfo.GetIsRememberPassword())
369cdf0e10cSrcweir {
370cdf0e10cSrcweir if (!aPwContainerHelper.addRecord(
371cdf0e10cSrcweir rURL.getLength() ? rURL : rRequest.ServerName,
372cdf0e10cSrcweir aInfo.GetUserName(),
373cdf0e10cSrcweir aPassList,
374cdf0e10cSrcweir xIH,
375cdf0e10cSrcweir ePreferredRememberMode
376cdf0e10cSrcweir == ucb::RememberAuthentication_PERSISTENT))
377cdf0e10cSrcweir {
378cdf0e10cSrcweir xSupplyAuthentication->setRememberPassword(
379cdf0e10cSrcweir ucb::RememberAuthentication_NO);
380cdf0e10cSrcweir }
381cdf0e10cSrcweir }
382cdf0e10cSrcweir else if (eAlternateRememberMode
383cdf0e10cSrcweir == ucb::RememberAuthentication_SESSION)
384cdf0e10cSrcweir {
385cdf0e10cSrcweir if (!aPwContainerHelper.addRecord(
386cdf0e10cSrcweir rURL.getLength() ? rURL : rRequest.ServerName,
387cdf0e10cSrcweir aInfo.GetUserName(),
388cdf0e10cSrcweir aPassList,
389cdf0e10cSrcweir xIH,
390cdf0e10cSrcweir false /* SESSION */))
391cdf0e10cSrcweir {
392cdf0e10cSrcweir xSupplyAuthentication->setRememberPassword(
393cdf0e10cSrcweir ucb::RememberAuthentication_NO);
394cdf0e10cSrcweir }
395cdf0e10cSrcweir }
396cdf0e10cSrcweir }
397cdf0e10cSrcweir break;
398cdf0e10cSrcweir
399cdf0e10cSrcweir case ERRCODE_BUTTON_RETRY:
400cdf0e10cSrcweir if (xRetry.is())
401cdf0e10cSrcweir xRetry->select();
402cdf0e10cSrcweir break;
403cdf0e10cSrcweir
404cdf0e10cSrcweir default:
405cdf0e10cSrcweir if (xAbort.is())
406cdf0e10cSrcweir xAbort->select();
407cdf0e10cSrcweir break;
408cdf0e10cSrcweir }
409cdf0e10cSrcweir }
410cdf0e10cSrcweir
411cdf0e10cSrcweir void
executeMasterPasswordDialog(Window * pParent,LoginErrorInfo & rInfo,task::PasswordRequestMode nMode)412cdf0e10cSrcweir executeMasterPasswordDialog(
413cdf0e10cSrcweir Window * pParent,
414cdf0e10cSrcweir LoginErrorInfo & rInfo,
415cdf0e10cSrcweir task::PasswordRequestMode nMode)
416cdf0e10cSrcweir SAL_THROW((uno::RuntimeException))
417cdf0e10cSrcweir {
418cdf0e10cSrcweir rtl::OString aMaster;
419cdf0e10cSrcweir try
420cdf0e10cSrcweir {
421cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
422cdf0e10cSrcweir
423cdf0e10cSrcweir std::auto_ptr< ResMgr > xManager(
424cdf0e10cSrcweir ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
425cdf0e10cSrcweir if( nMode == task::PasswordRequestMode_PASSWORD_CREATE )
426cdf0e10cSrcweir {
427cdf0e10cSrcweir std::auto_ptr< MasterPasswordCreateDialog > xDialog(
428cdf0e10cSrcweir new MasterPasswordCreateDialog(pParent, xManager.get()));
429cdf0e10cSrcweir rInfo.SetResult(xDialog->Execute()
430cdf0e10cSrcweir == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL);
431cdf0e10cSrcweir aMaster = rtl::OUStringToOString(
432cdf0e10cSrcweir xDialog->GetMasterPassword(), RTL_TEXTENCODING_UTF8);
433cdf0e10cSrcweir }
434cdf0e10cSrcweir else
435cdf0e10cSrcweir {
436cdf0e10cSrcweir std::auto_ptr< MasterPasswordDialog > xDialog(
437cdf0e10cSrcweir new MasterPasswordDialog(pParent, nMode, xManager.get()));
438cdf0e10cSrcweir rInfo.SetResult(xDialog->Execute()
439cdf0e10cSrcweir == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL);
440cdf0e10cSrcweir aMaster = rtl::OUStringToOString(
441cdf0e10cSrcweir xDialog->GetMasterPassword(), RTL_TEXTENCODING_UTF8);
442cdf0e10cSrcweir }
443cdf0e10cSrcweir }
444cdf0e10cSrcweir catch (std::bad_alloc const &)
445cdf0e10cSrcweir {
446cdf0e10cSrcweir throw uno::RuntimeException(
447cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
448cdf0e10cSrcweir uno::Reference< uno::XInterface >());
449cdf0e10cSrcweir }
450cdf0e10cSrcweir
451cdf0e10cSrcweir sal_uInt8 aKey[RTL_DIGEST_LENGTH_MD5];
452cdf0e10cSrcweir rtl_digest_PBKDF2(aKey,
453cdf0e10cSrcweir RTL_DIGEST_LENGTH_MD5,
454cdf0e10cSrcweir reinterpret_cast< sal_uInt8 const * >(aMaster.getStr()),
455cdf0e10cSrcweir aMaster.getLength(),
456cdf0e10cSrcweir reinterpret_cast< sal_uInt8 const * >(
457cdf0e10cSrcweir "3B5509ABA6BC42D9A3A1F3DAD49E56A51"),
458cdf0e10cSrcweir 32,
459cdf0e10cSrcweir 1000);
460cdf0e10cSrcweir
461cdf0e10cSrcweir rtl::OUStringBuffer aBuffer;
462cdf0e10cSrcweir for (int i = 0; i < RTL_DIGEST_LENGTH_MD5; ++i)
463cdf0e10cSrcweir {
464cdf0e10cSrcweir aBuffer.append(static_cast< sal_Unicode >('a' + (aKey[i] >> 4)));
465cdf0e10cSrcweir aBuffer.append(static_cast< sal_Unicode >('a' + (aKey[i] & 15)));
466cdf0e10cSrcweir }
467cdf0e10cSrcweir rInfo.SetPassword(aBuffer.makeStringAndClear());
468cdf0e10cSrcweir }
469cdf0e10cSrcweir
470cdf0e10cSrcweir void
handleMasterPasswordRequest_(Window * pParent,task::PasswordRequestMode nMode,uno::Sequence<uno::Reference<task::XInteractionContinuation>> const & rContinuations)471cdf0e10cSrcweir handleMasterPasswordRequest_(
472cdf0e10cSrcweir Window * pParent,
473cdf0e10cSrcweir task::PasswordRequestMode nMode,
474cdf0e10cSrcweir uno::Sequence< uno::Reference< task::XInteractionContinuation > > const &
475cdf0e10cSrcweir rContinuations)
476cdf0e10cSrcweir SAL_THROW((uno::RuntimeException))
477cdf0e10cSrcweir {
478cdf0e10cSrcweir uno::Reference< task::XInteractionRetry > xRetry;
479cdf0e10cSrcweir uno::Reference< task::XInteractionAbort > xAbort;
480cdf0e10cSrcweir uno::Reference< ucb::XInteractionSupplyAuthentication >
481cdf0e10cSrcweir xSupplyAuthentication;
482cdf0e10cSrcweir getContinuations(rContinuations, &xRetry, &xAbort, &xSupplyAuthentication);
483cdf0e10cSrcweir LoginErrorInfo aInfo;
484cdf0e10cSrcweir
485cdf0e10cSrcweir // in case of master password a hash code is returned
486cdf0e10cSrcweir executeMasterPasswordDialog(pParent, aInfo, nMode);
487cdf0e10cSrcweir
488cdf0e10cSrcweir switch (aInfo.GetResult())
489cdf0e10cSrcweir {
490cdf0e10cSrcweir case ERRCODE_BUTTON_OK:
491cdf0e10cSrcweir if (xSupplyAuthentication.is())
492cdf0e10cSrcweir {
493cdf0e10cSrcweir if (xSupplyAuthentication->canSetPassword())
494cdf0e10cSrcweir xSupplyAuthentication->setPassword(aInfo.GetPassword());
495cdf0e10cSrcweir xSupplyAuthentication->select();
496cdf0e10cSrcweir }
497cdf0e10cSrcweir break;
498cdf0e10cSrcweir
499cdf0e10cSrcweir case ERRCODE_BUTTON_RETRY:
500cdf0e10cSrcweir if (xRetry.is())
501cdf0e10cSrcweir xRetry->select();
502cdf0e10cSrcweir break;
503cdf0e10cSrcweir
504cdf0e10cSrcweir default:
505cdf0e10cSrcweir if (xAbort.is())
506cdf0e10cSrcweir xAbort->select();
507cdf0e10cSrcweir break;
508cdf0e10cSrcweir }
509cdf0e10cSrcweir }
510cdf0e10cSrcweir
511cdf0e10cSrcweir void
executePasswordDialog(Window * pParent,LoginErrorInfo & rInfo,task::PasswordRequestMode nMode,::rtl::OUString aDocName,bool bMSCryptoMode,bool bIsPasswordToModify,bool bIsSimplePasswordRequest)512cdf0e10cSrcweir executePasswordDialog(
513cdf0e10cSrcweir Window * pParent,
514cdf0e10cSrcweir LoginErrorInfo & rInfo,
515cdf0e10cSrcweir task::PasswordRequestMode nMode,
516cdf0e10cSrcweir ::rtl::OUString aDocName,
517cdf0e10cSrcweir bool bMSCryptoMode,
518cdf0e10cSrcweir bool bIsPasswordToModify,
519cdf0e10cSrcweir bool bIsSimplePasswordRequest )
520cdf0e10cSrcweir SAL_THROW((uno::RuntimeException))
521cdf0e10cSrcweir {
522cdf0e10cSrcweir try
523cdf0e10cSrcweir {
524cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex());
525cdf0e10cSrcweir
526cdf0e10cSrcweir std::auto_ptr< ResMgr > xManager(
527cdf0e10cSrcweir ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui)));
528cdf0e10cSrcweir if( nMode == task::PasswordRequestMode_PASSWORD_CREATE )
529cdf0e10cSrcweir {
530cdf0e10cSrcweir if (bIsSimplePasswordRequest)
531cdf0e10cSrcweir {
532cdf0e10cSrcweir std::auto_ptr< PasswordDialog > pDialog(
533cdf0e10cSrcweir new PasswordDialog( pParent, nMode, xManager.get(), aDocName,
534cdf0e10cSrcweir bIsPasswordToModify, bIsSimplePasswordRequest ) );
535cdf0e10cSrcweir pDialog->SetMinLen(0);
536cdf0e10cSrcweir
537cdf0e10cSrcweir rInfo.SetResult( pDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL );
538cdf0e10cSrcweir rInfo.SetPassword( pDialog->GetPassword() );
539cdf0e10cSrcweir }
540cdf0e10cSrcweir else
541cdf0e10cSrcweir {
542cdf0e10cSrcweir const sal_uInt16 nMaxPasswdLen = bMSCryptoMode ? 15 : 0; // 0 -> allow any length
543cdf0e10cSrcweir
544cdf0e10cSrcweir VclAbstractDialogFactory * pFact = VclAbstractDialogFactory::Create();
545cdf0e10cSrcweir AbstractPasswordToOpenModifyDialog *pTmp = pFact->CreatePasswordToOpenModifyDialog( pParent, 0, nMaxPasswdLen, bIsPasswordToModify );
546cdf0e10cSrcweir std::auto_ptr< AbstractPasswordToOpenModifyDialog > pDialog( pTmp );
547cdf0e10cSrcweir
548cdf0e10cSrcweir rInfo.SetResult( pDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL );
549cdf0e10cSrcweir rInfo.SetPassword( pDialog->GetPasswordToOpen() );
550cdf0e10cSrcweir rInfo.SetPasswordToModify( pDialog->GetPasswordToModify() );
551cdf0e10cSrcweir rInfo.SetRecommendToOpenReadonly( pDialog->IsRecommendToOpenReadonly() );
552cdf0e10cSrcweir }
553cdf0e10cSrcweir }
554cdf0e10cSrcweir else // enter password or reenter password
555cdf0e10cSrcweir {
556cdf0e10cSrcweir std::auto_ptr< PasswordDialog > pDialog(
557cdf0e10cSrcweir new PasswordDialog( pParent, nMode, xManager.get(), aDocName,
558cdf0e10cSrcweir bIsPasswordToModify, bIsSimplePasswordRequest ) );
559cdf0e10cSrcweir pDialog->SetMinLen(0);
560cdf0e10cSrcweir
561cdf0e10cSrcweir rInfo.SetResult( pDialog->Execute() == RET_OK ? ERRCODE_BUTTON_OK : ERRCODE_BUTTON_CANCEL );
562cdf0e10cSrcweir rInfo.SetPassword( bIsPasswordToModify ? String() : pDialog->GetPassword() );
563cdf0e10cSrcweir rInfo.SetPasswordToModify( bIsPasswordToModify ? pDialog->GetPassword() : String() );
564cdf0e10cSrcweir }
565cdf0e10cSrcweir }
566cdf0e10cSrcweir catch (std::bad_alloc const &)
567cdf0e10cSrcweir {
568cdf0e10cSrcweir throw uno::RuntimeException(
569cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")),
570cdf0e10cSrcweir uno::Reference< uno::XInterface>());
571cdf0e10cSrcweir }
572cdf0e10cSrcweir }
573cdf0e10cSrcweir
574cdf0e10cSrcweir void
handlePasswordRequest_(Window * pParent,task::PasswordRequestMode nMode,uno::Sequence<uno::Reference<task::XInteractionContinuation>> const & rContinuations,::rtl::OUString aDocumentName,bool bMSCryptoMode,bool bIsPasswordToModify,bool bIsSimplePasswordRequest=false)575cdf0e10cSrcweir handlePasswordRequest_(
576cdf0e10cSrcweir Window * pParent,
577cdf0e10cSrcweir task::PasswordRequestMode nMode,
578cdf0e10cSrcweir uno::Sequence< uno::Reference< task::XInteractionContinuation > > const &
579cdf0e10cSrcweir rContinuations,
580cdf0e10cSrcweir ::rtl::OUString aDocumentName,
581cdf0e10cSrcweir bool bMSCryptoMode,
582cdf0e10cSrcweir bool bIsPasswordToModify,
583cdf0e10cSrcweir bool bIsSimplePasswordRequest = false )
584cdf0e10cSrcweir SAL_THROW((uno::RuntimeException))
585cdf0e10cSrcweir {
586cdf0e10cSrcweir uno::Reference< task::XInteractionRetry > xRetry;
587cdf0e10cSrcweir uno::Reference< task::XInteractionAbort > xAbort;
588cdf0e10cSrcweir uno::Reference< task::XInteractionPassword > xPassword;
589cdf0e10cSrcweir uno::Reference< task::XInteractionPassword2 > xPassword2;
590cdf0e10cSrcweir getContinuations(rContinuations, &xRetry, &xAbort, &xPassword2, &xPassword);
591cdf0e10cSrcweir
592cdf0e10cSrcweir if ( xPassword2.is() && !xPassword.is() )
593cdf0e10cSrcweir xPassword.set( xPassword2, uno::UNO_QUERY_THROW );
594cdf0e10cSrcweir
595cdf0e10cSrcweir LoginErrorInfo aInfo;
596cdf0e10cSrcweir
597cdf0e10cSrcweir executePasswordDialog( pParent, aInfo, nMode,
598cdf0e10cSrcweir aDocumentName, bMSCryptoMode, bIsPasswordToModify, bIsSimplePasswordRequest );
599cdf0e10cSrcweir
600cdf0e10cSrcweir switch (aInfo.GetResult())
601cdf0e10cSrcweir {
602cdf0e10cSrcweir case ERRCODE_BUTTON_OK:
603cdf0e10cSrcweir OSL_ENSURE( !bIsPasswordToModify || xPassword2.is(), "PasswordToModify is requested, but there is no Interaction!" );
604cdf0e10cSrcweir if (xPassword.is())
605cdf0e10cSrcweir {
606cdf0e10cSrcweir if (xPassword2.is())
607cdf0e10cSrcweir {
608cdf0e10cSrcweir xPassword2->setPasswordToModify( aInfo.GetPasswordToModify() );
609cdf0e10cSrcweir xPassword2->setRecommendReadOnly( aInfo.IsRecommendToOpenReadonly() );
610cdf0e10cSrcweir }
611cdf0e10cSrcweir
612cdf0e10cSrcweir xPassword->setPassword(aInfo.GetPassword());
613cdf0e10cSrcweir xPassword->select();
614cdf0e10cSrcweir }
615cdf0e10cSrcweir break;
616cdf0e10cSrcweir
617cdf0e10cSrcweir case ERRCODE_BUTTON_RETRY:
618cdf0e10cSrcweir if (xRetry.is())
619cdf0e10cSrcweir xRetry->select();
620cdf0e10cSrcweir break;
621cdf0e10cSrcweir
622cdf0e10cSrcweir default:
623cdf0e10cSrcweir if (xAbort.is())
624cdf0e10cSrcweir xAbort->select();
625cdf0e10cSrcweir break;
626cdf0e10cSrcweir }
627cdf0e10cSrcweir }
628cdf0e10cSrcweir
629cdf0e10cSrcweir } // namespace
630cdf0e10cSrcweir
631cdf0e10cSrcweir bool
handleAuthenticationRequest(uno::Reference<task::XInteractionRequest> const & rRequest)632cdf0e10cSrcweir UUIInteractionHelper::handleAuthenticationRequest(
633cdf0e10cSrcweir uno::Reference< task::XInteractionRequest > const & rRequest)
634cdf0e10cSrcweir SAL_THROW((uno::RuntimeException))
635cdf0e10cSrcweir {
636cdf0e10cSrcweir uno::Any aAnyRequest(rRequest->getRequest());
637cdf0e10cSrcweir
638cdf0e10cSrcweir ucb::URLAuthenticationRequest aURLAuthenticationRequest;
639cdf0e10cSrcweir if (aAnyRequest >>= aURLAuthenticationRequest)
640cdf0e10cSrcweir {
641cdf0e10cSrcweir handleAuthenticationRequest_(getParentProperty(),
642cdf0e10cSrcweir getInteractionHandler(),
643cdf0e10cSrcweir m_xServiceFactory,
644cdf0e10cSrcweir aURLAuthenticationRequest,
645cdf0e10cSrcweir rRequest->getContinuations(),
646cdf0e10cSrcweir aURLAuthenticationRequest.URL);
647cdf0e10cSrcweir return true;
648cdf0e10cSrcweir }
649cdf0e10cSrcweir
650cdf0e10cSrcweir ucb::AuthenticationRequest aAuthenticationRequest;
651cdf0e10cSrcweir if (aAnyRequest >>= aAuthenticationRequest)
652cdf0e10cSrcweir {
653cdf0e10cSrcweir handleAuthenticationRequest_(getParentProperty(),
654cdf0e10cSrcweir getInteractionHandler(),
655cdf0e10cSrcweir m_xServiceFactory,
656cdf0e10cSrcweir aAuthenticationRequest,
657cdf0e10cSrcweir rRequest->getContinuations(),
658cdf0e10cSrcweir rtl::OUString());
659cdf0e10cSrcweir return true;
660cdf0e10cSrcweir }
661cdf0e10cSrcweir return false;
662cdf0e10cSrcweir }
663cdf0e10cSrcweir
664cdf0e10cSrcweir bool
handleMasterPasswordRequest(uno::Reference<task::XInteractionRequest> const & rRequest)665cdf0e10cSrcweir UUIInteractionHelper::handleMasterPasswordRequest(
666cdf0e10cSrcweir uno::Reference< task::XInteractionRequest > const & rRequest)
667cdf0e10cSrcweir SAL_THROW((uno::RuntimeException))
668cdf0e10cSrcweir {
669cdf0e10cSrcweir uno::Any aAnyRequest(rRequest->getRequest());
670cdf0e10cSrcweir
671cdf0e10cSrcweir task::MasterPasswordRequest aMasterPasswordRequest;
672cdf0e10cSrcweir if (aAnyRequest >>= aMasterPasswordRequest)
673cdf0e10cSrcweir {
674cdf0e10cSrcweir handleMasterPasswordRequest_(getParentProperty(),
675cdf0e10cSrcweir aMasterPasswordRequest.Mode,
676cdf0e10cSrcweir rRequest->getContinuations());
677cdf0e10cSrcweir return true;
678cdf0e10cSrcweir }
679cdf0e10cSrcweir return false;
680cdf0e10cSrcweir }
681cdf0e10cSrcweir
682cdf0e10cSrcweir bool
handlePasswordRequest(uno::Reference<task::XInteractionRequest> const & rRequest)683cdf0e10cSrcweir UUIInteractionHelper::handlePasswordRequest(
684cdf0e10cSrcweir uno::Reference< task::XInteractionRequest > const & rRequest)
685cdf0e10cSrcweir SAL_THROW((uno::RuntimeException))
686cdf0e10cSrcweir {
687cdf0e10cSrcweir // parameters to be filled for the call to handlePasswordRequest_
688cdf0e10cSrcweir Window * pParent = getParentProperty();
689cdf0e10cSrcweir task::PasswordRequestMode nMode = task::PasswordRequestMode_PASSWORD_ENTER;
690cdf0e10cSrcweir uno::Sequence< uno::Reference< task::XInteractionContinuation > > const & rContinuations = rRequest->getContinuations();
691cdf0e10cSrcweir ::rtl::OUString aDocumentName;
692cdf0e10cSrcweir bool bMSCryptoMode = false;
693cdf0e10cSrcweir bool bIsPasswordToModify = false;
694cdf0e10cSrcweir
695cdf0e10cSrcweir bool bDoHandleRequest = false;
696cdf0e10cSrcweir
697cdf0e10cSrcweir uno::Any aAnyRequest(rRequest->getRequest());
698cdf0e10cSrcweir
699cdf0e10cSrcweir task::DocumentPasswordRequest2 aDocumentPasswordRequest2;
700cdf0e10cSrcweir if (!bDoHandleRequest && (aAnyRequest >>= aDocumentPasswordRequest2))
701cdf0e10cSrcweir {
702cdf0e10cSrcweir nMode = aDocumentPasswordRequest2.Mode;
703cdf0e10cSrcweir aDocumentName = aDocumentPasswordRequest2.Name;
704cdf0e10cSrcweir OSL_ENSURE( bMSCryptoMode == false, "bMSCryptoMode should be false" );
705cdf0e10cSrcweir bIsPasswordToModify = aDocumentPasswordRequest2.IsRequestPasswordToModify;
706cdf0e10cSrcweir
707cdf0e10cSrcweir bDoHandleRequest = true;
708cdf0e10cSrcweir }
709cdf0e10cSrcweir
710cdf0e10cSrcweir task::DocumentPasswordRequest aDocumentPasswordRequest;
711cdf0e10cSrcweir if (!bDoHandleRequest && (aAnyRequest >>= aDocumentPasswordRequest))
712cdf0e10cSrcweir {
713cdf0e10cSrcweir nMode = aDocumentPasswordRequest.Mode;
714cdf0e10cSrcweir aDocumentName = aDocumentPasswordRequest.Name;
715cdf0e10cSrcweir OSL_ENSURE( bMSCryptoMode == false, "bMSCryptoMode should be false" );
716cdf0e10cSrcweir OSL_ENSURE( bIsPasswordToModify == false, "bIsPasswordToModify should be false" );
717cdf0e10cSrcweir
718cdf0e10cSrcweir bDoHandleRequest = true;
719cdf0e10cSrcweir }
720cdf0e10cSrcweir
721cdf0e10cSrcweir task::DocumentMSPasswordRequest2 aDocumentMSPasswordRequest2;
722cdf0e10cSrcweir if (!bDoHandleRequest && (aAnyRequest >>= aDocumentMSPasswordRequest2))
723cdf0e10cSrcweir {
724cdf0e10cSrcweir nMode = aDocumentMSPasswordRequest2.Mode;
725cdf0e10cSrcweir aDocumentName = aDocumentMSPasswordRequest2.Name;
726cdf0e10cSrcweir bMSCryptoMode = true;
727cdf0e10cSrcweir bIsPasswordToModify = aDocumentMSPasswordRequest2.IsRequestPasswordToModify;
728cdf0e10cSrcweir
729cdf0e10cSrcweir bDoHandleRequest = true;
730cdf0e10cSrcweir }
731cdf0e10cSrcweir
732cdf0e10cSrcweir task::DocumentMSPasswordRequest aDocumentMSPasswordRequest;
733cdf0e10cSrcweir if (!bDoHandleRequest && (aAnyRequest >>= aDocumentMSPasswordRequest))
734cdf0e10cSrcweir {
735cdf0e10cSrcweir nMode = aDocumentMSPasswordRequest.Mode;
736cdf0e10cSrcweir aDocumentName = aDocumentMSPasswordRequest.Name;
737cdf0e10cSrcweir bMSCryptoMode = true;
738cdf0e10cSrcweir OSL_ENSURE( bIsPasswordToModify == false, "bIsPasswordToModify should be false" );
739cdf0e10cSrcweir
740cdf0e10cSrcweir bDoHandleRequest = true;
741cdf0e10cSrcweir }
742cdf0e10cSrcweir
743cdf0e10cSrcweir if (bDoHandleRequest)
744cdf0e10cSrcweir {
745cdf0e10cSrcweir handlePasswordRequest_( pParent, nMode, rContinuations,
746cdf0e10cSrcweir aDocumentName, bMSCryptoMode, bIsPasswordToModify );
747cdf0e10cSrcweir return true;
748cdf0e10cSrcweir }
749cdf0e10cSrcweir
750cdf0e10cSrcweir task::PasswordRequest aPasswordRequest;
751cdf0e10cSrcweir if( aAnyRequest >>= aPasswordRequest )
752cdf0e10cSrcweir {
753cdf0e10cSrcweir handlePasswordRequest_(getParentProperty(),
754cdf0e10cSrcweir aPasswordRequest.Mode,
755cdf0e10cSrcweir rRequest->getContinuations(),
756cdf0e10cSrcweir rtl::OUString(),
757cdf0e10cSrcweir false /* bool bMSCryptoMode */,
758cdf0e10cSrcweir false /* bool bIsPasswordToModify */,
759cdf0e10cSrcweir true /* bool bIsSimplePasswordRequest */ );
760cdf0e10cSrcweir return true;
761cdf0e10cSrcweir }
762cdf0e10cSrcweir
763cdf0e10cSrcweir return false;
764cdf0e10cSrcweir }
765