+pgp key lookup tool
This commit is contained in:
parent
488c440bce
commit
6888be615a
87
plugins/pgp.go
Normal file
87
plugins/pgp.go
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
package plugins
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/hex"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"regexp"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/matrix-org/gomatrix"
|
||||||
|
"golang.org/x/crypto/openpgp"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PGP is our plugin type
|
||||||
|
type PGP struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetStore is the setup function for a plugin
|
||||||
|
func (p *PGP) SetStore(s PluginStore) {
|
||||||
|
}
|
||||||
|
|
||||||
|
// Descr describes this plugin
|
||||||
|
func (p *PGP) Descr() string {
|
||||||
|
return "Queries keys.openpgp.org"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Re is what our pgp request matches
|
||||||
|
func (p *PGP) Re() string {
|
||||||
|
return `(?i)^pgp: (.+@.+\..+)$`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Match checks for "pgp: " messages
|
||||||
|
func (p *PGP) Match(_, msg string) bool {
|
||||||
|
re := regexp.MustCompile(p.Re())
|
||||||
|
return re.MatchString(msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PGP) fix(msg string) string {
|
||||||
|
re := regexp.MustCompile(p.Re())
|
||||||
|
return re.ReplaceAllString(msg, "$1")
|
||||||
|
}
|
||||||
|
|
||||||
|
// RespondText to looking up of PGP info
|
||||||
|
func (p *PGP) RespondText(c *gomatrix.Client, ev *gomatrix.Event, _, post string) error {
|
||||||
|
search := p.fix(post)
|
||||||
|
escSearch, err := url.Parse(search)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
u := fmt.Sprintf("https://keys.openpgp.org//vks/v1/by-email/%s",
|
||||||
|
escSearch)
|
||||||
|
|
||||||
|
resp, err := http.Get(u)
|
||||||
|
if err != nil {
|
||||||
|
_ = SendText(c, ev.RoomID, fmt.Sprintf("Can't search keys.openpgp.org: %s", err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
kr, err := openpgp.ReadArmoredKeyRing(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
_ = SendText(c, ev.RoomID, fmt.Sprintf("Can't parse key ring: %s", err))
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
var ids []string
|
||||||
|
var fps []string
|
||||||
|
for _, entity := range kr {
|
||||||
|
for _, i := range entity.Identities {
|
||||||
|
ids = append(ids, fmt.Sprintf("- %q", i.Name))
|
||||||
|
}
|
||||||
|
fps = append(fps, fmt.Sprintf("**Fingerprint**: %s",
|
||||||
|
hex.EncodeToString(entity.PrimaryKey.Fingerprint[:])))
|
||||||
|
}
|
||||||
|
|
||||||
|
return SendMD(c, ev.RoomID, fmt.Sprintf("%s\n\n%s",
|
||||||
|
strings.Join(ids, "\n"),
|
||||||
|
strings.Join(fps, "\n")))
|
||||||
|
}
|
||||||
|
|
||||||
|
// Name PGP!
|
||||||
|
func (p *PGP) Name() string {
|
||||||
|
return "PGP"
|
||||||
|
}
|
@ -243,13 +243,14 @@ var Plugs = Plugins{
|
|||||||
&Hi{},
|
&Hi{},
|
||||||
&LoveYou{},
|
&LoveYou{},
|
||||||
&OpenBSDMan{},
|
&OpenBSDMan{},
|
||||||
|
&PGP{},
|
||||||
&Palette{},
|
&Palette{},
|
||||||
|
&RFC{},
|
||||||
&Snap{},
|
&Snap{},
|
||||||
&Source{},
|
&Source{},
|
||||||
&Thanks{},
|
&Thanks{},
|
||||||
&Toki{},
|
&Toki{},
|
||||||
&Version{},
|
&Version{},
|
||||||
&Wb{},
|
&Wb{},
|
||||||
&RFC{},
|
|
||||||
&Weather{},
|
&Weather{},
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user