package Ġio . kot less . dsl Ċ Ċ import Ġcom . microsoft . azure . functions . ExecutionContext Ċ import Ġcom . microsoft . azure . functions . HttpRequest Message Ċ import Ġcom . microsoft . azure . functions . HttpResponse Message Ċ import Ġcom . microsoft . azure . functions . HttpStatus Ċ import Ġcom . microsoft . azure . functions . annotation . Authorization Level Ċ import Ġcom . microsoft . azure . functions . annotation . FunctionName Ċ import Ġcom . microsoft . azure . functions . annotation . Http Trigger Ċ import Ġio . kot less . HttpMethod Ċ import Ġio . kot less . Internal API Ċ import Ġio . kot less . dsl . app . http . Route Key Ċ import Ġio . kot less . dsl . app . http . Routes Dispatcher Ċ import Ġio . kot less . dsl . model . HttpRequest Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . util .* Ċ Ċ @ Internal API Ċ class ĠHandler Azure Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Handler Azure :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ FunctionName (" Http Trigger ") ĊĠĠĠ Ġfun Ġrun (@ Http Trigger ( ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġ" req ", ĊĠĠĠĠĠĠĠ Ġmethods Ġ= Ġ[ com . microsoft . azure . functions . HttpMethod . GET , Ġcom . microsoft . azure . functions . HttpMethod . POST ], ĊĠĠĠĠĠĠĠ Ġauth Level Ġ= ĠAuthorization Level . FUNCTION ) Ġrequest : ĠHttpRequest Message < Optional < String >>, Ġcontext : ĠExecutionContext ): ĠHttpResponse Message Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Request Ġ= Ġif ( request . body . isPresent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest . body . get () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . debug (" Started Ġhandling Ġrequest ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . trace (" Request Ġis Ġ{}", Ġjson Request ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠApplication . init () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorig Path Ġ= Ġrequest . headers [" x - original - path "] Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info ( orig Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Context Ġ= ĠHttpRequest . RequestContext ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorig Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorig Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠaccountId Ġ= Ġ"- 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresource Id Ġ= Ġ"- 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstage Ġ= Ġ"/", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġidentity Ġ= ĠHttpRequest . RequestContext . Request Identity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Ip Ġ= Ġrequest . headers [" x - for warded - for "] Ġ?: Ġ" 1 9 2 . 1 6 8 . 0 . 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Agent Ġ= Ġrequest . headers [" User - Agent "] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprotocol Ġ= Ġ" HTTP ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Time Epoch Ġ= ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdomain Name Ġ= Ġ" domain _ name _ mock " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Body Ġ= ĠHttpRequest ( orig Path , Ġorig Path , ĠHttpMethod . valueOf ( request . http Method . name ), Ġnull , Ġrequest . query Parameters , Ġnull , Ġrequest Context , Ġjson Request , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Key Ġ= ĠRoute Key ( HttpMethod . valueOf ( request . http Method . name ), Ġorig Path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRoutes Dispatcher . dispatch ( request Body , Ġresource Key ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Error Ġoccurred Ġduring Ġhandle Ġof Ġrequest Ġand Ġwas Ġnot Ġcaught ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Response Builder ( HttpStatus . INTERNAL _ SERVER _ ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( e . stack Trace ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġlogger . debug (" Ended Ġhandling Ġrequest ") ĊĠĠĠĠĠĠĠ Ġval Ġoutput Response Ġ= Ġrequest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Response Builder ( HttpStatus . valueOf ( response . statusCode )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. body ( response . body ) ĊĠĠĠĠĠĠĠ Ġresponse . headers . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Response . header ( it . key , Ġit . value ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġoutput Response . build () ĊĠĠĠ Ġ} Ċ } Ċ