Mercurial > prosody-modules
comparison mod_http_oauth2/mod_http_oauth2.lua @ 5357:eda3b078ba2c
mod_http_oauth2: Validate (unused at this point) localized URIs
Client registration may include keys of the form "some_uri#lang-code"
pointing to alternate language versions of the various URIs. We don't
use this yet but the same validation should apply.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 22 Apr 2023 14:02:56 +0200 |
parents | 959dc350f2ad |
children | 0905d348bd34 |
comparison
equal
deleted
inserted
replaced
5356:959dc350f2ad | 5357:eda3b078ba2c |
---|---|
668 jwks = { type = "object"; description = "JSON Web Key Set, RFC 7517" }; | 668 jwks = { type = "object"; description = "JSON Web Key Set, RFC 7517" }; |
669 software_id = { type = "string"; format = "uuid" }; | 669 software_id = { type = "string"; format = "uuid" }; |
670 software_version = { type = "string" }; | 670 software_version = { type = "string" }; |
671 }; | 671 }; |
672 -- Localized versions of descriptive properties and URIs | 672 -- Localized versions of descriptive properties and URIs |
673 patternProperties = { ["^[a-z_]+_uri#"] = { type = "string"; format = "uri"; pattern = "^https:" } }; | |
673 additionalProperties = { type = "string" }; | 674 additionalProperties = { type = "string" }; |
674 } | 675 } |
675 | 676 |
676 function create_client(client_metadata) | 677 function create_client(client_metadata) |
677 if not schema.validate(registration_schema, client_metadata) then | 678 if not schema.validate(registration_schema, client_metadata) then |
700 if components.scheme ~= "https" then | 701 if components.scheme ~= "https" then |
701 return nil, oauth_error("invalid_request", "Insecure URI forbidden"); | 702 return nil, oauth_error("invalid_request", "Insecure URI forbidden"); |
702 end | 703 end |
703 if components.authority ~= client_uri.authority then | 704 if components.authority ~= client_uri.authority then |
704 return nil, oauth_error("invalid_request", "Informative URIs must have the same hostname"); | 705 return nil, oauth_error("invalid_request", "Informative URIs must have the same hostname"); |
706 end | |
707 end | |
708 end | |
709 | |
710 -- Localized URIs should be secure too | |
711 for k, v in pairs(client_metadata) do | |
712 if k:find"_uri#" then | |
713 local uri = url.parse(v); | |
714 if not uri or uri.scheme ~= "https" then | |
715 return nil, oauth_error("invalid_request", "Missing, invalid or insecure "..k); | |
716 elseif uri.host ~= client_uri.host then | |
717 return nil, oauth_error("invalid_request", "All URIs must use the same hostname as client_uri"); | |
705 end | 718 end |
706 end | 719 end |
707 end | 720 end |
708 | 721 |
709 -- Ensure each signed client_id JWT is unique, short ID and issued at | 722 -- Ensure each signed client_id JWT is unique, short ID and issued at |