/
webfist.go
77 lines (63 loc) · 2.54 KB
/
webfist.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
Copyright 2013 WebFist AUTHORS
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// Package webfist implements WebFist.
package webfist
import (
"time"
)
// Storage is the interface implemented by backends.
type Storage interface {
PutEmail(*EmailAddr, *Email) error
Emails(*EmailAddr) ([]*Email, error)
// StatEncryptedBlob returns the size of the encrypted blob on
// disk. addrKey (the Email's HexKey) and encSHA1 (the SHA-1
// of the encrypted email) are lowercase hex. The err will be
// os.ErrNotExist if the file is doesn't exist.
StatEncryptedEmail(addrKey, encSHA1 string) (size int, err error)
// EncryptedEmail returns the encrypted email with for the
// addrKey (the Email's HexKey) and encSHA1 (the SHA-1 of |
// fi, err := os.Stat(s.hexPath(sha1)) the encrypted
// email). Both are lowercase hex. The err will be
// os.ErrNotExist if the file is doesn't exist.
EncryptedEmail(addrKey, sha1 string) ([]byte, error)
PutEncryptedEmail(addrKey, sha1 string, data []byte) error
// RecentMeta returns the recently-received encrypted emails.
RecentMeta() ([]*RecentMeta, error)
}
// RecentMeta describes an encrypted email in the storage system.
type RecentMeta struct {
AddrHexKey string
EncSHA1 string
AddTime time.Time
}
// Defined in: http://tools.ietf.org/html/draft-ietf-appsawg-webfinger
type Link struct {
Rel string `json:"rel"`
Type string `json:"type,omitempty"`
Href string `json:"href"`
Titles []string `json:"titles,omitempty"`
Properties map[string]string `json:"properties,omitempty"`
}
type WebFingerResponse struct {
Subject string `json:"subject"`
Aliases []string `json:"aliases,omitempty"`
Properties map[string]string `json:"properties,omitempty"`
Links []Link `json:"links,omitempty"`
}
// Lookup performs a WebFinger query for an email address and returns all known
// data for that address. Implementations may do standard WebFinger lookups over
// the network, fallback to using the WebFist network, or use local storage to
// map email address to WebFinger response.
type Lookup interface {
WebFinger(string) (*WebFingerResponse, error)
}