1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_ucbhelper.hxx"
30*cdf0e10cSrcweir #include <com/sun/star/task/XMasterPasswordHandling.hpp>
31*cdf0e10cSrcweir #include <com/sun/star/ucb/URLAuthenticationRequest.hpp>
32*cdf0e10cSrcweir #include <ucbhelper/simpleauthenticationrequest.hxx>
33*cdf0e10cSrcweir 
34*cdf0e10cSrcweir using namespace com::sun::star;
35*cdf0e10cSrcweir using namespace ucbhelper;
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir //=========================================================================
38*cdf0e10cSrcweir SimpleAuthenticationRequest::SimpleAuthenticationRequest(
39*cdf0e10cSrcweir                                       const rtl::OUString & rURL,
40*cdf0e10cSrcweir                                       const rtl::OUString & rServerName,
41*cdf0e10cSrcweir                                       const rtl::OUString & rRealm,
42*cdf0e10cSrcweir                                       const rtl::OUString & rUserName,
43*cdf0e10cSrcweir                                       const rtl::OUString & rPassword,
44*cdf0e10cSrcweir                                       const rtl::OUString & rAccount )
45*cdf0e10cSrcweir {
46*cdf0e10cSrcweir     // Fill request...
47*cdf0e10cSrcweir     ucb::URLAuthenticationRequest aRequest;
48*cdf0e10cSrcweir //    aRequest.Message        = // OUString
49*cdf0e10cSrcweir //    aRequest.Context        = // XInterface
50*cdf0e10cSrcweir     aRequest.Classification = task::InteractionClassification_ERROR;
51*cdf0e10cSrcweir     aRequest.ServerName     = rServerName;
52*cdf0e10cSrcweir //    aRequest.Diagnostic     = // OUString
53*cdf0e10cSrcweir     aRequest.HasRealm       = ( rRealm.getLength() > 0 );
54*cdf0e10cSrcweir     if ( aRequest.HasRealm )
55*cdf0e10cSrcweir         aRequest.Realm = rRealm;
56*cdf0e10cSrcweir     aRequest.HasUserName    = sal_True;
57*cdf0e10cSrcweir     aRequest.UserName       = rUserName;
58*cdf0e10cSrcweir     aRequest.HasPassword    = sal_True;
59*cdf0e10cSrcweir     aRequest.Password       = rPassword;
60*cdf0e10cSrcweir     aRequest.HasAccount     = ( rAccount.getLength() > 0 );
61*cdf0e10cSrcweir     if ( aRequest.HasAccount )
62*cdf0e10cSrcweir         aRequest.Account = rAccount;
63*cdf0e10cSrcweir     aRequest.URL = rURL;
64*cdf0e10cSrcweir 
65*cdf0e10cSrcweir     initialize(aRequest,
66*cdf0e10cSrcweir        sal_False,
67*cdf0e10cSrcweir        sal_True,
68*cdf0e10cSrcweir        sal_True,
69*cdf0e10cSrcweir        aRequest.HasAccount,
70*cdf0e10cSrcweir        sal_True,
71*cdf0e10cSrcweir        sal_False );
72*cdf0e10cSrcweir }
73*cdf0e10cSrcweir //=========================================================================
74*cdf0e10cSrcweir SimpleAuthenticationRequest::SimpleAuthenticationRequest(
75*cdf0e10cSrcweir                                       const rtl::OUString & rURL,
76*cdf0e10cSrcweir                                       const rtl::OUString & rServerName,
77*cdf0e10cSrcweir                                       const rtl::OUString & rRealm,
78*cdf0e10cSrcweir                                       const rtl::OUString & rUserName,
79*cdf0e10cSrcweir                                       const rtl::OUString & rPassword,
80*cdf0e10cSrcweir                                       const rtl::OUString & rAccount,
81*cdf0e10cSrcweir                                       sal_Bool bAllowPersistentStoring,
82*cdf0e10cSrcweir                                       sal_Bool bAllowUseSystemCredentials )
83*cdf0e10cSrcweir {
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir     // Fill request...
86*cdf0e10cSrcweir     ucb::URLAuthenticationRequest aRequest;
87*cdf0e10cSrcweir //    aRequest.Message        = // OUString
88*cdf0e10cSrcweir //    aRequest.Context        = // XInterface
89*cdf0e10cSrcweir     aRequest.Classification = task::InteractionClassification_ERROR;
90*cdf0e10cSrcweir     aRequest.ServerName     = rServerName;
91*cdf0e10cSrcweir //    aRequest.Diagnostic     = // OUString
92*cdf0e10cSrcweir     aRequest.HasRealm       = ( rRealm.getLength() > 0 );
93*cdf0e10cSrcweir     if ( aRequest.HasRealm )
94*cdf0e10cSrcweir         aRequest.Realm = rRealm;
95*cdf0e10cSrcweir     aRequest.HasUserName    = sal_True;
96*cdf0e10cSrcweir     aRequest.UserName       = rUserName;
97*cdf0e10cSrcweir     aRequest.HasPassword    = sal_True;
98*cdf0e10cSrcweir     aRequest.Password       = rPassword;
99*cdf0e10cSrcweir     aRequest.HasAccount     = ( rAccount.getLength() > 0 );
100*cdf0e10cSrcweir     if ( aRequest.HasAccount )
101*cdf0e10cSrcweir         aRequest.Account = rAccount;
102*cdf0e10cSrcweir     aRequest.URL = rURL;
103*cdf0e10cSrcweir 
104*cdf0e10cSrcweir     initialize(aRequest,
105*cdf0e10cSrcweir        sal_False,
106*cdf0e10cSrcweir        sal_True,
107*cdf0e10cSrcweir        sal_True,
108*cdf0e10cSrcweir        aRequest.HasAccount,
109*cdf0e10cSrcweir        bAllowPersistentStoring,
110*cdf0e10cSrcweir        bAllowUseSystemCredentials );
111*cdf0e10cSrcweir }
112*cdf0e10cSrcweir 
113*cdf0e10cSrcweir //=========================================================================
114*cdf0e10cSrcweir SimpleAuthenticationRequest::SimpleAuthenticationRequest(
115*cdf0e10cSrcweir                                       const rtl::OUString & rURL,
116*cdf0e10cSrcweir                                       const rtl::OUString & rServerName,
117*cdf0e10cSrcweir                                       EntityType eRealmType,
118*cdf0e10cSrcweir                                       const rtl::OUString & rRealm,
119*cdf0e10cSrcweir                                       EntityType eUserNameType,
120*cdf0e10cSrcweir                                       const rtl::OUString & rUserName,
121*cdf0e10cSrcweir                                       EntityType ePasswordType,
122*cdf0e10cSrcweir                                       const rtl::OUString & rPassword,
123*cdf0e10cSrcweir                                       EntityType eAccountType,
124*cdf0e10cSrcweir                                       const rtl::OUString & rAccount )
125*cdf0e10cSrcweir {
126*cdf0e10cSrcweir     // Fill request...
127*cdf0e10cSrcweir     ucb::URLAuthenticationRequest aRequest;
128*cdf0e10cSrcweir //    aRequest.Message        = // OUString
129*cdf0e10cSrcweir //    aRequest.Context        = // XInterface
130*cdf0e10cSrcweir     aRequest.Classification = task::InteractionClassification_ERROR;
131*cdf0e10cSrcweir     aRequest.ServerName     = rServerName;
132*cdf0e10cSrcweir //    aRequest.Diagnostic     = // OUString
133*cdf0e10cSrcweir     aRequest.HasRealm       = eRealmType != ENTITY_NA;
134*cdf0e10cSrcweir     if ( aRequest.HasRealm )
135*cdf0e10cSrcweir         aRequest.Realm = rRealm;
136*cdf0e10cSrcweir     aRequest.HasUserName    = eUserNameType != ENTITY_NA;
137*cdf0e10cSrcweir     if ( aRequest.HasUserName )
138*cdf0e10cSrcweir         aRequest.UserName = rUserName;
139*cdf0e10cSrcweir     aRequest.HasPassword    = ePasswordType != ENTITY_NA;
140*cdf0e10cSrcweir     if ( aRequest.HasPassword )
141*cdf0e10cSrcweir         aRequest.Password = rPassword;
142*cdf0e10cSrcweir     aRequest.HasAccount     = eAccountType != ENTITY_NA;
143*cdf0e10cSrcweir     if ( aRequest.HasAccount )
144*cdf0e10cSrcweir         aRequest.Account = rAccount;
145*cdf0e10cSrcweir     aRequest.URL = rURL;
146*cdf0e10cSrcweir 
147*cdf0e10cSrcweir     initialize(aRequest,
148*cdf0e10cSrcweir        eRealmType == ENTITY_MODIFY,
149*cdf0e10cSrcweir        eUserNameType == ENTITY_MODIFY,
150*cdf0e10cSrcweir        ePasswordType == ENTITY_MODIFY,
151*cdf0e10cSrcweir        eAccountType == ENTITY_MODIFY,
152*cdf0e10cSrcweir        sal_True,
153*cdf0e10cSrcweir        sal_False );
154*cdf0e10cSrcweir }
155*cdf0e10cSrcweir 
156*cdf0e10cSrcweir //=========================================================================
157*cdf0e10cSrcweir SimpleAuthenticationRequest::SimpleAuthenticationRequest(
158*cdf0e10cSrcweir                                       const rtl::OUString & rURL,
159*cdf0e10cSrcweir                                       const rtl::OUString & rServerName,
160*cdf0e10cSrcweir                                       EntityType eRealmType,
161*cdf0e10cSrcweir                                       const rtl::OUString & rRealm,
162*cdf0e10cSrcweir                                       EntityType eUserNameType,
163*cdf0e10cSrcweir                                       const rtl::OUString & rUserName,
164*cdf0e10cSrcweir                                       EntityType ePasswordType,
165*cdf0e10cSrcweir                                       const rtl::OUString & rPassword,
166*cdf0e10cSrcweir                                       EntityType eAccountType,
167*cdf0e10cSrcweir                                       const rtl::OUString & rAccount,
168*cdf0e10cSrcweir                                       sal_Bool bAllowPersistentStoring,
169*cdf0e10cSrcweir                                       sal_Bool bAllowUseSystemCredentials )
170*cdf0e10cSrcweir {
171*cdf0e10cSrcweir     // Fill request...
172*cdf0e10cSrcweir     ucb::URLAuthenticationRequest aRequest;
173*cdf0e10cSrcweir //    aRequest.Message        = // OUString
174*cdf0e10cSrcweir //    aRequest.Context        = // XInterface
175*cdf0e10cSrcweir     aRequest.Classification = task::InteractionClassification_ERROR;
176*cdf0e10cSrcweir     aRequest.ServerName     = rServerName;
177*cdf0e10cSrcweir //    aRequest.Diagnostic     = // OUString
178*cdf0e10cSrcweir     aRequest.HasRealm       = eRealmType != ENTITY_NA;
179*cdf0e10cSrcweir     if ( aRequest.HasRealm )
180*cdf0e10cSrcweir         aRequest.Realm = rRealm;
181*cdf0e10cSrcweir     aRequest.HasUserName    = eUserNameType != ENTITY_NA;
182*cdf0e10cSrcweir     if ( aRequest.HasUserName )
183*cdf0e10cSrcweir         aRequest.UserName = rUserName;
184*cdf0e10cSrcweir     aRequest.HasPassword    = ePasswordType != ENTITY_NA;
185*cdf0e10cSrcweir     if ( aRequest.HasPassword )
186*cdf0e10cSrcweir         aRequest.Password = rPassword;
187*cdf0e10cSrcweir     aRequest.HasAccount     = eAccountType != ENTITY_NA;
188*cdf0e10cSrcweir     if ( aRequest.HasAccount )
189*cdf0e10cSrcweir         aRequest.Account = rAccount;
190*cdf0e10cSrcweir     aRequest.URL = rURL;
191*cdf0e10cSrcweir 
192*cdf0e10cSrcweir     initialize(aRequest,
193*cdf0e10cSrcweir        eRealmType == ENTITY_MODIFY,
194*cdf0e10cSrcweir        eUserNameType == ENTITY_MODIFY,
195*cdf0e10cSrcweir        ePasswordType == ENTITY_MODIFY,
196*cdf0e10cSrcweir        eAccountType == ENTITY_MODIFY,
197*cdf0e10cSrcweir        bAllowPersistentStoring,
198*cdf0e10cSrcweir        bAllowUseSystemCredentials );
199*cdf0e10cSrcweir }
200*cdf0e10cSrcweir 
201*cdf0e10cSrcweir //=========================================================================
202*cdf0e10cSrcweir void SimpleAuthenticationRequest::initialize(
203*cdf0e10cSrcweir       const ucb::URLAuthenticationRequest & rRequest,
204*cdf0e10cSrcweir       sal_Bool bCanSetRealm,
205*cdf0e10cSrcweir       sal_Bool bCanSetUserName,
206*cdf0e10cSrcweir       sal_Bool bCanSetPassword,
207*cdf0e10cSrcweir       sal_Bool bCanSetAccount,
208*cdf0e10cSrcweir       sal_Bool bAllowPersistentStoring,
209*cdf0e10cSrcweir       sal_Bool bAllowUseSystemCredentials )
210*cdf0e10cSrcweir {
211*cdf0e10cSrcweir     setRequest( uno::makeAny( rRequest ) );
212*cdf0e10cSrcweir 
213*cdf0e10cSrcweir     // Fill continuations...
214*cdf0e10cSrcweir     uno::Sequence< ucb::RememberAuthentication > aRememberModes(
215*cdf0e10cSrcweir         bAllowPersistentStoring ? 3 : 2 );
216*cdf0e10cSrcweir     aRememberModes[ 0 ] = ucb::RememberAuthentication_NO;
217*cdf0e10cSrcweir     aRememberModes[ 1 ] = ucb::RememberAuthentication_SESSION;
218*cdf0e10cSrcweir     if (bAllowPersistentStoring)
219*cdf0e10cSrcweir         aRememberModes[ 2 ] = ucb::RememberAuthentication_PERSISTENT;
220*cdf0e10cSrcweir 
221*cdf0e10cSrcweir     m_xAuthSupplier
222*cdf0e10cSrcweir         = new InteractionSupplyAuthentication(
223*cdf0e10cSrcweir                 this,
224*cdf0e10cSrcweir                 bCanSetRealm,
225*cdf0e10cSrcweir                 bCanSetUserName,
226*cdf0e10cSrcweir                 bCanSetPassword,
227*cdf0e10cSrcweir                 bCanSetAccount,
228*cdf0e10cSrcweir                 aRememberModes, // rRememberPasswordModes
229*cdf0e10cSrcweir                 ucb::RememberAuthentication_SESSION, // eDefaultRememberPasswordMode
230*cdf0e10cSrcweir                 aRememberModes, // rRememberAccountModes
231*cdf0e10cSrcweir                 ucb::RememberAuthentication_SESSION, // eDefaultRememberAccountMode
232*cdf0e10cSrcweir                 bAllowUseSystemCredentials, // bCanUseSystemCredentials,
233*cdf0e10cSrcweir                 false // bDefaultUseSystemCredentials
234*cdf0e10cSrcweir             );
235*cdf0e10cSrcweir 
236*cdf0e10cSrcweir     uno::Sequence<
237*cdf0e10cSrcweir         uno::Reference< task::XInteractionContinuation > > aContinuations( 3 );
238*cdf0e10cSrcweir     aContinuations[ 0 ] = new InteractionAbort( this );
239*cdf0e10cSrcweir     aContinuations[ 1 ] = new InteractionRetry( this );
240*cdf0e10cSrcweir     aContinuations[ 2 ] = m_xAuthSupplier.get();
241*cdf0e10cSrcweir 
242*cdf0e10cSrcweir     setContinuations( aContinuations );
243*cdf0e10cSrcweir }
244