Skip to content

Commit 89bbe2d

Browse files
committed
feat: web leveldb setting
1 parent 528bbe7 commit 89bbe2d

5 files changed

Lines changed: 184 additions & 8 deletions

File tree

‎common/config.go‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ type WebConfig struct {
2323
}
2424

2525
type DatabaseConfig struct {
26-
Path string
26+
InitUsername string
27+
InitPassword string
2728
}
2829

2930
type JWTConfig struct {
@@ -56,7 +57,8 @@ func loadWebConfig() WebConfig {
5657

5758
func loadDatabaseConfig() DatabaseConfig {
5859
return DatabaseConfig{
59-
Path: getEnvString("DATABASE_PATH", "data"),
60+
InitUsername: getEnvString("DATABASE_USERNAME", "admin"),
61+
InitPassword: getEnvString("DATABASE_PASSWORD", "password"),
6062
}
6163
}
6264

‎main.go‎

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,38 @@ import (
44
"log"
55

66
"cth.release/common"
7+
"cth.release/common/utils"
78
"cth.release/web"
89
"github.com/gofiber/fiber/v2"
10+
"github.com/syndtr/goleveldb/leveldb"
911
)
1012

1113
func main() {
1214
config := common.GetConfig()
1315
app := fiber.New()
1416
web.SetupRoutes(app, config)
1517

16-
err := app.Listen(":" + config.Server.Port)
18+
db, err := leveldb.OpenFile("data/user.db", nil)
19+
if err != nil {
20+
log.Fatalf("Error Opening Database: %v", err)
21+
}
22+
23+
data, err := db.Get([]byte(config.Database.InitUsername), nil)
24+
if err != nil {
25+
err = db.Put([]byte(config.Database.InitUsername), []byte(utils.Sha512Hex(config.Database.InitPassword)), nil)
26+
27+
if err != nil {
28+
log.Fatalf("Error Setting System User: %v", err)
29+
}
30+
} else {
31+
if string(data) != utils.Sha512Hex(config.Database.InitPassword) {
32+
log.Fatalf("Invalid System User Password")
33+
}
34+
}
35+
36+
db.Close()
37+
38+
err = app.Listen(":" + config.Server.Port)
1739
if err != nil {
1840
log.Fatalf("Error Starting Server: %v", err)
1941
}

‎web/database/handlers.go‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package database
2+
3+
import (
4+
"github.com/gofiber/fiber/v2"
5+
)
6+
7+
func SetupRoutes(api fiber.Router) {
8+
api.Post("/:channel/:key", GetKey)
9+
api.Put("/:channel/:key", PutKey)
10+
api.Delete("/:channel/:key", DeleteKey)
11+
}

‎web/database/service.go‎

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package database
2+
3+
import (
4+
"cth.release/common/types"
5+
"cth.release/common/utils"
6+
"github.com/gofiber/fiber/v2"
7+
"github.com/syndtr/goleveldb/leveldb"
8+
)
9+
10+
func GetKey(ctx *fiber.Ctx) error {
11+
channel := ctx.Params("channel")
12+
key := ctx.Params("key")
13+
14+
type GetKeyRequest struct {
15+
Username string `json:"username"`
16+
Password string `json:"password"`
17+
}
18+
19+
var request GetKeyRequest
20+
if err := ctx.BodyParser(&request); err != nil {
21+
return types.Fail(ctx, 400, "Invalid Request")
22+
}
23+
24+
userDb, err := leveldb.OpenFile("data/users.db", nil)
25+
if err != nil {
26+
return types.Fail(ctx, 500, "Error Opening User Database")
27+
}
28+
defer userDb.Close()
29+
30+
userData, err := userDb.Get([]byte(request.Username), nil)
31+
if err != nil {
32+
return types.Fail(ctx, 404, "User not found")
33+
}
34+
35+
if string(userData) != utils.Sha512Hex(request.Password) {
36+
return types.Fail(ctx, 401, "Invalid Password")
37+
}
38+
39+
db, err := leveldb.OpenFile("data/data."+channel+".db", nil)
40+
if err != nil {
41+
return types.Fail(ctx, 500, "Error Opening Database")
42+
}
43+
defer db.Close()
44+
45+
data, err := db.Get([]byte(key), nil)
46+
47+
if err != nil {
48+
return types.Fail(ctx, 404, "Key not found")
49+
}
50+
51+
return types.Success(ctx, 200, string(data))
52+
}
53+
54+
func PutKey(ctx *fiber.Ctx) error {
55+
channel := ctx.Params("channel")
56+
key := ctx.Params("key")
57+
58+
// 구조체 { value: string }
59+
type PutKeyRequest struct {
60+
Username string `json:"username"`
61+
Password string `json:"password"`
62+
Value string `json:"value"`
63+
}
64+
65+
var request PutKeyRequest
66+
if err := ctx.BodyParser(&request); err != nil {
67+
return types.Fail(ctx, 400, "Invalid Request")
68+
}
69+
70+
userDb, err := leveldb.OpenFile("data/users.db", nil)
71+
if err != nil {
72+
return types.Fail(ctx, 500, "Error Opening User Database")
73+
}
74+
defer userDb.Close()
75+
76+
userData, err := userDb.Get([]byte(request.Username), nil)
77+
if err != nil {
78+
return types.Fail(ctx, 404, "User not found")
79+
}
80+
81+
if string(userData) != utils.Sha512Hex(request.Password) {
82+
return types.Fail(ctx, 401, "Invalid Password")
83+
}
84+
85+
db, err := leveldb.OpenFile("data/data."+channel+".db", nil)
86+
if err != nil {
87+
return types.Fail(ctx, 500, "Error Opening Database")
88+
}
89+
90+
defer db.Close()
91+
92+
err = db.Put([]byte(key), []byte(request.Value), nil)
93+
94+
if err != nil {
95+
return types.Fail(ctx, 500, "Error Putting Key")
96+
}
97+
98+
return types.Success(ctx, 200, "Key put successfully")
99+
}
100+
101+
func DeleteKey(ctx *fiber.Ctx) error {
102+
channel := ctx.Params("channel")
103+
key := ctx.Params("key")
104+
105+
type DeleteKeyRequest struct {
106+
Username string `json:"username"`
107+
Password string `json:"password"`
108+
}
109+
110+
var request DeleteKeyRequest
111+
if err := ctx.BodyParser(&request); err != nil {
112+
return types.Fail(ctx, 400, "Invalid Request")
113+
}
114+
115+
userDb, err := leveldb.OpenFile("data/users.db", nil)
116+
if err != nil {
117+
return types.Fail(ctx, 500, "Error Opening User Database")
118+
}
119+
defer userDb.Close()
120+
121+
userData, err := userDb.Get([]byte(request.Username), nil)
122+
if err != nil {
123+
return types.Fail(ctx, 404, "User not found")
124+
}
125+
126+
if string(userData) != utils.Sha512Hex(request.Password) {
127+
return types.Fail(ctx, 401, "Invalid Password")
128+
}
129+
130+
db, err := leveldb.OpenFile("data/data."+channel+".db", nil)
131+
if err != nil {
132+
return types.Fail(ctx, 500, "Error Opening Database")
133+
}
134+
135+
defer db.Close()
136+
137+
err = db.Delete([]byte(key), nil)
138+
139+
if err != nil {
140+
return types.Fail(ctx, 500, "Error Deleting Key")
141+
}
142+
143+
return types.Success(ctx, 200, "Key deleted successfully")
144+
}

‎web/handlers.go‎

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,14 @@ import (
66
"strings"
77

88
"cth.release/common"
9+
"cth.release/web/database"
910
"github.com/gofiber/fiber/v2"
1011
)
1112

1213
func SetupRoutes(app *fiber.App, cfg *common.Config) *fiber.App {
1314
api := app.Group("/api", EmptyMiddleware)
1415

15-
api.Get("/health", HealthHandler)
16+
database.SetupRoutes(api)
1617

1718
if hasFile(cfg.Web.StaticDir, cfg.Web.SPAIndexFile) {
1819
app.Static("/", cfg.Web.StaticDir)
@@ -26,10 +27,6 @@ func EmptyMiddleware(c *fiber.Ctx) error {
2627
return c.Next()
2728
}
2829

29-
func HealthHandler(c *fiber.Ctx) error {
30-
return c.SendString("Hello World")
31-
}
32-
3330
func SPARouteHandler(cfg *common.Config) fiber.Handler {
3431
return func(c *fiber.Ctx) error {
3532
if c.Method() != fiber.MethodGet {

0 commit comments

Comments
 (0)