* feat(api-key): add IP whitelist/blacklist restriction and usage log IP tracking - Add IP restriction feature for API keys (whitelist/blacklist with CIDR support) - Add IP address logging to usage logs (admin-only visibility) - Remove billing_type column from usage logs UI (redundant) - Use generic "Access denied" error message for security Backend: - New ip package with IP/CIDR validation and matching utilities - Database migrations for ip_whitelist, ip_blacklist (api_keys) and ip_address (usage_logs) - Middleware IP restriction check after API key validation - Input validation for IP/CIDR patterns on create/update Frontend: - API key form with enable toggle for IP restriction - Shield icon indicator in table for keys with IP restriction - Removed billing_type filter and column from usage views * fix: update API contract tests for ip_whitelist/ip_blacklist fields Add ip_whitelist and ip_blacklist fields to expected JSON responses in API contract tests to match the new API key schema.
60 lines
1.1 KiB
Go
60 lines
1.1 KiB
Go
package service
|
|
|
|
import "time"
|
|
|
|
const (
|
|
BillingTypeBalance int8 = 0 // 钱包余额
|
|
BillingTypeSubscription int8 = 1 // 订阅套餐
|
|
)
|
|
|
|
type UsageLog struct {
|
|
ID int64
|
|
UserID int64
|
|
APIKeyID int64
|
|
AccountID int64
|
|
RequestID string
|
|
Model string
|
|
|
|
GroupID *int64
|
|
SubscriptionID *int64
|
|
|
|
InputTokens int
|
|
OutputTokens int
|
|
CacheCreationTokens int
|
|
CacheReadTokens int
|
|
|
|
CacheCreation5mTokens int
|
|
CacheCreation1hTokens int
|
|
|
|
InputCost float64
|
|
OutputCost float64
|
|
CacheCreationCost float64
|
|
CacheReadCost float64
|
|
TotalCost float64
|
|
ActualCost float64
|
|
RateMultiplier float64
|
|
|
|
BillingType int8
|
|
Stream bool
|
|
DurationMs *int
|
|
FirstTokenMs *int
|
|
UserAgent *string
|
|
IPAddress *string
|
|
|
|
// 图片生成字段
|
|
ImageCount int
|
|
ImageSize *string
|
|
|
|
CreatedAt time.Time
|
|
|
|
User *User
|
|
APIKey *APIKey
|
|
Account *Account
|
|
Group *Group
|
|
Subscription *UserSubscription
|
|
}
|
|
|
|
func (u *UsageLog) TotalTokens() int {
|
|
return u.InputTokens + u.OutputTokens + u.CacheCreationTokens + u.CacheReadTokens
|
|
}
|