Documentation v1.0.0

Configuration

This page lists the fields, JSON keys, and defaults of Config and its Redis, Log, Filepath, and EmailConfig parts; scoring and rate parameters are in Parameters.

Config

Field JSON key Type Required Description
Redis redis Redis Yes Redis connection
Email email *EmailConfig No Deny alerts; nil sends nothing
Log log *Log No Logger settings (pardnchiu/go-logger)
Filepath filepath Filepath No GeoLite2 and list file paths
Parameter parameter Parameter No Thresholds, scores, rates, block durations

New() takes the config by value and keeps its own copy; changing the caller's Config afterward has no effect.

Redis

Field JSON key Default Description
Host host localhost Host
Port port 6379 Port; outside 1–65535 the default applies
Password password "" Password
DB db 0 Database index

No key has a prefix, so use a dedicated database index when sharing Redis with other services; the key list is in Redis Keys.

Log

Log is an alias of the Log type in pardnchiu/go-logger:

Field JSON key Default Description
Path path ./logs/mysqlPool Log path
Stdout stdout false Also write to stdout
MaxSize max_size 16777216 (16 MiB) Per-file limit in bytes
MaxBackup max_backups 5 Rotated files kept
Type type text text or json

Filepath

Field JSON key Default Description
CityDB city_db "" GeoLite2-City.mmdb path
CountryDB country_db "" GeoLite2-Country.mmdb path
WhiteList trust_list ./whiteList.json Allow list file
BlackList ban_list ./blackList.json Deny list file

Note that the JSON keys differ from the field names (trust_list, ban_list).

EmailConfig

Field JSON key Type Description
Host host string SMTP host
Port port int SMTP port (587 recommended)
Username username string PLAIN auth user
Password password string PLAIN auth password
From from string Sender
To to []string Recipients
CC cc []string Header only; never delivered
Subject - *func(ip, reason string) string Custom subject
Body - *func(ip, reason string) string Custom body

Details are in Email Alerts.

Loading from JSON

package main

import (
    "encoding/json"
    "log"
    "os"

    golangIPSentry "github.com/pardnchiu/golang-ip-sentry"
)

func main() {
    raw, err := os.ReadFile("sentry.json")
    if err != nil {
        log.Fatal(err)
    }
    var cfg golangIPSentry.Config
    if err := json.Unmarshal(raw, &cfg); err != nil {
        log.Fatal(err)
    }
    sentry, err := golangIPSentry.New(cfg)
    if err != nil {
        log.Fatal(err)
    }
    defer sentry.Close()
}
{
  "redis": {"host": "localhost", "port": 6379, "db": 2},
  "log": {"path": "./logs/sentry", "type": "json"},
  "filepath": {"city_db": "./GeoLite2-City.mmdb", "trust_list": "./allow.json", "ban_list": "./deny.json"},
  "parameter": {"block_time_min": 300000000000, "block_time_max": 86400000000000}
}

time.Duration fields are nanosecond integers in JSON (5 minutes and 24 hours above).

中文