Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 3229d05

Browse files
committed
Fix the getScheme, getServerName, and getServerPort implementations
Use the Grails serverBaseURL in the implementations of getScheme, getServerName, and getServerPort
1 parent 89c1590 commit 3229d05

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

src/groovy/grails/plugin/mail/MailMessageContentRenderer.groovy

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import grails.util.GrailsWebUtil
3232
import groovy.text.Template
3333
import org.codehaus.groovy.grails.commons.GrailsApplication
3434
import org.codehaus.groovy.grails.plugins.GrailsPluginManager
35+
import org.codehaus.groovy.grails.web.mapping.LinkGenerator
3536
import org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine
3637
import org.codehaus.groovy.grails.web.pages.GroovyPagesUriService
3738
import org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest
@@ -121,6 +122,7 @@ class MailMessageContentRenderer {
121122
final Writer out
122123
final Locale locale
123124
final ApplicationContext applicationContext
125+
final LinkGenerator grailsLinkGenerator
124126

125127
private originalRequestAttributes
126128
private renderRequestAttributes
@@ -129,6 +131,7 @@ class MailMessageContentRenderer {
129131
this.out = out
130132
this.locale = locale
131133
this.applicationContext = applicationContext
134+
this.grailsLinkGenerator = applicationContext.getBean('grailsLinkGenerator', LinkGenerator.class)
132135
}
133136

134137
private void init() {
@@ -141,7 +144,7 @@ class MailMessageContentRenderer {
141144
renderLocale = RequestContextUtils.getLocale(originalRequestAttributes.request)
142145
}
143146

144-
renderRequestAttributes = new GrailsWebRequest(PageRenderRequestCreator.createInstance("/mail/render", renderLocale),
147+
renderRequestAttributes = new GrailsWebRequest(PageRenderRequestCreator.createInstance(grailsLinkGenerator.serverBaseURL, "/mail/render", renderLocale),
145148
PageRenderResponseCreator.createInstance(out instanceof PrintWriter ? out : new PrintWriter(out), renderLocale), null, applicationContext)
146149

147150
if (originalRequestAttributes) {
@@ -191,7 +194,8 @@ class MailMessageContentRenderer {
191194
*/
192195
static class PageRenderRequestCreator {
193196

194-
static HttpServletRequest createInstance(final String requestURI, Locale localeToUse = Locale.getDefault()) {
197+
static HttpServletRequest createInstance(final String serverBaseURL, final String requestURI, Locale localeToUse = Locale.getDefault()) {
198+
final URI serverBaseURI = new URI(serverBaseURL)
195199

196200
def params = new ConcurrentHashMap()
197201
def attributes = new ConcurrentHashMap()
@@ -274,13 +278,24 @@ class MailMessageContentRenderer {
274278
throw new UnsupportedOperationException("You cannot read the protocol in non-request rendering operations")
275279
}
276280
if (methodName == 'getScheme') {
277-
return new URI(requestURI).scheme
281+
return serverBaseURI.scheme
278282
}
279283
if (methodName == 'getServerName') {
280-
return new URI(requestURI).host
284+
return serverBaseURI.host
281285
}
282286
if (methodName == 'getServerPort') {
283-
return new URI(requestURI).host
287+
int port = serverBaseURI.port
288+
if(port == -1){
289+
switch(serverBaseURI.scheme?.toLowerCase()){
290+
case 'http':
291+
port = 80
292+
break
293+
case 'https':
294+
port = 443
295+
break
296+
}
297+
}
298+
return port
284299
}
285300
if (methodName == 'getReader') {
286301
throw new UnsupportedOperationException("You cannot read input in non-request rendering operations")

0 commit comments

Comments
 (0)