Skip to content
Snippets Groups Projects
Commit 3680ec2c authored by Seongyeon Cho's avatar Seongyeon Cho
Browse files

add code

parent 949f7829
No related branches found
No related tags found
No related merge requests found
.DS_Store 0 → 100644
File added
File added
main.go 0 → 100644
package main
import (
"encoding/json"
"log"
"net/http"
"golang.org/x/crypto/bcrypt"
)
type User struct {
ID int `json:"id"`
Username string `json:"username"`
Email string `json:"email"`
Password string `json:"-"`
}
var users []User
var lastUserID int
func main() {
http.HandleFunc("/signup", signUp)
http.HandleFunc("/login", login)
log.Fatal(http.ListenAndServe(":8080", nil))
}
func signUp(w http.ResponseWriter, r *http.Request) {
var newUser User
err := json.NewDecoder(r.Body).Decode(&newUser)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(newUser.Password), bcrypt.DefaultCost)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
newUser.Password = string(hashedPassword)
lastUserID++
newUser.ID = lastUserID
users = append(users, newUser)
w.WriteHeader(http.StatusOK)
}
func login(w http.ResponseWriter, r *http.Request) {
var loginData struct {
Username string `json:"username"`
Password string `json:"password"`
}
err := json.NewDecoder(r.Body).Decode(&loginData)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
for _, user := range users {
if user.Username == loginData.Username {
err := bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(loginData.Password))
if err == nil {
w.WriteHeader(http.StatusOK)
return
}
}
}
http.Error(w, "Invalid username or password", http.StatusUnauthorized)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment