Compare commits
No commits in common. "78305a063aee705461977d889b02f6a4ddaee4db" and "f08b63fa61a7fe823fa6494ecc4b5bbb6bb2f8a4" have entirely different histories.
78305a063a
...
f08b63fa61
2 changed files with 16 additions and 38 deletions
6
go.mod
6
go.mod
|
@ -2,13 +2,11 @@ module git.dc09.ru/mitm-archive/server
|
||||||
|
|
||||||
go 1.22.3
|
go 1.22.3
|
||||||
|
|
||||||
require (
|
require github.com/valyala/fasthttp v1.55.0
|
||||||
github.com/mattn/go-sqlite3 v1.14.22
|
|
||||||
github.com/valyala/fasthttp v1.55.0
|
|
||||||
)
|
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/andybalholm/brotli v1.1.0 // indirect
|
github.com/andybalholm/brotli v1.1.0 // indirect
|
||||||
github.com/klauspost/compress v1.17.9 // indirect
|
github.com/klauspost/compress v1.17.9 // indirect
|
||||||
|
github.com/mattn/go-sqlite3 v1.14.22 // indirect
|
||||||
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
github.com/valyala/bytebufferpool v1.0.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
42
server.go
42
server.go
|
@ -4,9 +4,7 @@ import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"flag"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -15,15 +13,7 @@ import (
|
||||||
"github.com/valyala/fasthttp"
|
"github.com/valyala/fasthttp"
|
||||||
)
|
)
|
||||||
|
|
||||||
const pathsep = string(os.PathSeparator)
|
const behindProxy = true
|
||||||
|
|
||||||
var (
|
|
||||||
bind = flag.String("bind", "127.0.0.1:4001", "Where to listen for connections")
|
|
||||||
proxy = flag.Bool("proxy", true, "Whether server is behind a reverse proxy")
|
|
||||||
verbose = flag.Bool("verbose", false, "Whether to log all URLs")
|
|
||||||
dbpath = flag.String("dbpath", "archive.db", "Path to SQLite3 DB generated by mitmproxy addon")
|
|
||||||
storage = flag.String("storage", "storage", "Path to archived responses storage")
|
|
||||||
)
|
|
||||||
|
|
||||||
var removeHeaders = map[string]bool{
|
var removeHeaders = map[string]bool{
|
||||||
"date": true,
|
"date": true,
|
||||||
|
@ -35,9 +25,7 @@ var conn *sql.DB
|
||||||
var stmt *sql.Stmt
|
var stmt *sql.Stmt
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.Parse()
|
db, err := sql.Open("sqlite3", "archive.db")
|
||||||
|
|
||||||
db, err := sql.Open("sqlite3", *dbpath)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -51,10 +39,7 @@ func main() {
|
||||||
stmt = sel_stmt
|
stmt = sel_stmt
|
||||||
defer sel_stmt.Close()
|
defer sel_stmt.Close()
|
||||||
|
|
||||||
err1 := fasthttp.ListenAndServe(*bind, handler)
|
fasthttp.ListenAndServe("127.0.0.1:4001", handler)
|
||||||
if err1 != nil {
|
|
||||||
log.Fatalln(err1)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func handler(ctx *fasthttp.RequestCtx) {
|
func handler(ctx *fasthttp.RequestCtx) {
|
||||||
|
@ -62,7 +47,7 @@ func handler(ctx *fasthttp.RequestCtx) {
|
||||||
uri := ctx.URI()
|
uri := ctx.URI()
|
||||||
|
|
||||||
var scheme []byte
|
var scheme []byte
|
||||||
if *proxy {
|
if behindProxy {
|
||||||
scheme = ctx.Request.Header.Peek("X-Forwarded-Proto")
|
scheme = ctx.Request.Header.Peek("X-Forwarded-Proto")
|
||||||
} else {
|
} else {
|
||||||
scheme = uri.Scheme()
|
scheme = uri.Scheme()
|
||||||
|
@ -73,21 +58,16 @@ func handler(ctx *fasthttp.RequestCtx) {
|
||||||
bytes.Equal(scheme, []byte("https")),
|
bytes.Equal(scheme, []byte("https")),
|
||||||
)
|
)
|
||||||
|
|
||||||
urlToSearch := fmt.Sprintf(
|
row := stmt.QueryRow(
|
||||||
|
string(ctx.Method()),
|
||||||
|
fmt.Sprintf(
|
||||||
"%s://%s:%s%s",
|
"%s://%s:%s%s",
|
||||||
scheme,
|
scheme,
|
||||||
host,
|
host,
|
||||||
port,
|
port,
|
||||||
ctx.RequestURI(),
|
ctx.RequestURI(),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
row := stmt.QueryRow(
|
|
||||||
string(ctx.Method()),
|
|
||||||
urlToSearch,
|
|
||||||
)
|
|
||||||
|
|
||||||
if *verbose {
|
|
||||||
log.Println(urlToSearch)
|
|
||||||
}
|
|
||||||
|
|
||||||
var id int
|
var id int
|
||||||
var code int
|
var code int
|
||||||
|
@ -105,9 +85,9 @@ func handler(ctx *fasthttp.RequestCtx) {
|
||||||
ctx.Response.SetStatusCode(code)
|
ctx.Response.SetStatusCode(code)
|
||||||
|
|
||||||
// -- find in FS and read headers+body
|
// -- find in FS and read headers+body
|
||||||
path := *storage + pathsep + strconv.Itoa(id)
|
path := "storage/" + strconv.Itoa(id)
|
||||||
|
|
||||||
fh, err := os.Open(path + pathsep + "headers")
|
fh, err := os.Open(path + "/headers")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sendError(ctx, "Unable to read headers: ", err)
|
sendError(ctx, "Unable to read headers: ", err)
|
||||||
return
|
return
|
||||||
|
@ -123,7 +103,7 @@ func handler(ctx *fasthttp.RequestCtx) {
|
||||||
}
|
}
|
||||||
fh.Close()
|
fh.Close()
|
||||||
|
|
||||||
fb, err := os.Open(path + pathsep + "body")
|
fb, err := os.Open(path + "/body")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
sendError(ctx, "Unable to read body: ", err)
|
sendError(ctx, "Unable to read body: ", err)
|
||||||
return
|
return
|
||||||
|
|
Loading…
Add table
Reference in a new issue