/* tofuproxy -- HTTP proxy with TLS certificates management Copyright (C) 2021 Sergey Matveev This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ package fifos import ( "log" "os" "path/filepath" "time" "go.cypherpunks.ru/tai64n/v2" ) var ( NoTAI bool FIFOs string SinkCert = make(chan string) SinkDANE = make(chan string) SinkErr = make(chan string) SinkOK = make(chan string) SinkOther = make(chan string) SinkRedir = make(chan string) SinkReq = make(chan string) SinkTLS = make(chan string) ) func sinker(c chan string, p string) { tai := new(tai64n.TAI64N) for { fd, err := os.OpenFile(p, os.O_WRONLY|os.O_APPEND, os.FileMode(0666)) if err != nil { log.Fatalln(err) } for s := range c { if NoTAI { _, err = fd.WriteString(s + "\n") } else { tai.FromTime(time.Now()) _, err = fd.WriteString(tai64n.Encode(tai[:]) + " " + s + "\n") } if err != nil { break } } fd.Close() } } func Init() { go sinker(SinkCert, filepath.Join(FIFOs, "cert")) go sinker(SinkDANE, filepath.Join(FIFOs, "dane")) go sinker(SinkErr, filepath.Join(FIFOs, "err")) go sinker(SinkOK, filepath.Join(FIFOs, "ok")) go sinker(SinkOther, filepath.Join(FIFOs, "other")) go sinker(SinkRedir, filepath.Join(FIFOs, "redir")) go sinker(SinkReq, filepath.Join(FIFOs, "req")) go sinker(SinkTLS, filepath.Join(FIFOs, "tls")) }