From version 1.1 >
edited by superadmin
on 2021/06/11 09:24
To version < 2.1
edited by superadmin
on 2021/06/22 16:59
Change comment: Install extension [org.xwiki.platform:xwiki-platform-administration-ui/12.10.8]

Summary

Details

Page properties
Content
... ... @@ -1,31 +1,85 @@
1 1  {{velocity}}
2 2  #set($email = "$!request.get('e')")
3 -#if($email == '')
3 +#if($email == '' || !$services.csrf.isTokenValid($request.form_token))
4 4  {{translation key="xe.admin.forgotUsername.instructions"/}}
5 5  
6 6  {{html}}
7 7   <form method="post" action="$doc.getURL()" class="xformInline">
8 - <div><label for="e">$services.localization.render('xe.admin.forgotUsername.email.label')</label> <input type="text" id="e" name="e"/> <span class="buttonwrapper"><input type="submit" value="$services.localization.render('xe.admin.forgotUsername.submit')" class="button"/></span></div>
8 + <div>
9 + <label for="e">$services.localization.render('xe.admin.forgotUsername.email.label')</label>
10 + <input type="text" id="e" name="e"/>
11 + <input type="hidden" name="form_token" value="$services.csrf.getToken()"/>
12 + <span class="buttonwrapper">
13 + <input type="submit" value="$services.localization.render('xe.admin.forgotUsername.submit')" class="button"/>
14 + </span>
15 + </div>
9 9   </form>
10 10  {{/html}}
11 11  
12 12  #else
13 - #set($results = $services.query.hql(", BaseObject obj, StringProperty prop where obj.name = doc.fullName and obj.className = 'XWiki.XWikiUsers' and prop.id.id = obj.id and prop.id.name = 'email' and LOWER(prop.value) = ?").bindValues([$email.toLowerCase()]).execute())
14 - #if($results.size() == 0)
15 - {{translation key="xe.admin.forgotUsername.error.noAccount"/}}
20 + #set($query = $services.query.hql(", BaseObject obj, StringProperty prop where obj.name = doc.fullName and obj.className = 'XWiki.XWikiUsers' and prop.id.id = obj.id and prop.id.name = 'email' and LOWER(prop.value) = :email").bindValue('email', $email.toLowerCase()))
21 + #set($results = $query.execute())
22 + ## If local user does not exist check global user
23 + #if($results.size() == 0 && ${xcontext.database} != ${xcontext.mainWikiName})
24 + #set($results = $query.setWiki("${xcontext.mainWikiName}").execute())
25 + #end
26 + #set ($emailError = false)
27 + #if($results.size() != 0)
28 + ## Send the email
29 + #set ($from = $services.mail.sender.configuration.fromAddress)
30 + #if ("$!from" == '')
31 + #set ($from = "no-reply@${request.serverName}")
32 + #end
33 + ## The mail template use $usernames to display the results.
34 + #set ($usernames = $results)
35 + #set ($mailTemplateReference = $services.model.createDocumentReference('', 'XWiki', 'ForgotUsernameMailContent'))
36 + #set ($mailParameters = {'from' : $from, 'to' : $email, 'language' : $xcontext.locale})
37 + #set ($message = $services.mail.sender.createMessage('template', $mailTemplateReference, $mailParameters))
38 + #set ($discard = $message.setType('Forgot Username'))
39 + #macro (displayError $text)
16 16  
17 - [[{{translation key="xe.admin.forgotUsername.error.retry"/}}>>$doc.fullName]] | [[{{translation key="xe.admin.forgotUsername.login"/}}>>path:${xwiki.getURL('XWiki.XWikiLogin', 'login')}]]
18 - #elseif($results.size() == 1)
19 - $services.localization.render('xe.admin.forgotUsername.result', ["**${results.get(0).substring($results.get(0).indexOf('.')).substring(1)}**"])
41 + {{html}}
42 + <div class="xwikirenderingerror" title="Click to get more details about the error" style="cursor: pointer;">
43 + $services.localization.render('xe.admin.forgotUsername.error.emailFailed')
44 + </div>
45 + <div class="xwikirenderingerrordescription hidden">
46 + <pre>${text}</pre>
47 + </div>
48 + {{/html}}
20 20  
21 - [[{{translation key="xe.admin.forgotUsername.login"/}}>>path:${xwiki.getURL('XWiki.XWikiLogin', 'login')}]]
22 - #else
23 - {{translation key="xe.admin.forgotUsername.multipleResults"/}}
24 - #foreach($item in $results)
25 - * **${item.substring($item.indexOf('.')).substring(1)}**
50 + #set ($emailError = true)
51 + #end
52 + ## Check for an error constructing the message!
53 + #if ($services.mail.sender.lastError)
54 + #displayError($exceptiontool.getStackTrace($services.mail.sender.lastError))
55 + #else
56 + ## Send the message and wait for it to be sent or for any error to be raised.
57 + #set ($mailResult = $services.mail.sender.send([$message], 'database'))
58 + ## Check for errors during the send
59 + #if ($services.mail.sender.lastError)
60 + #displayError($exceptiontool.getStackTrace($services.mail.sender.lastError))
61 + #else
62 + #set ($failedMailStatuses = $mailResult.statusResult.getAllErrors())
63 + #if ($failedMailStatuses.hasNext())
64 + #set ($mailStatus = $failedMailStatuses.next())
65 + #displayError($mailStatus.errorDescription)
66 + #end
67 + #end
68 + #end
26 26   #end
70 + ## We always display a success message even if there's no user found to avoid disclosing information
71 + ## about the users registered on the wiki.
72 + #if (!$emailError)
73 + {{success}}
74 + $services.localization.render('xe.admin.forgotUsername.emailSent', ["$email"])
27 27  
28 - [[{{translation key="xe.admin.forgotUsername.login"/}}>>path:${xwiki.getURL('XWiki.XWikiLogin', 'login')}]]
29 - #end
76 + {{html}}
77 + <div>
78 + <a href="$xwiki.getURL('XWiki.XWikiLogin', 'login', 'loginLink=1')">$services.localization.render('xe.admin.forgotUsername.login')</a>
79 + </div>
80 + {{/html}}
81 +
82 + {{/success}}
83 + #end
30 30  #end
31 31  {{/velocity}}

Need help?

If you need help with XWiki you can contact: