@@ -10,10 +10,34 @@ import {
1010import { Supplier } from "@internal/datastore" ;
1111import { Deps } from "./deps" ;
1212
13- const getSupplier = async (
13+ export default function createAuthorizerHandler (
14+ deps : Deps ,
15+ ) : APIGatewayRequestAuthorizerHandler {
16+ return (
17+ event : APIGatewayRequestAuthorizerEvent ,
18+ context : Context ,
19+ callback : Callback < APIGatewayAuthorizerResult > ,
20+ ) : void => {
21+ deps . logger . info ( event , "Received event" ) ;
22+
23+ checkCertificateExpiry ( event . requestContext . identity . clientCert , deps ) ;
24+
25+ getSupplier ( event . headers , deps )
26+ . then ( ( supplier : Supplier ) => {
27+ deps . logger . info ( "Allow event" ) ;
28+ callback ( null , generateAllow ( event . methodArn , supplier . id ) ) ;
29+ } )
30+ . catch ( ( error ) => {
31+ deps . logger . info ( error , "Deny event" ) ;
32+ callback ( null , generateDeny ( event . methodArn ) ) ;
33+ } ) ;
34+ } ;
35+ }
36+
37+ async function getSupplier (
1438 headers : APIGatewayRequestAuthorizerEventHeaders | null ,
1539 deps : Deps ,
16- ) : Promise < Supplier > => {
40+ ) : Promise < Supplier > {
1741 const apimId = Object . entries ( headers || { } ) . find (
1842 ( [ headerName , _ ] ) =>
1943 headerName . toLowerCase ( ) ===
@@ -28,13 +52,13 @@ const getSupplier = async (
2852 throw new Error ( `Supplier ${ supplier . id } is disabled` ) ;
2953 }
3054 return supplier ;
31- } ;
55+ }
3256
33- const generatePolicy = (
57+ function generatePolicy (
3458 principalId : string ,
3559 effect : "Allow" | "Deny" ,
3660 resource : string ,
37- ) : APIGatewayAuthorizerResult => {
61+ ) : APIGatewayAuthorizerResult {
3862 const authResponse : APIGatewayAuthorizerResult = {
3963 principalId,
4064 policyDocument : {
@@ -49,31 +73,31 @@ const generatePolicy = (
4973 } ,
5074 } ;
5175 return authResponse ;
52- } ;
76+ }
5377
54- const generateAllow = (
78+ function generateAllow (
5579 resource : string ,
5680 supplierId : string ,
57- ) : APIGatewayAuthorizerResult => {
81+ ) : APIGatewayAuthorizerResult {
5882 return generatePolicy ( supplierId , "Allow" , resource ) ;
59- } ;
83+ }
6084
61- const generateDeny = ( resource : string ) : APIGatewayAuthorizerResult => {
85+ function generateDeny ( resource : string ) : APIGatewayAuthorizerResult {
6286 return generatePolicy ( "invalid-user" , "Deny" , resource ) ;
63- } ;
87+ }
6488
65- const getCertificateExpiryInDays = (
89+ function getCertificateExpiryInDays (
6690 certificate : APIGatewayEventClientCertificate ,
67- ) : number => {
91+ ) : number {
6892 const now = Date . now ( ) ;
6993 const expiry = new Date ( certificate . validity . notAfter ) . getTime ( ) ;
7094 return ( expiry - now ) / ( 1000 * 60 * 60 * 24 ) ;
71- } ;
95+ }
7296
73- const buildCloudWatchMetric = (
97+ function buildCloudWatchMetric (
7498 namespace : string ,
7599 certificate : APIGatewayEventClientCertificate ,
76- ) => {
100+ ) {
77101 return {
78102 _aws : {
79103 Timestamp : Date . now ( ) ,
@@ -95,12 +119,12 @@ const buildCloudWatchMetric = (
95119 NOT_AFTER : certificate . validity . notAfter ,
96120 "apim-client-certificate-near-expiry" : 1 ,
97121 } ;
98- } ;
122+ }
99123
100- const checkCertificateExpiry = async (
124+ async function checkCertificateExpiry (
101125 certificate : APIGatewayEventClientCertificate | null ,
102126 deps : Deps ,
103- ) : Promise < void > => {
127+ ) : Promise < void > {
104128 deps . logger . info ( {
105129 description : "Client certificate details" ,
106130 issuerDN : certificate ?. issuerDN ,
@@ -122,30 +146,4 @@ const checkCertificateExpiry = async (
122146 ) ,
123147 ) ;
124148 }
125- } ;
126-
127- const createAuthorizerHandler = (
128- deps : Deps ,
129- ) : APIGatewayRequestAuthorizerHandler => {
130- return (
131- event : APIGatewayRequestAuthorizerEvent ,
132- context : Context ,
133- callback : Callback < APIGatewayAuthorizerResult > ,
134- ) : void => {
135- deps . logger . info ( event , "Received event" ) ;
136-
137- checkCertificateExpiry ( event . requestContext . identity . clientCert , deps ) ;
138-
139- getSupplier ( event . headers , deps )
140- . then ( ( supplier : Supplier ) => {
141- deps . logger . info ( "Allow event" ) ;
142- callback ( null , generateAllow ( event . methodArn , supplier . id ) ) ;
143- } )
144- . catch ( ( error ) => {
145- deps . logger . info ( error , "Deny event" ) ;
146- callback ( null , generateDeny ( event . methodArn ) ) ;
147- } ) ;
148- } ;
149- } ;
150-
151- export default createAuthorizerHandler ;
149+ }
0 commit comments