merge the formfield patch from ooo-build
[ooovba.git] / testautomation / global / tools / includes / optional / t_security_tools.inc
blobc00c613749a8bab90058ac11f70c2c5307c6f421
1 'encoding UTF-8  Do not remove or change this line!
2 '**************************************************************************
3 '* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 '* 
5 '* Copyright 2008 by Sun Microsystems, Inc.
6 '*
7 '* OpenOffice.org - a multi-platform office productivity suite
8 '*
9 '* $RCSfile: t_security_tools.inc,v $
11 '* $Revision: 1.1 $
13 '* last change: $Author: jsk $ $Date: 2008-06-20 07:58:56 $
15 '* This file is part of OpenOffice.org.
17 '* OpenOffice.org is free software: you can redistribute it and/or modify
18 '* it under the terms of the GNU Lesser General Public License version 3
19 '* only, as published by the Free Software Foundation.
21 '* OpenOffice.org is distributed in the hope that it will be useful,
22 '* but WITHOUT ANY WARRANTY; without even the implied warranty of
23 '* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24 '* GNU Lesser General Public License version 3 for more details
25 '* (a copy is included in the LICENSE file that accompanied this code).
27 '* You should have received a copy of the GNU Lesser General Public License
28 '* version 3 along with OpenOffice.org.  If not, see
29 '* <http://www.openoffice.org/license.html>
30 '* for a copy of the LGPLv3 License.
32 '/************************************************************************
34 '*  owner : joerg.skottke@sun.com
36 '*  short description : Tools to ease testing of security related funtionality
38 '\******************************************************************************
40 function hSetPasswordRecommendation( bEnable as boolean ) as boolean
42     '///<h3>Toggle Tools/Options/OOo/Security: Password recommendation</h3>
43     '///<u>Input</u>:
44     '///<ol>
45     '///+<li>Mode (boolean)</li>
46     '///<ul>
47     '///+<li>TRUE: Switch password recommendation on</li>
48     '///+<li>FALSE: Switch password recommendation off</li>
49     '///</ul>
50     '///</ol>
52     '///<u>Returns</u>:
53     '///<ol>
54     '///+<li>Prior state (boolean)</li>
55     '///<ul>
56     '///+<li>TRUE: Password recommendation was on</li>
57     '///+<li>FALSE: Password recommendation was off</li>
58     '///</ul>
59     '///</ol>
60     
61     '///<u>Description</u>:
62     '///<ul>
64     const CFN = "hSetPasswordRecommendation::"
66     '///+<li>Open Tools/Options</li>
67     ToolsOptions
68     
69     kontext "OptionenDlg"
70     if ( OptionenDlg.exists( 2 ) ) then
72         '///+<li>Go to the security page</li>
73         hToolsOptions( "STAROFFICE" , "SECURITY" )
75         '///+<li>Click on the &quot;Options...&quot; button</li>
76         kontext "TabSecurity"
77         Options.click()
78         
79         kontext "TabSecurityOptionsAndWarnings"
80         if ( TabSecurityOptionsAndWarnings.exists( 1 ) ) then
81         
82             '///+<li>Retrieve the current setting for passwor recommendation</li>     
83             if ( RecommendPasswordProtectionOnSaving.isChecked() ) then
84                 hSetPasswordRecommendation() = true
85             else
86                 hSetPasswordRecommendation() = false
87             endif
88                                                     
89             '///+<li>Set the requested state</li>                                                                                   
90             if ( bEnable ) then
91                 printlog( CFN & "Enabled password recommendation" )
92                 RecommendPasswordProtectionOnSaving.check()
93             else
94                 printlog( CFN & "Disabled password recommendation" )
95                 RecommendPasswordProtectionOnSaving.uncheck()
96             endif
97             
98             TabSecurityOptionsAndWarnings.ok()
99         else
100             warnlog( "Failed to open security options page" )
101         endif
103         '///+<li>Close Tools/Options</li>
104         Kontext "ToolsOptionsDlg"
105         ToolsOptionsDlg.ok()
106     
107     else
108         warnlog( "Failed to open Tools/Options" )
109     endif
110     '///</ul>
112 end function
114 '******************************************************************************
116 function hOpenDigitalSignaturesDialog() as boolean
118     '///<h3>Open the Digital Signatures Dialog via File-Menu</h3>
119     '///<u>Input</u>:
120     '///<ol>
121     '///+<li>Nothing</li>
122     '///</ol>
124     '///<u>Returns</u>:
125     '///<ol>
126     '///+<li>Errorcondition (boolean)</li>
127     '///<ul>
128     '///+<li>TRUE: The Digital Signatures Dialog is open</li>
129     '///+<li>FALSE: The Digital Signatures Dialog is not open</li>
130     '///</ul>
131     '///</ol>
133     '///<u>Description</u>:
134     '///<ul>
136     dim brc as boolean
137     const CFN = "hOpenDigitalSignaturesDialog::"
139     '///+<li>Open the file-menu</li>
140     call hUseMenu()
141     call hMenuSelectNr( 1 )
142                                                                                 
143     '///+<li>Select &quot;Digital signatures...&quot;</li>
144     try
145         if ( ucase( gApplication ) = "MATH" ) then
146             call hMenuSelectNr( 14 )
147         else
148             call hMenuSelectNr( 15 )
149         endif
150     catch
151         warnlog( CFN & "Failed to execute menuitem <Digital Signature...>" )
152     endcatch
154     ' At this stage either the digital signatures dialog or the messagebox
155     ' <The document needs to be saved> is open. In the latter case the function
156     ' returns false. The possibility that neither of both dialogs are open
157     ' must be handled in the parent function. This means there is no warning
158     ' here either
160     '///+<li>Verify that the Digital Signatures dialog is open</li>
161     kontext "DigitalSignature"
162     if ( DigitalSignature.exists() ) then
163         printlog( CFN & "Digital signatures is open" )
164         brc = true
165     else
166         brc = false
167     endif
169     '///</ul>
170     hOpenDigitalSignaturesDialog() = brc
172 end function
174 '*******************************************************************************
176 function hAllowMacroExecution() as boolean
178     '///<h3>Allow macro execution on Macro Security Warning dialog</h3>
179     '///<u>Input</u>:
180     '///<ol>
181     '///+<li>Nothing</li>
182     '///</ol>
184     '///<u>Returns</u>:
185     '///<ol>
186     '///+<li>Errorcondition (boolean)</li>
187     '///<ul>
188     '///+<li>TRUE: Macro dialog is open, successfully clicked &quot;Run&quot;</li>
189     '///+<li>FALSE: Dialog was not opened</li>
190     '///</ul>
191     '///</ol>
193     '///<u>Description</u>:
194     '///<ul>
196     const CFN = "hAllowMacroExecution::"
198     '///+<li>Verify that the Macro security Warning is displayed</li>
199     kontext "SecurityWarning"
200     if ( SecurityWarning.exists( 5 ) ) then
202         '///+<li>Click &quot;Run&quot; to allow macro execution</li>
203         SecurityWarning.ok()
204         hAllowMacroExecution() = true
205         printlog( CFN & "Allowed macro execution" )
206     else
207         hAllowMacroExecution() = false
208         printlog( CFN & "Macro dialog not displayed" )
209     endif
210     '///</ul>
212 end function
214 '*******************************************************************************
216 function hDenyMacroExecution() as boolean
218     '///<h3>Deny macro execution on Macro Security Warning dialog</h3>
219     '///<u>Input</u>:
220     '///<ol>
221     '///+<li>Nothing</li>
222     '///</ol>
224     '///<u>Returns</u>:
225     '///<ol>
226     '///+<li>Errorcondition (boolean)</li>
227     '///<ul>
228     '///+<li>TRUE: Macro dialog is open, successfully clicked &quot;Deny&quot;</li>
229     '///+<li>FALSE: Dialog was not opened</li>
230     '///</ul>
231     '///</ol>
233     '///<u>Description</u>:
234     '///<ul>
236     const CFN = "hDenyMacroExecution::"
238     '///+<li>Verify that the Macro security Warning is displayed</li>
239     kontext "SecurityWarning"
240     if ( SecurityWarning.exists() ) then
242         '///+<li>Click &quot;Cancel&quot; to deny execution</li>
243         SecurityWarning.cancel()
244         hDenyMacroExecution() = true
245         printlog( CFN & "Denied macro execution" )
246     else
247         hDenyMacroExecution() = false
248         printlog( CFN & "Macro dialog not displayed" )
249     endif
250     '///</ul>
252 end function
254 '*******************************************************************************
256 function hSwitchMacroSecurityTab( cTab as string )
258     '///<h3>Switch between Security Level and Trusted Paths</h3>
259     '///<u>Input</u>:
260     '///<ol>
261     '///+<li>The Tabpage to be activated (string). Valid options are:</li>
262     '///<ul>
263     '///+<li>&quot;SecurityLevel&quot;</li>
264     '///+<li>&quot;TrustedPaths&quot;</li>
265     '///</ul>
266     '///</ol>
268     '///<u>Returns</u>:
269     '///<ol>
270     '///+<li>Nothing</li>
271     '///</ol>
273     '///<u>Description</u>:
274     '///<ul>
276     kontext
277    
278     '///+<li>Switch to the given Tabpage</li>
279     select case ( lcase( cTab ) )
280     case "securitylevel"   : active.setPage TabSecurityLevel
281     case "trustedpaths"    : active.setPage TabTrustedSources
282     end select 
284     '///</ul>
286 end function
288 '*******************************************************************************
290 function hAddTrustedPath( cPath as string ) as boolean
292     '///<h3>Add a directory to the list of trusted paths</h3>
293     '///<u>Input</u>:
294     '///<ol>
295     '///+<li>Fully qualified path to the directory (string)</li>
296     '///</ol>
298     '///<u>Return</u>:
299     '///<ol>
300     '///+<li>Errorcondition (boolean)</li>
301     '///<ul>
302     '///+<li>TRUE = Path was successfully added</li>
303     '///+<li>FALSE = Failed to add the path</li>
304     '///</ul>
305     '///</ol>
307     const CFN = "hAddTrustedPath::"
309     dim iPathCount as integer
310     dim brc as boolean
312     '///<u>Description</u>:
313     '///<ul>
315     '///+<li>Open Tools/Options</li>
316     ToolsOptions
318     '///+<li>Switch to the Security page</li>
319     hToolsOptions( "StarOffice" , "Security" )
321     '///+<li>Click Macro Security</li>
322     MacroSecurity.click()
324     '///+<li>Switch to the Trusted Paths tab</li>
325     hSwitchMacroSecurityTab( "trustedpaths" )
326     kontext "TabTrustedSources"
328     '///+<li>Get the number of currently listed items from the list</li>
329     iPathCount = LocationsListBox.getItemCount()
331     '///+<li>Click the &quot;Add&quot; button</li>
332     LocationsAdd.click()
334     '///+<li>Enter a path to some files containing macros</li>
335     kontext "OeffnenDlg"
336     DateiName.setText( cPath )
338     '///+<li>Click &quot;Select&quot;</li>
339     Oeffnen.click()
341     '///+<li>Verify that the item has been added to the list</li>
342     kontext "TabTrustedSources"
343     if ( LocationsListBox.getItemCount() <> ( iPathCount + 1 ) ) then
344         warnlog( CFN & "Incorrect number of items in locations listbox" )
345         brc = false
346     else
347         printlog( CFN & "Added: " & cPath )
348         brc = true
349     endif
351     '///+<li>Close the dialog</li>
352     TabTrustedSources.ok()
354     '///+<li>Close Tools/Options</li>
355     Kontext "OptionenDlg"
356     OptionenDlg.ok()
358     hAddTrustedPath() = brc
360     '///</ul>
362 end function
364 '*******************************************************************************
366 function hRemoveTrustedPath( cPath as string ) as boolean
368     '///<h3>Remove a directory from the list of trusted paths</h3>
369     '///<u>Input</u>:
370     '///<ol>
371     '///+<li>Fully qualified path to the directory (string)</li>
372     '///</ol>
374     '///<u>Return</u>:
375     '///<ol>
376     '///+<li>Errorcondition (boolean)</li>
377     '///<ul>
378     '///+<li>TRUE = Path was successfully added</li>
379     '///+<li>FALSE = Failed to add the path</li>
380     '///</ul>
381     '///</ol>
383     const CFN = "hRemoveTrustedPath()"
385     dim iPathCount as integer
386     dim iCurrentPathItem as integer
388     dim brc as boolean
389         brc = false
391     '///<u>Description</u>:
392     '///<ul>
394     '///+<li>Open Tools/Options</li>
395     ToolsOptions
397     '///+<li>Switch to the Security page</li>
398     hToolsOptions( "StarOffice" , "Security" )
400     '///+<li>Click Macro Security</li>
401     MacroSecurity.click()
403     '///+<li>Switch to the Trusted Paths tab</li>
404     hSwitchMacroSecurityTab( "trustedpaths" )
405     kontext "TabTrustedSources"
407     '///+<li>Get the number of currently listed items from the list</li>
408     iPathCount = LocationsListBox.getItemCount()
410     '///+<li>Find the entry in the list</li>
411     for iCurrentPathItem = 1 to iPathCount
413         '///+<li>If it is there, delete it</li>
414         LocationsListBox.select( iCurrentPathItem )
415         if ( LocationsListBox.getSelText() = cPath ) then
416             LocationsRemove.click()
417             printlog( CFN & "Removed item at pos. " & iCurrentPathItem )
418             brc = true
419             exit for
420         endif
422     next iCurrentPathItem
423          
424     '///+<li>Close the dialog</li>
425     TabTrustedSources.ok()
427     '///+<li>Close Tools/Options</li>
428     Kontext "OptionenDlg"
429     OptionenDlg.ok()
431     if ( not brc ) then
432         printlog( CFN & "The trusted path was not found in the list" )
433     endif
435     hRemoveTrustedPath() = brc
437     '///</ul>
439 end function
442 '*******************************************************************************
444 function hSecurityEnterPasswordOnSave( cPassword as string ) as boolean
447     '///<h3>Enter password when saving a document</h3>
448     '///<i>This function enters a password into the password dialog if the &quot;
449     '///+ Save with password&quot; checkbox is checked. It will automatically
450     '///+ generate a faulty password to be entered on first try (to see whether
451     '///+ the &quot;Invalid password confirmation&quot; dialog pops up, on second
452     '///+ attempt the password is confirmed correctly and thus the document should
453     '///+ save ok. The office should return to the document, the File Save dialog
454     '///+ should close after save.</i><br><br>
456     '///<u>Parameter(s):</u><br>
457     '///<ol>
459     '///+<li>Password to use (String)</li>
460     '///<ul>
461     '///+<li>Password should contain strange characters and glyphs if possible</li>
462     '///</ul>
464     '///</ol>
467     '///<u>Returns:</u><br>
468     '///<ol>
469     '///+<li>Errorcondition (Boolean)</li>
470     '///<ul>
471     '///+<li>TRUE if all went well</li>
472     '///+<li>FALSE on any error</li>
473     '///</ul>
474     '///</ol>
476     const CFN = "hSecurityEnterPasswordOnSave::"
477     printlog( CFN & "Enter" )
478     dim brc as boolean 'a multi purpose boolean returnvalue
479         brc = true
481     '///<u>Description:</u>
482     '///<ul>
483     '///+<li>Verify that the password dialog is present</li>
484     kontext "PasswordFileSave"
485     if ( PasswordFileSave.exists( 2 ) ) then
486     
487         printlog( CFN & "Password dialog is displayed" )
488     
489         '///+<li>Enter the password</li>
490         Password.setText( cPassword )
491         
492         '///+<li>Confirm with incorrect password (e.g. append a number at random)</li>
493         PasswordConfirm.setText( cPassword & "1" )
494         
495         '///+<li>Click on OK</li>
496         PasswordFileSave.ok()
497         
498         '///+<li>There should be a warning about a faulty password confirmation</li>
499         kontext "Active"
500         if ( Active.exists( 1 ) ) then
501             printlog( CFN & "Message: " & Active.getText() )
502             
503             '///+<li>Close messagebox with OK</li>
504             Active.OK()
505         else
506             qaerrorlog( CFN & "Warning about faulty password confirmation is missing" )
507             brc = false
508         endif
509         
510         '///+<li>We should now be back on the password dialog</li>
511         kontext "PasswordFileSave"
512         if ( PasswordFileSave.exists( 2 ) ) then
513         
514             printlog( CFN & "Password dialog is displayed" )
515     
516             '///+<li>Enter the password</li>
517             Password.setText( cPassword )
518         
519             '///+<li>Confirm with correct password</li>
520             PasswordConfirm.setText( cPassword )
521         
522             '///+<li>Click on OK</li>
523             PasswordFileSave.ok()
524             
525         else
526             
527             qaerrorlog( CFN & "The password dialog is missing after confirmation error" )     
528             brc = false
529         
530         endif
531         
532     else
533     
534         qaerrorlog( CFN & "The password dialog did not open" )
535         brc = false
536         
537     endif
538     
539     '///+<li>Verify that the &quot;File Save&quot; dialog is closed after saving</li>
540     kontext "SpeichernDlg"
541     if ( SpeichernDlg.exists() ) then
542         qaerrorlog( CFN & "File Save dialog is open, cancelling." )
543         SpeichernDlg.cancel()
544         brc = false
545     endif
546     '///</ul>
548     printlog( CFN & "Exit with result: " & brc )
549     hSecurityEnterPasswordOnSave() = brc 
551 end function
554 '*******************************************************************************
556 function hSecurityEnterPasswordOnLoad( cPassword as string, bValid as boolean ) as boolean
558     use "global\tools\includes\optional\t_stringtools.inc"
560     '///<h3>Enter a password while loading a document</h3>
561     '///<i>Enters a valid or invalid password while loading a passworded file</i><br><br>
563     '///<u>Parameter(s):</u><br>
564     '///<ol>
566     '///+<li>Password (String)</li>
567     '///<ul>
568     '///+<li>The password should contain special characters and glyphs</li>
569     '///</ul>
571     '///+<li>Password validity (Boolean)</li>
572     '///<ul>
573     '///+<li>TRUE: The password is correct, the document should load</li>
574     '///+<li>FALSE: The password is incorrect, the document should not load</li>
575     '///</ul>
577     '///</ol>
580     '///<u>Returns:</u><br>
581     '///<ol>
582     '///+<li>Errorcondition (Boolean)</li>
583     '///<ul>
584     '///+<li>TRUE if the password protection worked as expected</li>
585     '///+<li>FALSE on any error</li>
586     '///</ul>
587     '///</ol>
589     const CFN = "hSecurityEnterPasswordOnLoad::"
590     printlog( CFN & "Enter with option (Password): " & cPassword )
591     printlog( CFN & "Enter with option (Validity): " & bValid )
592     dim brc as boolean 'a multi purpose boolean returnvalue
593         brc = true
594     dim cMsg as string
596     '///<u>Description:</u>
597     '///<ul>
598     '///+<li>Verify that the password dialog exists</li>
599     kontext "PasswordFileOpen"
600     if ( PasswordFileOpen.exists( 3 ) ) then
601     
602         '///+<li>Enter password, click OK</li>
603         PasswortName.setText( cPassword )
604         PasswordFileOpen.ok()
605         
606         '///+<li>If the password was incorrect:</li>
607         '///<ul>
608         if ( not bValid ) then
609         
610             '///+<li>Look for a warning message</li>
611             kontext "Active"
612             if ( Active.exists( 1 ) ) then
613             
614                 cMsg = Active.getText()
615                 cMsg = hRemoveLineBreaks( cMsg )
616                 if ( bValid ) then
617                     warnlog( CFN & "Message: " & cMsg )
618                 else
619                     printlog( CFN & "Message: " & cMsg )
620                 endif
621                 
622                 '///+<li>Close the messagebox</li>
623                 Active.ok()
624                 
625                 '///+<li>Close the Password dialog with &quot;Cancel&quot;</li>
626                 kontext "PasswordFileOpen"
627                 if ( PasswordFileopen.exists( 2 ) ) then
628                 
629                     PasswordFileOpen.cancel()
630                     
631                 else
632                 
633                     qaerrorlog( CFN & "Password dialog is not present" )
634                     brc = false
635                     
636                 endif
637             else
638                 
639                 qaerrorlog( CFN & "Warning about incorrect password is missing" )
640                 brc = false
641     
642             endif
643             
644         else
645         
646             kontext "Active"
647             if ( Active.exists( 1 ) ) then
648                 
649                 cMsg = Active.getText()
650                 cMsg = hRemoveLIneBreaks( cMsg )
651                 qaerrorlog( CFN & "Unexpected messagebox: " & cMsg )
652                 brc = false
653                 
654             endif
655             
656         endif
657         '///</ul>
658         
659     else
660     
661         qaerrorlog( CFN & "Password dialog is missing" )
662         brc = false
663         
664     endif
665     '///</ul>
667     printlog( CFN & "Exit with result:" & brc )
668     hSecurityEnterPasswordOnLoad() = brc
670 end function