commit - a7e7d1d5189113e16d1cd8eb7a6d044d3eca0aca
commit + c7ecbae7a01d99416d38b142023e4701508d903b
blob - 98a9f070192863dc80ac6d29db43f0aa03ec5064
blob + 81ef5523f4eb5c7954232f88156d459c9429bc3a
--- client.go
+++ client.go
"bytes"
"encoding/json"
"fmt"
- "io"
"net/http"
"mailmux.net/aliases"
}
defer resp.Body.Close()
- buf.Reset()
- io.Copy(buf, resp.Body)
- fmt.Println(string(buf.Bytes()))
- rmsg, err := ParseMcall(buf)
+ rmsg, err := ParseMcall(resp.Body)
if err != nil {
return nil, fmt.Errorf("list aliases: parse response: %w", err)
}
blob - 51e0bf7797f62622a549f18aa0f43c9b2b4b2d2e
blob + c059ade036f84a30c881da06b1f534ae3f56668f
--- cmd/mailmux/mailmux.go
+++ cmd/mailmux/mailmux.go
rerror(w, err.Error(), http.StatusBadRequest)
return
}
- _, err = srv.users.Lookup(tmsg.Username)
+
+ fmt.Println("authenticating...")
+ err = srv.users.Authenticate(tmsg.Username, mailmux.Password(tmsg.Password))
if err != nil {
rerror(w, "unauthorised", http.StatusUnauthorized)
log.Println(err)
return
}
+ fmt.Println("authenticated?")
- // TODO authenticate user
-
switch tmsg.Type {
case mailmux.Tnew:
srv.newAlias(w, tmsg)
}
srv := &server{}
- db, err := mailmux.OpenUserDB(path.Join(cdir, "/mailmux/db"), ticketDir)
+ srv.users, err = mailmux.OpenUserDB(path.Join(cdir, "/mailmux/db"), ticketDir)
if err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
- srv.users = db
srv.aliaspath = "/tmp/aliases"
srv.aliases, err = aliases.Load(srv.aliaspath)
blob - 26966c2e5dd6cb30b90898b3dedd30a52773a6a6
blob + 2050aa72e2ed4a6392495d6fed4365660326a41c
--- cmd/mailmux/mailmux_test.go
+++ cmd/mailmux/mailmux_test.go
package main
import (
- "fmt"
"net"
"net/http"
"os"
func TestAliases(t *testing.T) {
client := newTestServerClient(t)
for i := 0; i <= 100; i++ {
- a, err := client.NewAlias()
+ _, err := client.NewAlias()
if err != nil {
t.Fatal(err)
}
- fmt.Println(a)
}
- a, err := client.Aliases()
+ _, err := client.Aliases()
if err != nil {
t.Fatal(err)
}
- fmt.Println(a)
}
blob - f147c4457cb40a47a4144343f9916eac478b7d86
blob + 4e046afa5926a6d65019874e82b357817e575f3d
--- mcall.go
+++ mcall.go
Tremove
)
-// An Mcall is a message passed between mailmux client and servers.
+// Mcall represents a message passed between mailmux clients and servers.
// Operations requested by clients are T-messages (such as Tregister).
-// Servers respond with the corresponding R-message (such as Rregister) or Rerror to inform the client,
-// with a diagnostic message, that the request was not completed successfully.
+// Servers respond with the corresponding R-message (such as Rregister).
+// Servers may instead respond with Rerror to inform the client, with a diagnostic message,
+// that the request was not completed successfully.
// This design is loosely based on the Plan 9 network file protocol 9P.
type Mcall struct {
Type uint
Expiry time.Time // Tnew, Rnew
}
-// ParseMcall parses and validates one Mcall from r.
+// ParseMcall parses and validates a JSON-encoded Mcall from r.
func ParseMcall(r io.Reader) (*Mcall, error) {
var mc Mcall
if err := json.NewDecoder(r).Decode(&mc); err != nil {
blob - 8b4fa6214d6f6971d2f7bf401433e257f6da7426
blob + 306664ff760c64461dba0958bc9f8ae5d4ff2b58
--- user.go
+++ user.go
Lookup(name string) (User, error)
// Delete removes the user from the store.
Delete(name string) error
- //Authenticate(username, password string) (ticket string, err error)
+ // Authenticate authenticates the user identified by username with pw.
+ // error is non-nil if the password is incorrect or on any other error.
+ Authenticate(username string, pw Password) error
}
type ticket []byte
var testTicket = []byte(`TEST NOT REAL`)
var (
- ErrUserExist = errors.New("user already exists")
+ ErrUserExist = errors.New("user already exists")
ErrUnknownUser = errors.New("unknown user")
)