Skip to content

Commit 21b209a

Browse files
committed
WS-2229 - User name is escaped in the request context to be sent correctly through proxy headers
1 parent d56609b commit 21b209a

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

src/lua/api-gateway/validation/oauth2/userProfileValidator.lua

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,17 @@ function _M:getExpiresIn(expire_at)
7878
return expires_in_s
7979
end
8080

81+
function _M:getContextPropertiesObject(obj)
82+
local props = {}
83+
for k, v in pairs(obj) do
84+
props[k] = v
85+
if k == "user_name" or k == "user_first_name" or k == "user_last_name" then
86+
props[k] = ngx.escape_uri(v)
87+
end
88+
end
89+
return props
90+
end
91+
8192
function _M:getProfileFromCache(cacheLookupKey)
8293
local localCacheValue = self:getKeyFromLocalCache(cacheLookupKey, "cachedUserProfiles")
8394
if ( localCacheValue ~= nil ) then
@@ -148,7 +159,8 @@ function _M:extractContextVars(profile)
148159
cachingObj.user_country_code = profile.countryCode
149160
cachingObj.user_name = profile.displayName
150161
cachingObj.user_region = self:getUserRegion(profile.countryCode)
151-
162+
cachingObj.user_first_name = profile.first_name
163+
cachingObj.user_last_name = profile.last_name
152164
return cachingObj
153165
end
154166

@@ -169,7 +181,7 @@ function _M:validateRequest()
169181
if (type(cachedUserProfile) == 'string') then
170182
cachedUserProfile = cjson.decode(cachedUserProfile)
171183
end
172-
self:setContextProperties(cachedUserProfile)
184+
self:setContextProperties(self:getContextPropertiesObject(cachedUserProfile))
173185
if ( self:isProfileValid(cachedUserProfile) == true ) then
174186
return self:exitFn(ngx.HTTP_OK)
175187
else
@@ -185,7 +197,7 @@ function _M:validateRequest()
185197

186198
local cachingObj = self:extractContextVars(json)
187199

188-
self:setContextProperties(cachingObj)
200+
self:setContextProperties(self:getContextPropertiesObject(cachingObj))
189201
self:storeProfileInCache(cacheLookupKey, cachingObj)
190202

191203
if ( self:isProfileValid(cachingObj) == true ) then

test/perl/api-gateway/validation/oauth2/userProfileValidator.t

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ Authorization: Bearer SOME_OAUTH_PROFILE_TEST_1
107107
"GET /redis-cache"
108108
]
109109
--- response_body_like eval
110-
['^user_email=johndoe_ĂÂă\@domain.com,user_country_code=AT,user_region=EU,user_name=display_name—大-女.*',
110+
['^user_email=johndoe_ĂÂă\@domain.com,user_country_code=AT,user_region=EU,user_name=display_name%E2%80%94%E5%A4%A7%EF%BC%8D%E5%A5%B3.*',
111111
'^Local: {"user_region":"EU","user_country_code":"AT","user_email":"johndoe_ĂÂă@domain.com","user_name":"display_name—大-女"}.*',
112112
'^Redis: {"user_region":"EU","user_country_code":"AT","user_email":"johndoe_ĂÂă@domain.com","user_name":"display_name—大-女"}.*']
113113
--- no_error_log
@@ -206,12 +206,12 @@ Authorization: Bearer SOME_OAUTH_TOKEN_TEST_THREE
206206
--- request
207207
GET /test-validate-user
208208
--- response_body_like eval
209-
"^user_email=noreply-ăâ\@domain.com,user_country_code=CA,user_region=US,user_name=display_name-工-女-长.*"
209+
"^user_email=noreply-ăâ\@domain.com,user_country_code=CA,user_region=US,user_name=display_name-%E5%B7%A5%EF%BC%8D%E5%A5%B3%EF%BC%8D%E9%95%BF.*"
210210
--- response_headers_like
211211
X-User-Id: noreply-ăâ@domain.com
212212
X-User-Country-Code: CA
213213
X-User-Region: US
214-
X-User-Name: display_name-工-女-长
214+
X-User-Name: display_name-%E5%B7%A5%EF%BC%8D%E5%A5%B3%EF%BC%8D%E9%95%BF
215215
--- error_code: 200
216216
--- no_error_log
217217
[error]

0 commit comments

Comments
 (0)