security: Add proper authentication, RBAC, and tenant isolation
- Add password hashing with bcrypt - Add AuthService with proper login - Add password strength validation - Add RBAC middleware (AdminOnly, ManagerOrAdmin) - Add tenant isolation middleware - Update CRM handler with tenant filtering - Add JWT fallback for development mode - Add user context helpers - Build successful
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
package handlers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
)
|
||||
|
||||
// StripeHandler hanterar Stripe Connect för quiXzoom-utbetalningar
|
||||
type StripeHandler struct {
|
||||
apiKey string
|
||||
webhookSecret string
|
||||
}
|
||||
|
||||
func NewStripeHandler() *StripeHandler {
|
||||
return &StripeHandler{
|
||||
apiKey: os.Getenv("STRIPE_API_KEY"),
|
||||
webhookSecret: os.Getenv("STRIPE_WEBHOOK_SECRET"),
|
||||
}
|
||||
}
|
||||
|
||||
// StripeAccount representerar ett Stripe-konto
|
||||
type StripeAccount struct {
|
||||
ID string `json:"id"`
|
||||
Email string `json:"email"`
|
||||
Status string `json:"status"`
|
||||
Type string `json:"type"`
|
||||
Country string `json:"country"`
|
||||
Currency string `json:"currency"`
|
||||
Balance float64 `json:"balance"`
|
||||
PayoutsEnabled bool `json:"payouts_enabled"`
|
||||
ChargesEnabled bool `json:"charges_enabled"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
// StripePayout representerar en Stripe-utbetalning
|
||||
type StripePayout struct {
|
||||
ID string `json:"id"`
|
||||
Amount float64 `json:"amount"`
|
||||
Currency string `json:"currency"`
|
||||
Status string `json:"status"`
|
||||
Method string `json:"method"`
|
||||
ArrivalDate string `json:"arrival_date"`
|
||||
BankAccount string `json:"bank_account"`
|
||||
Description string `json:"description"`
|
||||
}
|
||||
|
||||
// GetStatus returnerar Stripe-kopplingsstatus
|
||||
func (h *StripeHandler) GetStatus(w http.ResponseWriter, r *http.Request) {
|
||||
configured := h.apiKey != ""
|
||||
|
||||
status := map[string]interface{}{
|
||||
"configured": configured,
|
||||
"webhook_url": "https://boc.landvex.com/api/v1/stripe/webhook",
|
||||
"setup_required": !configured,
|
||||
}
|
||||
|
||||
if !configured {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusServiceUnavailable)
|
||||
json.NewEncoder(w).Encode(map[string]interface{}{
|
||||
"ok": false,
|
||||
"error": "Stripe not configured. Set STRIPE_API_KEY environment variable.",
|
||||
"stripe": status,
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
writeJSON(w, http.StatusOK, map[string]interface{}{
|
||||
"ok": true,
|
||||
"stripe": status,
|
||||
})
|
||||
}
|
||||
|
||||
// GetAccounts returnerar Stripe-konton (zoomers)
|
||||
func (h *StripeHandler) GetAccounts(w http.ResponseWriter, r *http.Request) {
|
||||
if h.apiKey == "" {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusServiceUnavailable)
|
||||
json.NewEncoder(w).Encode(map[string]interface{}{
|
||||
"ok": false,
|
||||
"error": "Stripe not configured. Set STRIPE_API_KEY environment variable.",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// TODO: Implementera riktig Stripe API-integration
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusNotImplemented)
|
||||
json.NewEncoder(w).Encode(map[string]interface{}{
|
||||
"ok": false,
|
||||
"error": "Stripe integration not yet implemented. Contact administrator to configure.",
|
||||
})
|
||||
}
|
||||
|
||||
// GetPayouts returnerar Stripe-utbetalningar
|
||||
func (h *StripeHandler) GetPayouts(w http.ResponseWriter, r *http.Request) {
|
||||
if h.apiKey == "" {
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusServiceUnavailable)
|
||||
json.NewEncoder(w).Encode(map[string]interface{}{
|
||||
"ok": false,
|
||||
"error": "Stripe not configured. Set STRIPE_API_KEY environment variable.",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// TODO: Implementera riktig Stripe API-integration
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusNotImplemented)
|
||||
json.NewEncoder(w).Encode(map[string]interface{}{
|
||||
"ok": false,
|
||||
"error": "Stripe integration not yet implemented. Contact administrator to configure.",
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user