import texttemplate "text/template" import "html/template" import "bytes" import "time" import "github.com/hlandau/degoutils/log" import "github.com/hlandau/degoutils/sendemail" import "gopkg.in/hlandau/easyconfig.v1/cflag" import "gopkg.in/hlandau/svcutils.v1/exepath" import "fmt" import "github.com/hlandau/degoutils/web/opts" import "github.com/hlandau/degoutils/web/servicenexus" import "net/url" import "strings" import "gopkg.in/hlandau/easymetric.v1/cexp" var cErrorResponsesIssued = cexp.NewCounter("web.errorResponsesIssued") var panicsToFlag = cflag.String(nil, "panicsto", "", "E. mail address to send panics to") var webmasterAddressFlag = cflag.String(nil, "webmasteraddress", "", "Webmaster e. mail address (shown on panic)") // The error handling HTTP handler, wrapping an inner handler for which panics // are handled. func Handler(h http.Handler) http.Handler { return http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { defer func() { if err := recover(); err != nil { const size = 4096 stack := make([]byte, size) stack = stack[:runtime.Stack(stack, false)] renderError(rw, req, err, stack)
import "net/mail" import "net/smtp" import "os" import "os/exec" import "net" import "gopkg.in/hlandau/easymetric.v1/cexp" import "gopkg.in/hlandau/easyconfig.v1/cflag" import "path/filepath" import "github.com/hlandau/xlog" import "sync" import "io" import "gopkg.in/alexcesaro/quotedprintable.v3" import "mime/multipart" import "net/textproto" var cEmailsSent = cexp.NewCounter("sendemail.emailsSent") var log, Log = xlog.New("sendemail") var ( fg = cflag.NewGroup(nil, "sendemail") smtpAddressFlag = cflag.String(fg, "smtpaddress", "", "SMTP address (hostname[:port])") smtpUsernameFlag = cflag.String(fg, "smtpusername", "", "SMTP username") smtpPasswordFlag = cflag.String(fg, "smtppassword", "", "SMTP password") sendmailPathFlag = cflag.String(fg, "sendmailpath", "", "path to /usr/sbin/sendmail") numSendersFlag = cflag.Int(fg, "numsenders", 2, "number of asynchronous e. mail senders") fromFlag = cflag.String(fg, "from", "nobody@localhost", "Default from address") ) var sendChan = make(chan *Email, 32) var startOnce sync.Once
"github.com/hlandau/xlog" "github.com/llgcode/draw2d" "gopkg.in/hlandau/easyconfig.v1/cflag" "gopkg.in/hlandau/easymetric.v1/cexp" "gopkg.in/tylerb/graceful.v1" "net" "net/http" "net/url" "path/filepath" "strings" "time" ) var log, Log = xlog.New("web") var cRequestsHandled = cexp.NewCounter("web.requestsHandled") var bindFlag = cflag.String(nil, "bind", ":3400", "HTTP binding address") var redisAddressFlag = cflag.String(nil, "redisaddress", "localhost:6379", "Redis address") var redisPasswordFlag = cflag.String(nil, "redispassword", "", "Redis password") var redisPrefixFlag = cflag.String(nil, "redisprefix", "", "Redis prefix") var captchaFontPathFlag = cflag.String(nil, "captchafontpath", "", "Path to CAPTCHA font directory") var reportURI = cflag.String(nil, "reporturi", "/.csp-report", "CSP/PKP report URI") var Router *mux.Router func init() { Router = mux.NewRouter() Router.KeepContext = true Router.NotFoundHandler = http.HandlerFunc(NotFound) }
// Package passlib provides a simple password hashing and verification // interface abstracting multiple password hashing schemes. // // Most people need concern themselves only with the functions Hash // and Verify, which uses the default context and sensible defaults. package passlib // import "gopkg.in/hlandau/passlib.v1" import "gopkg.in/hlandau/passlib.v1/abstract" import "gopkg.in/hlandau/passlib.v1/hash/scrypt" import "gopkg.in/hlandau/passlib.v1/hash/sha2crypt" import "gopkg.in/hlandau/passlib.v1/hash/bcryptsha256" import "gopkg.in/hlandau/passlib.v1/hash/bcrypt" import "gopkg.in/hlandau/easymetric.v1/cexp" var cHashCalls = cexp.NewCounter("passlib.ctx.hashCalls") var cVerifyCalls = cexp.NewCounter("passlib.ctx.verifyCalls") var cSuccessfulVerifyCalls = cexp.NewCounter("passlib.ctx.successfulVerifyCalls") var cFailedVerifyCalls = cexp.NewCounter("passlib.ctx.failedVerifyCalls") var cSuccessfulVerifyCallsWithUpgrade = cexp.NewCounter("passlib.ctx.successfulVerifyCallsWithUpgrade") var cSuccessfulVerifyCallsDeferringUpgrade = cexp.NewCounter("passlib.ctx.successfulVerifyCallsDeferringUpgrade") // The default schemes, most preferred first. The first scheme will be used to // hash passwords, and any of the schemes may be used to verify existing // passwords. The contents of this value may change with subsequent releases. var DefaultSchemes = []abstract.Scheme{ scrypt.SHA256Crypter, sha2crypt.Crypter256, sha2crypt.Crypter512, bcryptsha256.Crypter, bcrypt.Crypter, }