am i finished?

This commit is contained in:
2025-08-25 14:23:57 +01:00
parent 769f3981cd
commit fe0968716d
12 changed files with 282 additions and 105 deletions

View File

@@ -1,9 +1,9 @@
package auth
import (
"fmt"
"os"
"github.com/charmbracelet/log"
"github.com/wneessen/go-mail"
)
@@ -11,7 +11,9 @@ type MailClient struct {
client *mail.Client
}
type TestMailClient struct{}
type TestMailClient struct {
logger *log.Logger
}
type Mailer interface {
SendCode(to string, code string) error
@@ -43,15 +45,17 @@ func (m MailClient) SendCode(to string, code string) error {
}
func (m TestMailClient) SendCode(to string, code string) error {
fmt.Printf("Email: %s | Code %s\n", to, code)
m.logger.Info("Auth Code", "email", to, "code", code)
return nil
}
func CreateMailClient() (Mailer, error) {
func CreateMailClient(log *log.Logger) (Mailer, error) {
mode := os.Getenv("MODE")
if mode == "DEV" {
return TestMailClient{}, nil
return TestMailClient{
log,
}, nil
}
client, err := mail.NewClient(

View File

@@ -35,7 +35,6 @@ type codeReturn struct {
}
func (h *AuthHandler) login(body loginBody, w http.ResponseWriter, r *http.Request) {
// TODO: validate email
err := h.auth.CreateCode(body.Email)
if err != nil {
middleware.WriteErrorInternal(h.logger, "could not create a code", w)
@@ -92,7 +91,7 @@ func CreateAuthHandler(db *sql.DB) AuthHandler {
userModel := models.NewUserModel(db)
logger := log.New(os.Stdout).WithPrefix("Auth")
mailer, err := CreateMailClient()
mailer, err := CreateMailClient(logger)
if err != nil {
panic(err)
}

View File

@@ -145,15 +145,15 @@ func (h *ImageHandler) CreateRoutes(r chi.Router) {
h.logger.Info("Mounting image router")
// Public route for serving images (not protected)
r.Get("/image/{id}", h.serveImage)
r.Get("/{id}", h.serveImage)
// Protected routes
r.Group(func(r chi.Router) {
r.Use(middleware.ProtectedRoute)
r.Use(middleware.SetJson)
r.Get("/image", h.listImages)
r.Post("/image/{name}", h.uploadImage)
r.Get("/", h.listImages)
r.Post("/{name}", h.uploadImage)
})
}

View File

@@ -358,7 +358,7 @@ func TestAllRoutes(t *testing.T) {
t.Run("Image Routes", func(t *testing.T) {
t.Run("Get images without authentication", func(t *testing.T) {
resp := tc.makeRequest(t, "GET", "/images/image", "", nil)
resp := tc.makeRequest(t, "GET", "/images/", "", nil)
defer resp.Body.Close()
if resp.StatusCode != http.StatusUnauthorized {
@@ -367,7 +367,7 @@ func TestAllRoutes(t *testing.T) {
})
t.Run("Get images with authentication", func(t *testing.T) {
resp := tc.makeRequest(t, "GET", "/images/image", imageUser.Token, nil)
resp := tc.makeRequest(t, "GET", "/images/", imageUser.Token, nil)
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
@@ -384,7 +384,7 @@ func TestAllRoutes(t *testing.T) {
// Create a simple valid base64 string for testing
testImageBase64 := "dGVzdCBkYXRh" // "test data" in base64
req, err := http.NewRequest("POST", tc.server.URL+"/images/image/test.png", strings.NewReader(testImageBase64))
req, err := http.NewRequest("POST", tc.server.URL+"/images/test.png", strings.NewReader(testImageBase64))
if err != nil {
t.Fatalf("Failed to create request: %v", err)
}
@@ -417,7 +417,7 @@ func TestAllRoutes(t *testing.T) {
0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82,
}
req, err := http.NewRequest("POST", tc.server.URL+"/images/image/test2.png", bytes.NewReader(testImageBinary))
req, err := http.NewRequest("POST", tc.server.URL+"/images/test2.png", bytes.NewReader(testImageBinary))
if err != nil {
t.Fatalf("Failed to create request: %v", err)
}
@@ -440,7 +440,7 @@ func TestAllRoutes(t *testing.T) {
})
t.Run("Upload image without name", func(t *testing.T) {
resp := tc.makeRequest(t, "POST", "/images/image/", imageUser.Token, nil)
resp := tc.makeRequest(t, "POST", "/images/", imageUser.Token, nil)
defer resp.Body.Close()
// Route pattern doesn't match empty names, so returns 404
@@ -451,7 +451,7 @@ func TestAllRoutes(t *testing.T) {
t.Run("Serve non-existent image", func(t *testing.T) {
fakeUUID := uuid.New()
resp := tc.makeRequest(t, "GET", "/images/image/"+fakeUUID.String(), "", nil)
resp := tc.makeRequest(t, "GET", "/images/"+fakeUUID.String(), "", nil)
defer resp.Body.Close()
if resp.StatusCode != http.StatusNotFound {
@@ -462,7 +462,7 @@ func TestAllRoutes(t *testing.T) {
t.Run("Complete User Flow", func(t *testing.T) {
// Step 1: Test authentication is working
resp := tc.makeRequest(t, "GET", "/images/image", flowUser.Token, nil)
resp := tc.makeRequest(t, "GET", "/images/", flowUser.Token, nil)
if resp.StatusCode != http.StatusOK {
t.Errorf("Authentication failed, expected 200, got %d", resp.StatusCode)
}
@@ -478,7 +478,7 @@ func TestAllRoutes(t *testing.T) {
0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82,
}
req, err := http.NewRequest("POST", tc.server.URL+"/images/image/test_flow.png", bytes.NewReader(testImageBinary))
req, err := http.NewRequest("POST", tc.server.URL+"/images/test_flow.png", bytes.NewReader(testImageBinary))
if err != nil {
t.Fatalf("Failed to create upload request: %v", err)
}
@@ -500,7 +500,7 @@ func TestAllRoutes(t *testing.T) {
resp.Body.Close()
// Step 3: Verify image appears in user's image list
resp = tc.makeRequest(t, "GET", "/images/image", flowUser.Token, nil)
resp = tc.makeRequest(t, "GET", "/images/", flowUser.Token, nil)
if resp.StatusCode != http.StatusOK {
t.Errorf("Failed to get user images, expected 200, got %d", resp.StatusCode)
}