Custom api key security and added env file : GWM
This commit is contained in:
parent
ef8e67a5be
commit
e61b684759
3
.env
Normal file
3
.env
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
APP_SIGNATURE = super-secret-key
|
||||||
|
|
||||||
|
BASE_URL = https://pb.venbait.in
|
||||||
1
go.mod
1
go.mod
@ -60,6 +60,7 @@ require (
|
|||||||
github.com/googleapis/gax-go/v2 v2.14.1 // indirect
|
github.com/googleapis/gax-go/v2 v2.14.1 // indirect
|
||||||
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
|
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
|
||||||
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
github.com/inconshreveable/mousetrap v1.1.0 // indirect
|
||||||
|
github.com/joho/godotenv v1.5.1 // indirect
|
||||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
|
|||||||
2
go.sum
2
go.sum
@ -161,6 +161,8 @@ github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2
|
|||||||
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
|
||||||
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
||||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||||
|
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
|
||||||
|
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
|
||||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
|
||||||
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
|
||||||
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
|
||||||
|
|||||||
171
main.go
171
main.go
@ -20,6 +20,7 @@ import (
|
|||||||
|
|
||||||
firebase "firebase.google.com/go"
|
firebase "firebase.google.com/go"
|
||||||
"firebase.google.com/go/messaging"
|
"firebase.google.com/go/messaging"
|
||||||
|
"github.com/joho/godotenv"
|
||||||
"github.com/labstack/echo/v5"
|
"github.com/labstack/echo/v5"
|
||||||
"github.com/pocketbase/dbx"
|
"github.com/pocketbase/dbx"
|
||||||
"github.com/pocketbase/pocketbase"
|
"github.com/pocketbase/pocketbase"
|
||||||
@ -34,7 +35,7 @@ import (
|
|||||||
"google.golang.org/api/option"
|
"google.golang.org/api/option"
|
||||||
)
|
)
|
||||||
|
|
||||||
const baseUrl = "https://pb.venbait.in"
|
var baseUrl = os.Getenv("BASE_URL")
|
||||||
|
|
||||||
type EmailConfigurationResponse struct {
|
type EmailConfigurationResponse struct {
|
||||||
Page int `json:"page"`
|
Page int `json:"page"`
|
||||||
@ -463,7 +464,14 @@ func generateToken() string {
|
|||||||
var app *pocketbase.PocketBase
|
var app *pocketbase.PocketBase
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
const baseUrl = "https://pb.venbait.in"
|
|
||||||
|
// load .env file
|
||||||
|
err := godotenv.Load()
|
||||||
|
if err != nil {
|
||||||
|
log.Println("No .env file found")
|
||||||
|
}
|
||||||
|
|
||||||
|
var baseUrl = os.Getenv("BASE_URL")
|
||||||
|
|
||||||
app = pocketbase.New()
|
app = pocketbase.New()
|
||||||
|
|
||||||
@ -584,6 +592,12 @@ func main() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
e.Router.GET("/api/auth/request-password-reset", func(c echo.Context) error {
|
e.Router.GET("/api/auth/request-password-reset", func(c echo.Context) error {
|
||||||
|
|
||||||
|
apiKey := c.Request().Header.Get("APP_SIGNATURE")
|
||||||
|
if apiKey != os.Getenv("APP_SIGNATURE") {
|
||||||
|
return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
|
||||||
|
}
|
||||||
|
|
||||||
email := c.QueryParam("email")
|
email := c.QueryParam("email")
|
||||||
if email == "" {
|
if email == "" {
|
||||||
return c.JSON(http.StatusBadRequest, map[string]string{"error": "Email is required"})
|
return c.JSON(http.StatusBadRequest, map[string]string{"error": "Email is required"})
|
||||||
@ -710,6 +724,12 @@ func main() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
e.Router.GET("/api/auth/reset-password", func(c echo.Context) error {
|
e.Router.GET("/api/auth/reset-password", func(c echo.Context) error {
|
||||||
|
|
||||||
|
apiKey := c.Request().Header.Get("APP_SIGNATURE")
|
||||||
|
if apiKey != os.Getenv("APP_SIGNATURE") {
|
||||||
|
return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
|
||||||
|
}
|
||||||
|
|
||||||
token := c.QueryParam("token")
|
token := c.QueryParam("token")
|
||||||
if token == "" {
|
if token == "" {
|
||||||
return c.JSON(http.StatusBadRequest, map[string]string{"error": "Token is required"})
|
return c.JSON(http.StatusBadRequest, map[string]string{"error": "Token is required"})
|
||||||
@ -738,6 +758,11 @@ func main() {
|
|||||||
|
|
||||||
e.Router.GET("/api/login_success", func(c echo.Context) error {
|
e.Router.GET("/api/login_success", func(c echo.Context) error {
|
||||||
|
|
||||||
|
apiKey := c.Request().Header.Get("APP_SIGNATURE")
|
||||||
|
if apiKey != os.Getenv("APP_SIGNATURE") {
|
||||||
|
return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
|
||||||
|
}
|
||||||
|
|
||||||
userID := c.QueryParam("id")
|
userID := c.QueryParam("id")
|
||||||
if userID == "" {
|
if userID == "" {
|
||||||
return c.JSON(http.StatusBadRequest, map[string]string{"error": "User ID is required"})
|
return c.JSON(http.StatusBadRequest, map[string]string{"error": "User ID is required"})
|
||||||
@ -778,6 +803,11 @@ func main() {
|
|||||||
|
|
||||||
e.Router.GET("/api/getNotification", func(c echo.Context) error {
|
e.Router.GET("/api/getNotification", func(c echo.Context) error {
|
||||||
|
|
||||||
|
apiKey := c.Request().Header.Get("APP_SIGNATURE")
|
||||||
|
if apiKey != os.Getenv("APP_SIGNATURE") {
|
||||||
|
return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
|
||||||
|
}
|
||||||
|
|
||||||
language := c.QueryParam("language")
|
language := c.QueryParam("language")
|
||||||
if language == "" {
|
if language == "" {
|
||||||
return c.JSON(http.StatusBadRequest, map[string]string{"error": "language is required"})
|
return c.JSON(http.StatusBadRequest, map[string]string{"error": "language is required"})
|
||||||
@ -837,6 +867,12 @@ func main() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
e.Router.GET("/api/removeNotification", func(c echo.Context) error {
|
e.Router.GET("/api/removeNotification", func(c echo.Context) error {
|
||||||
|
|
||||||
|
apiKey := c.Request().Header.Get("APP_SIGNATURE")
|
||||||
|
if apiKey != os.Getenv("APP_SIGNATURE") {
|
||||||
|
return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
|
||||||
|
}
|
||||||
|
|
||||||
userID := c.QueryParam("user_id")
|
userID := c.QueryParam("user_id")
|
||||||
notificationID := c.QueryParam("notification_id")
|
notificationID := c.QueryParam("notification_id")
|
||||||
|
|
||||||
@ -890,6 +926,11 @@ func main() {
|
|||||||
|
|
||||||
e.Router.GET("/api/pushNotification", func(c echo.Context) error {
|
e.Router.GET("/api/pushNotification", func(c echo.Context) error {
|
||||||
|
|
||||||
|
apiKey := c.Request().Header.Get("APP_SIGNATURE")
|
||||||
|
if apiKey != os.Getenv("APP_SIGNATURE") {
|
||||||
|
return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
|
||||||
|
}
|
||||||
|
|
||||||
// type Request struct {
|
// type Request struct {
|
||||||
// DeviceToken string `json:"device_token"`
|
// DeviceToken string `json:"device_token"`
|
||||||
// }
|
// }
|
||||||
@ -943,6 +984,11 @@ func main() {
|
|||||||
|
|
||||||
e.Router.POST("/api/getDataSet", func(c echo.Context) error {
|
e.Router.POST("/api/getDataSet", func(c echo.Context) error {
|
||||||
|
|
||||||
|
apiKey := c.Request().Header.Get("APP_SIGNATURE")
|
||||||
|
if apiKey != os.Getenv("APP_SIGNATURE") {
|
||||||
|
return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
|
||||||
|
}
|
||||||
|
|
||||||
type RequestData struct {
|
type RequestData struct {
|
||||||
Dataset string `json:"dataset"`
|
Dataset string `json:"dataset"`
|
||||||
KPI string `json:"kpi"`
|
KPI string `json:"kpi"`
|
||||||
@ -1268,6 +1314,11 @@ func main() {
|
|||||||
|
|
||||||
e.Router.GET("/api/getHomePageData", func(c echo.Context) error {
|
e.Router.GET("/api/getHomePageData", func(c echo.Context) error {
|
||||||
|
|
||||||
|
apiKey := c.Request().Header.Get("APP_SIGNATURE")
|
||||||
|
if apiKey != os.Getenv("APP_SIGNATURE") {
|
||||||
|
return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
|
||||||
|
}
|
||||||
|
|
||||||
language := c.QueryParam("language")
|
language := c.QueryParam("language")
|
||||||
colorMode := c.QueryParam("color_mode")
|
colorMode := c.QueryParam("color_mode")
|
||||||
|
|
||||||
@ -1362,8 +1413,119 @@ func main() {
|
|||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// e.Router.GET("/api/getHomePageData", func(c echo.Context) error {
|
||||||
|
|
||||||
|
// language := c.QueryParam("language")
|
||||||
|
// colorMode := c.QueryParam("color_mode")
|
||||||
|
|
||||||
|
// var colorPatternColumn string
|
||||||
|
// if colorMode == "dark" {
|
||||||
|
// colorPatternColumn = "color_pattern_dark"
|
||||||
|
// } else {
|
||||||
|
// colorPatternColumn = "color_pattern_light"
|
||||||
|
// }
|
||||||
|
|
||||||
|
// var languageSpecificColumn string
|
||||||
|
// if language == "en" {
|
||||||
|
// languageSpecificColumn = "data_set_tile_heading_en"
|
||||||
|
// } else {
|
||||||
|
// languageSpecificColumn = "data_set_tile_heading_ar"
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Define the struct for holding the query results
|
||||||
|
// mainTopics := []struct {
|
||||||
|
// MainTopicEn string `db:"main_topic_en" json:"main_topic_en"`
|
||||||
|
// MainTopicAr string `db:"main_topic_ar" json:"main_topic_ar"`
|
||||||
|
// MainTopicListOrder string `db:"main_topic_list_order" json:"main_topic_list_order"`
|
||||||
|
// ColorPattern string `db:"color_pattern" json:"color_pattern"`
|
||||||
|
// }{}
|
||||||
|
|
||||||
|
// // Execute the query
|
||||||
|
// query := fmt.Sprintf(`
|
||||||
|
// SELECT
|
||||||
|
// main_topic_en,
|
||||||
|
// main_topic_ar,
|
||||||
|
// main_topic_list_order,
|
||||||
|
// %s AS color_pattern
|
||||||
|
// FROM home_screen
|
||||||
|
// GROUP BY main_topic_en, main_topic_ar, main_topic_list_order, %s
|
||||||
|
// ORDER BY main_topic_list_order ASC
|
||||||
|
// `, colorPatternColumn, colorPatternColumn)
|
||||||
|
|
||||||
|
// err := app.DB().NewQuery(query).All(&mainTopics)
|
||||||
|
|
||||||
|
// // err := app.DB().
|
||||||
|
// // Select("main_topic_en", "main_topic_ar", "main_topic_list_order", "color_pattern").
|
||||||
|
// // From("home_screen").
|
||||||
|
// // GroupBy("main_topic_en", "main_topic_ar", "color_pattern").
|
||||||
|
// // OrderBy("main_topic_list_order ASC").
|
||||||
|
// // All(&mainTopics)
|
||||||
|
|
||||||
|
// if err != nil {
|
||||||
|
// log.Printf("Failed to fetch home_screen data: %v", err)
|
||||||
|
// return c.JSON(http.StatusInternalServerError, map[string]string{"error": "Failed to fetch records"})
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // If no records are found
|
||||||
|
// if len(mainTopics) == 0 {
|
||||||
|
// return c.JSON(http.StatusNotFound, map[string]string{"error": "No records found for home screen"})
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Final result structure
|
||||||
|
// result := []map[string]interface{}{}
|
||||||
|
|
||||||
|
// // Loop through main topics and fetch sub-topic data for each
|
||||||
|
// for _, mainTopic := range mainTopics {
|
||||||
|
|
||||||
|
// dataSets := []struct {
|
||||||
|
// DataSet string `db:"data_set" json:"data_set"`
|
||||||
|
// DataSetTileHeading string `db:"data_set_tile_heading" json:"data_set_tile_heading"`
|
||||||
|
// ValueSource string `db:"value_source" json:"value_source"`
|
||||||
|
// Value string `db:"value" json:"value"`
|
||||||
|
// DataSetListOrder string `db:"data_set_list_order" json:"data_set_list_order"`
|
||||||
|
// }{}
|
||||||
|
|
||||||
|
// query := ` SELECT data_set,` + languageSpecificColumn + ` AS data_set_tile_heading,value_source,value, data_set_list_order FROM home_screen WHERE main_topic_en = {:topic}`
|
||||||
|
// err := app.DB().
|
||||||
|
// NewQuery(query).
|
||||||
|
// Bind(dbx.Params{
|
||||||
|
// "topic": mainTopic.MainTopicEn,
|
||||||
|
// }).
|
||||||
|
// All(&dataSets)
|
||||||
|
|
||||||
|
// if err != nil {
|
||||||
|
// log.Printf("Error fetching data sets: %v", err)
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
|
|
||||||
|
// var MainTopic string
|
||||||
|
// if language == "en" {
|
||||||
|
// MainTopic = mainTopic.MainTopicEn
|
||||||
|
// } else {
|
||||||
|
// MainTopic = mainTopic.MainTopicAr
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Add the main topic and its sub-topics to the result
|
||||||
|
// result = append(result, map[string]interface{}{
|
||||||
|
// "main_topic": MainTopic,
|
||||||
|
// "main_topic_list_order": mainTopic.MainTopicListOrder,
|
||||||
|
// "color_pattern": mainTopic.ColorPattern,
|
||||||
|
// "tile_data": dataSets,
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Send the combined result as JSON
|
||||||
|
// return c.JSON(http.StatusOK, result)
|
||||||
|
|
||||||
|
// })
|
||||||
|
|
||||||
e.Router.GET("/api/getUAENumbersData", func(c echo.Context) error {
|
e.Router.GET("/api/getUAENumbersData", func(c echo.Context) error {
|
||||||
|
|
||||||
|
apiKey := c.Request().Header.Get("APP_SIGNATURE")
|
||||||
|
if apiKey != os.Getenv("APP_SIGNATURE") {
|
||||||
|
return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
|
||||||
|
}
|
||||||
|
|
||||||
language := c.QueryParam("language")
|
language := c.QueryParam("language")
|
||||||
colorMode := c.QueryParam("color_mode")
|
colorMode := c.QueryParam("color_mode")
|
||||||
|
|
||||||
@ -1509,6 +1671,11 @@ func main() {
|
|||||||
|
|
||||||
e.Router.GET("/api/getUserBookmark", func(c echo.Context) error {
|
e.Router.GET("/api/getUserBookmark", func(c echo.Context) error {
|
||||||
|
|
||||||
|
apiKey := c.Request().Header.Get("APP_SIGNATURE")
|
||||||
|
if apiKey != os.Getenv("APP_SIGNATURE") {
|
||||||
|
return c.JSON(http.StatusForbidden, map[string]string{"error": "Invalid API Key"})
|
||||||
|
}
|
||||||
|
|
||||||
language := c.QueryParam("language")
|
language := c.QueryParam("language")
|
||||||
user_id := c.QueryParam("user_id")
|
user_id := c.QueryParam("user_id")
|
||||||
colorMode := c.QueryParam("color_mode")
|
colorMode := c.QueryParam("color_mode")
|
||||||
|
|||||||
BIN
pb_data/logs.db
BIN
pb_data/logs.db
Binary file not shown.
Loading…
Reference in New Issue
Block a user