Software /
code /
prosody
Comparison
plugins/mod_tokenauth.lua @ 13009:a70ff0c524c9
mod_tokenauth: Move grant validation to a reusable function
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 29 Mar 2023 17:14:45 +0100 |
parent | 13006:d943733c6d01 |
child | 13010:3e454af3615d |
comparison
equal
deleted
inserted
replaced
13008:7b952553bd60 | 13009:a70ff0c524c9 |
---|---|
137 end | 137 end |
138 end | 138 end |
139 return updated; | 139 return updated; |
140 end | 140 end |
141 | 141 |
142 local function _get_validated_grant_info(username, grant) | |
143 if type(grant) == "string" then | |
144 grant = token_store:get_key(username, grant); | |
145 end | |
146 if not grant or not grant.created then return nil; end | |
147 | |
148 -- Invalidate grants from before last password change | |
149 local account_info = usermanager.get_account_info(username, module.host); | |
150 local password_updated_at = account_info and account_info.password_updated; | |
151 if password_updated_at and grant.created < password_updated_at then | |
152 module:log("debug", "Token grant issued before last password change, invalidating it now"); | |
153 token_store:set_key(username, grant.id, nil); | |
154 return nil, "not-authorized"; | |
155 elseif grant.expires and grant.expires < os.time() then | |
156 module:log("debug", "Token grant expired, cleaning up"); | |
157 token_store:set_key(username, grant.id, nil); | |
158 return nil, "expired"; | |
159 end | |
160 | |
161 return grant; | |
162 end | |
163 | |
142 local function _get_validated_token_info(token_id, token_user, token_host, token_secret) | 164 local function _get_validated_token_info(token_id, token_user, token_host, token_secret) |
143 if token_host ~= module.host then | 165 if token_host ~= module.host then |
144 return nil, "invalid-host"; | 166 return nil, "invalid-host"; |
145 end | 167 end |
146 | 168 |
169 grant.tokens[secret_hash] = nil; | 191 grant.tokens[secret_hash] = nil; |
170 token_store:set_key(token_user, token_id, grant); | 192 token_store:set_key(token_user, token_id, grant); |
171 return nil, "not-authorized"; | 193 return nil, "not-authorized"; |
172 end | 194 end |
173 | 195 |
174 -- Invalidate grants from before last password change | 196 -- Verify grant validity (expiry, etc.) |
175 local account_info = usermanager.get_account_info(token_user, module.host); | 197 grant = _get_validated_grant_info(token_user, grant); |
176 local password_updated_at = account_info and account_info.password_updated; | 198 if not grant then |
177 if password_updated_at and grant.created < password_updated_at then | |
178 module:log("debug", "Token grant issued before last password change, invalidating it now"); | |
179 token_store:set_key(token_user, token_id, nil); | |
180 return nil, "not-authorized"; | 199 return nil, "not-authorized"; |
181 end | 200 end |
182 | 201 |
183 -- Update last access time if necessary | 202 -- Update last access time if necessary |
184 local last_accessed = grant.accessed; | 203 local last_accessed = grant.accessed; |