@@ -222,10 +222,33 @@ func validateClientId(token jwt.Token) error {
222222 return errors .New ("client id from token and oauth application don't match" )
223223}
224224
225+ func getJWT (r * http.Request ) (string , error ) {
226+ authHeader := r .Header .Get ("Authorization" )
227+
228+ if authHeader == "" {
229+ errorMessage := "authorization header is missing"
230+ slog .Error (errorMessage )
231+ return "" , errors .New (errorMessage )
232+ }
233+
234+ tokenString := strings .Split (authHeader , "Bearer " )[1 ]
235+
236+ if tokenString == "" {
237+ errorMessage := "bearer token is missing"
238+ slog .Error (errorMessage )
239+ return "" , errors .New (errorMessage )
240+ }
241+ return tokenString , nil
242+ }
243+
225244func jwtHandler (next http.Handler ) http.Handler {
226245 return http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
227- authHeader := r .Header .Get ("Authorization" )
228- tokenString := strings .Split (authHeader , "Bearer " )[1 ]
246+ tokenString , error := getJWT (r )
247+
248+ if error != nil {
249+ http .Error (w , error .Error (), 401 )
250+ return
251+ }
229252
230253 token , err := validateJWT (tokenString )
231254
@@ -243,6 +266,70 @@ func jwtHandler(next http.Handler) http.Handler {
243266 })
244267}
245268
269+ func getBodyByteArray (body io.ReadCloser ) ([]byte , error ) {
270+ var data interface {}
271+ err := json .NewDecoder (body ).Decode (& data )
272+
273+ if err != nil {
274+ return nil , err
275+ }
276+
277+ dataByteArray , err := json .MarshalIndent (data , "" , "\t " )
278+
279+ if err != nil {
280+ return nil , err
281+ }
282+
283+ return dataByteArray , nil
284+ }
285+
286+ func fetchAuthorUserInfo (token , userId string ) (string , error ) {
287+ var authorUserInfoURLBuilder strings.Builder
288+
289+ protocol := Config ["com.liferay.lxc.dxp.server.protocol" ]
290+ host := Config ["com.liferay.lxc.dxp.mainDomain" ]
291+
292+ authorUserInfoURLBuilder .WriteString (protocol )
293+ authorUserInfoURLBuilder .WriteString ("://" )
294+ authorUserInfoURLBuilder .WriteString (host )
295+ authorUserInfoURLBuilder .WriteString ("/o/headless-admin-user/v1.0/user-accounts/" )
296+ authorUserInfoURLBuilder .WriteString (userId )
297+
298+ httpClient := & http.Client {}
299+ request , err := http .NewRequest ("GET" , authorUserInfoURLBuilder .String (), nil )
300+
301+ if err != nil {
302+ log .Fatal (err )
303+ }
304+
305+ auth := strings .Join ([]string {"Bearer" , token }, " " )
306+
307+ request .Header .Add ("Authorization" , auth )
308+ request .Header .Add ("Content-Type" , "application/json" )
309+
310+ slog .Info (fmt .Sprintf ("Fetching author user information from %s" , authorUserInfoURLBuilder .String ()))
311+
312+ response , err := httpClient .Do (request )
313+
314+ if err != nil {
315+ log .Fatal (err )
316+ }
317+
318+ defer response .Body .Close ()
319+
320+ if response .StatusCode / 100 != 2 {
321+ return "" , errors .New (fmt .Sprintf ("could not fetch author user information: %v error" , response .StatusCode ))
322+ }
323+
324+ dataByteArray , err := getBodyByteArray (response .Body )
325+
326+ if err != nil {
327+ log .Fatal (err )
328+ }
329+
330+ return string (dataByteArray ), nil
331+ }
332+
246333func main () {
247334 err := initConfig ()
248335
@@ -275,21 +362,34 @@ func main() {
275362 objectAction1Handler := http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
276363 slog .Info ("execute /object/action/1" )
277364
278- var objectEntry interface {}
279- err := json .NewDecoder (r .Body ).Decode (& objectEntry )
365+ token , _ := getJWT (r )
366+
367+ dataByteArray , err := getBodyByteArray (r .Body )
368+
369+ slog .Info (string (dataByteArray ))
280370
281371 if err != nil {
282372 log .Fatal (err )
283373 }
284374
285- objectEntryJsonBytes , err := json .MarshalIndent (objectEntry , "" , "\t " )
375+ data := make (map [string ]any )
376+
377+ err = json .Unmarshal (dataByteArray , & data )
286378
287379 if err != nil {
288- log .Fatal (err )
380+ slog .Error (err .Error ())
381+ }
382+
383+ objectEntry := data ["objectEntry" ].(map [string ]any )
384+ authorUserId := objectEntry ["userId" ]
385+
386+ authorUserInfo , err := fetchAuthorUserInfo (token , fmt .Sprintf ("%#v" , authorUserId ))
387+
388+ if err != nil {
389+ slog .Error (err .Error ())
289390 }
290391
291- objectEntryJsonString := string (objectEntryJsonBytes )
292- slog .Info (objectEntryJsonString )
392+ slog .Info (authorUserInfo )
293393 })
294394
295395 http .Handle ("/" , homeHandler )
0 commit comments