|
package Api
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
|
|
"git.tovijaeschke.xyz/tovi/Envelope/Backend/Api/Auth"
|
|
"git.tovijaeschke.xyz/tovi/Envelope/Backend/Api/Friends"
|
|
"git.tovijaeschke.xyz/tovi/Envelope/Backend/Api/Messages"
|
|
"git.tovijaeschke.xyz/tovi/Envelope/Backend/Api/Users"
|
|
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
func loggingMiddleware(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
log.Printf(
|
|
"%s %s, Content Length: %d",
|
|
r.Method,
|
|
r.RequestURI,
|
|
r.ContentLength,
|
|
)
|
|
|
|
next.ServeHTTP(w, r)
|
|
})
|
|
}
|
|
|
|
func authenticationMiddleware(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
var err error
|
|
|
|
_, err = Auth.CheckCookie(r)
|
|
if err != nil {
|
|
http.Error(w, "Forbidden", http.StatusUnauthorized)
|
|
return
|
|
}
|
|
|
|
next.ServeHTTP(w, r)
|
|
})
|
|
}
|
|
|
|
// InitAPIEndpoints initializes all API endpoints required by mobile app
|
|
func InitAPIEndpoints(router *mux.Router) {
|
|
var (
|
|
api *mux.Router
|
|
authAPI *mux.Router
|
|
fs http.Handler
|
|
)
|
|
|
|
log.Println("Initializing API routes...")
|
|
|
|
api = router.PathPrefix("/api/v1/").Subrouter()
|
|
api.Use(loggingMiddleware)
|
|
|
|
// Define routes for authentication
|
|
api.HandleFunc("/signup", Auth.Signup).Methods("POST")
|
|
api.HandleFunc("/login", Auth.Login).Methods("POST")
|
|
api.HandleFunc("/logout", Auth.Logout).Methods("GET")
|
|
|
|
authAPI = api.PathPrefix("/auth/").Subrouter()
|
|
authAPI.Use(authenticationMiddleware)
|
|
|
|
authAPI.HandleFunc("/check", Auth.Check).Methods("GET")
|
|
|
|
authAPI.HandleFunc("/change_password", Auth.ChangePassword).Methods("POST")
|
|
authAPI.HandleFunc("/message_expiry", Auth.ChangeMessageExpiry).Methods("POST")
|
|
|
|
authAPI.HandleFunc("/users", Users.SearchUsers).Methods("GET")
|
|
|
|
authAPI.HandleFunc("/friend_requests", Friends.EncryptedFriendRequestList).Methods("GET")
|
|
authAPI.HandleFunc("/friend_request", Friends.CreateFriendRequest).Methods("POST")
|
|
authAPI.HandleFunc("/friend_request/qr_code", Friends.CreateFriendRequestQrCode).Methods("POST")
|
|
authAPI.HandleFunc("/friend_request/{requestID}", Friends.AcceptFriendRequest).Methods("POST")
|
|
authAPI.HandleFunc("/friend_request/{requestID}", Friends.RejectFriendRequest).Methods("DELETE")
|
|
|
|
authAPI.HandleFunc("/conversations", Messages.EncryptedConversationList).Methods("GET")
|
|
authAPI.HandleFunc("/conversation_details", Messages.EncryptedConversationDetailsList).Methods("GET")
|
|
authAPI.HandleFunc("/conversations", Messages.CreateConversation).Methods("POST")
|
|
authAPI.HandleFunc("/conversations", Messages.UpdateConversation).Methods("PUT")
|
|
|
|
authAPI.HandleFunc("/message", Messages.CreateMessage).Methods("POST")
|
|
authAPI.HandleFunc("/messages/{associationKey}", Messages.Messages).Methods("GET")
|
|
|
|
// TODO: Add authentication to this route
|
|
fs = http.FileServer(http.Dir("./attachments/"))
|
|
router.PathPrefix("/files/").Handler(http.StripPrefix("/files/", fs))
|
|
}
|