diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 283b9b4..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/config/config.go b/config/config.go index c5211ad..124c81f 100644 --- a/config/config.go +++ b/config/config.go @@ -19,10 +19,10 @@ type PathConfiguration struct { } type DatabaseConfiguration struct { - Host string `yaml:"host"` - Port int `yaml:"port"` - Username string `yaml:"username"` - Password string `yaml:"password"` + Host string `yaml:"host"` + Port int `yaml:"port"` + Username string `yaml:"username"` + Password *string `yaml:"password"` } type FeaturesConfiguration struct { diff --git a/database/database.go b/database/database.go index 8e61358..14616fa 100644 --- a/database/database.go +++ b/database/database.go @@ -25,13 +25,20 @@ func init() { locks = make(map[int]GameUploadToken) dbConfig := config.Database() var err error - db, err = gorm.Open(mysql.Open( - fmt.Sprintf("%s:%s@tcp(%s:%d)/transagenda?charset=utf8mb4&parseTime=True&loc=Local", + connectionString := "" + if dbConfig.Password != nil { + connectionString = fmt.Sprintf("%s:%s@tcp(%s:%d)/osc?charset=utf8mb4&parseTime=True&loc=Local", dbConfig.Username, - dbConfig.Password, + *dbConfig.Password, dbConfig.Host, - dbConfig.Port), - ), &gorm.Config{ + dbConfig.Port) + } else { + connectionString = fmt.Sprintf("%s@tcp(%s:%d)/osc?charset=utf8mb4&parseTime=True&loc=Local", + dbConfig.Username, + dbConfig.Host, + dbConfig.Port) + } + db, err = gorm.Open(mysql.Open(connectionString), &gorm.Config{ Logger: logger.New( log.New(os.Stdout, "", log.LstdFlags), // io writer logger.Config{ diff --git a/database/model.go b/database/model.go index bf925d3..aad24a1 100644 --- a/database/model.go +++ b/database/model.go @@ -9,14 +9,14 @@ type User struct { } type Game struct { - ID int `json:"id"` - Name string `json:"name"` - Revision int `json:"rev"` - PathStorage string `json:"-"` - Hash string `json:"hash"` - LastUpdate time.Time `json:"last_update"` - UserId int `json:"-"` - Available bool `json:"available"` + ID int `json:"id"` + Name string `json:"name"` + Revision int `json:"rev"` + PathStorage string `json:"-"` + Hash *string `json:"hash"` + LastUpdate *time.Time `json:"last_update"` + UserId int `json:"-"` + Available bool `json:"available"` } type GameUploadToken struct { diff --git a/server/authentication.go b/server/authentication.go index 8293d26..a564708 100644 --- a/server/authentication.go +++ b/server/authentication.go @@ -14,6 +14,10 @@ type Credential struct { Password string `json:"password"` } +type TokenValidation struct { + Valid bool `json:"valid"` +} + func Login(w http.ResponseWriter, r *http.Request) { body, err := io.ReadAll(r.Body) if err != nil { @@ -62,3 +66,31 @@ func Register(w http.ResponseWriter, r *http.Request) { } ok(payload, w, r) } + +func CheckToken(w http.ResponseWriter, r *http.Request) { + body, err := io.ReadAll(r.Body) + if err != nil { + internalServerError(w, r) + log.Println(err) + return + } + credential := new(authentication.AccessToken) + err = json.Unmarshal(body, credential) + if err != nil { + internalServerError(w, r) + log.Println(err) + return + } + _, err = authentication.ParseToken(credential.Token) + if err != nil { + payload := TokenValidation{ + Valid: false, + } + ok(payload, w, r) + return + } + payload := TokenValidation{ + Valid: true, + } + ok(payload, w, r) +} diff --git a/server/server.go b/server/server.go index 4cc8031..60d3f86 100644 --- a/server/server.go +++ b/server/server.go @@ -23,6 +23,7 @@ func Serve() { router.Route("/api", func(rApi chi.Router) { rApi.Route("/v1", func(r chi.Router) { r.Post("/login", Login) + r.Post("/check/token", CheckToken) if config.Features().AllowRegister { r.Post("/register", Register) }