@@ -2,7 +2,10 @@ package frontend
22
33import (
44 "dillmann.com.br/nginx-ignition/core/common/configuration"
5+ "dillmann.com.br/nginx-ignition/core/common/log"
6+ "encoding/json"
57 "github.com/gin-gonic/gin"
8+ "io"
69 "net/http"
710)
811
@@ -12,17 +15,57 @@ type configurationHandler struct {
1215
1316func (h * configurationHandler ) handle (ctx * gin.Context ) {
1417 codeEditorApiKey , _ := h .configuration .Get ("nginx-ignition.frontend.code-editor-api-key" )
18+ version , _ := h .configuration .Get ("nginx-ignition.version" )
1519
1620 var apiKey * string
1721 if codeEditorApiKey != "" {
1822 apiKey = & codeEditorApiKey
1923 }
2024
25+ var versionString * string
26+ if version != "" {
27+ versionString = & version
28+ }
29+
2130 output := & configurationDto {
31+ Version : versionDto {
32+ Current : versionString ,
33+ Latest : resolveLatestAvailableVersion (),
34+ },
2235 CodeEditor : codeEditorDto {
2336 ApiKey : apiKey ,
2437 },
2538 }
2639
2740 ctx .JSON (http .StatusOK , output )
2841}
42+
43+ func resolveLatestAvailableVersion () * string {
44+ resp , err := http .Get ("https://api.github.com/repos/lucasdillmann/nginx-ignition/releases?per_page=1&page=0" )
45+ if err != nil {
46+ log .Warnf ("Failed to fetch latest available version: %s" , err )
47+ return nil
48+ }
49+
50+ defer resp .Body .Close ()
51+
52+ body , err := io .ReadAll (resp .Body )
53+ if err != nil {
54+ log .Warnf ("Failed to read latest available version: %s" , err )
55+ return nil
56+ }
57+
58+ var releases []map [string ]interface {}
59+ if err := json .Unmarshal (body , & releases ); err != nil {
60+ log .Warnf ("Failed to parse latest available version: %s" , err )
61+ return nil
62+ }
63+
64+ if len (releases ) > 0 {
65+ if name , ok := releases [0 ]["name" ].(string ); ok {
66+ return & name
67+ }
68+ }
69+
70+ return nil
71+ }
0 commit comments