File size: 3,108 Bytes
542878f
 
 
a8ebadf
542878f
 
 
a8ebadf
542878f
a8ebadf
 
 
 
a1eed6b
d3c13b7
a8ebadf
 
a1eed6b
d3c13b7
a8ebadf
 
f118f03
 
 
 
d3c13b7
 
542878f
 
f118f03
a8ebadf
f118f03
 
 
 
 
 
 
 
 
 
 
 
 
542878f
a8ebadf
 
 
 
 
a1eed6b
a8ebadf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a1eed6b
 
 
 
 
 
 
 
542878f
a1eed6b
 
 
 
 
 
 
542878f
a1eed6b
 
 
 
 
 
 
542878f
f118f03
 
 
 
d3c13b7
a8ebadf
 
 
542878f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package main

import (
	"os"
	"fmt"
	"log"
	
	"github.com/joho/godotenv"

	// Fiber
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/middleware/cors"
	"github.com/gofiber/fiber/v2/middleware/helmet"

	// Main Features
	stock_proxy             "tebakaja_lb_proxy/proxy/stock"
	crypto_proxy            "tebakaja_lb_proxy/proxy/crypto"
	national_currency_proxy "tebakaja_lb_proxy/proxy/national_currency"

	middlewares             "tebakaja_lb_proxy/proxy/middlewares"

	// Swagger
	_ "tebakaja_lb_proxy/docs"
	swagger "github.com/swaggo/fiber-swagger"

	// Node Exporter
	// exporter_proxy "tebakaja_lb_proxy/proxy/node_exporter"
)



// @title          TebakAja
// @version        1.0
// @description    TebakAja REST API Service
// @termsOfService https://swagger.io/terms/

// @contact.name   Si Mimin
// @contact.url    https://www.tebakaja.com
// @contact.email  [email protected]

// @license.name   Apache 2.0
// @license.url    http://www.apache.org/licenses/LICENSE-2.0.html

// @host 192.168.137.1:7860
func main() {
	err := godotenv.Load()
  if err != nil {
    log.Fatalf("Error loading .env file")
  }

	proxyService := fiber.New()
	proxyService.Use(helmet.New())
	proxyService.Use(middlewares.LoggingMiddleware)
	proxyService.Use(middlewares.RateLimiterMiddleware())

	proxyService.Use(cors.New(cors.Config{
		AllowOrigins: os.Getenv("TEBAKAJA_CORS_ALLOW_ORIGINS"),
		AllowHeaders: os.Getenv("TEBAKAJA_CORS_ALLOW_HEADERS"),
		AllowMethods: os.Getenv("TEBAKAJA_CORS_ALLOW_METHODS"),
		AllowCredentials: true,
	}))

	proxyService.Use(func(c *fiber.Ctx) error {
		c.Set("Content-Security-Policy", fmt.Sprintf("frame-ancestors 'self' %s %s %s %s",
			"https://huggingface.co",
			"https://qywok-tebakaja-proxy-space-0.hf.space",
			"https://qywok-tebakaja-proxy-space-1.hf.space",
			"https://qywok-tebakaja-proxy-space-2.hf.space",
		))
		return c.Next()
	})

	stockGroup := proxyService.Group("/stock")
	stockGroup.Get("/lists",
		stock_proxy.StockListsHandler(
			&stock_proxy.StockServiceImpl{}))
	stockGroup.Post("/prediction",
		stock_proxy.StockPredictionHandler(
			&stock_proxy.StockServiceImpl{}))

	cryptoGroup := proxyService.Group("/crypto")
	cryptoGroup.Get("/lists",
		crypto_proxy.CryptoListsHandler(
			&crypto_proxy.CryptoServiceImpl{}))
	cryptoGroup.Post("/prediction",
		crypto_proxy.CryptoPredictionHandler(
			&crypto_proxy.CryptoServiceImpl{}))

	nationalCurrencyGroup := proxyService.Group("/national-currency")
	nationalCurrencyGroup.Get("/lists",
		national_currency_proxy.NationalCurrencyListsHandler(
			&national_currency_proxy.NationalCurrencyServiceImpl{}))
	nationalCurrencyGroup.Post("/prediction",
		national_currency_proxy.NationalCurrencyPredictionHandler(
			&national_currency_proxy.NationalCurrencyServiceImpl{}))

	proxyService.Get("/swagger/*", swagger.WrapHandler)
	proxyService.Get("/", func(c *fiber.Ctx) error {
		return c.Redirect("/swagger/index.html", fiber.StatusMovedPermanently)
	})

	HOST := os.Getenv("TEBAKAJA_PROXY_HOST")
	PORT := os.Getenv("TEBAKAJA_PROXY_PORT")
	log.Fatal(proxyService.Listen(fmt.Sprintf("%s:%s", HOST, PORT)))
}