]> source.dussan.org Git - gitea.git/commitdiff
Update strk.kbt.io/projects/go/libravatar to latest; closes #7860 (#8429)
authorguillep2k <18600385+guillep2k@users.noreply.github.com>
Tue, 8 Oct 2019 19:48:57 +0000 (16:48 -0300)
committertechknowlogick <techknowlogick@gitea.io>
Tue, 8 Oct 2019 19:48:57 +0000 (15:48 -0400)
go.mod
go.sum
vendor/modules.txt
vendor/strk.kbt.io/projects/go/libravatar/Makefile [new file with mode: 0644]
vendor/strk.kbt.io/projects/go/libravatar/README.md
vendor/strk.kbt.io/projects/go/libravatar/libravatar.go

diff --git a/go.mod b/go.mod
index e1a2b7b4044a92b89a3a545b38413fef3cefcd7c..d2520da73982e0e44b5b7a28cd29a0266bfd0b30 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -121,7 +121,7 @@ require (
        gopkg.in/stretchr/testify.v1 v1.2.2 // indirect
        gopkg.in/testfixtures.v2 v2.5.0
        mvdan.cc/xurls/v2 v2.0.0
-       strk.kbt.io/projects/go/libravatar v0.0.0-20160628055650-5eed7bff870a
+       strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251
        xorm.io/builder v0.3.6
        xorm.io/core v0.7.2
 )
diff --git a/go.sum b/go.sum
index c068caa2f74f790a9dd1243f5385eff51ec51251..3adf91e926bf0e67775b47276b36119b5c4f5acb 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -815,8 +815,8 @@ honnef.co/go/tools v0.0.1-2019.2.2/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt
 mvdan.cc/xurls/v2 v2.0.0 h1:r1zSOSNS/kqtpmATyMMMvaZ4/djsesbYz5kr0+qMRWc=
 mvdan.cc/xurls/v2 v2.0.0/go.mod h1:2/webFPYOXN9jp/lzuj0zuAVlF+9g4KPFJANH1oJhRU=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
-strk.kbt.io/projects/go/libravatar v0.0.0-20160628055650-5eed7bff870a h1:8q33ShxKXRwQ7JVd1ZnhIU3hZhwwn0Le+4fTeAackuM=
-strk.kbt.io/projects/go/libravatar v0.0.0-20160628055650-5eed7bff870a/go.mod h1:FJGmPh3vz9jSos1L/F91iAgnC/aejc0wIIrF2ZwJxdY=
+strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251 h1:mUcz5b3FJbP5Cvdq7Khzn6J9OCUQJaBwgBkCR+MOwSs=
+strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251/go.mod h1:FJGmPh3vz9jSos1L/F91iAgnC/aejc0wIIrF2ZwJxdY=
 xorm.io/builder v0.3.6 h1:ha28mQ2M+TFx96Hxo+iq6tQgnkC9IZkM6D8w9sKHHF8=
 xorm.io/builder v0.3.6/go.mod h1:LEFAPISnRzG+zxaxj2vPicRwz67BdhFreKg8yv8/TgU=
 xorm.io/core v0.7.2-0.20190928055935-90aeac8d08eb h1:msX3zG3BPl8Ti+LDzP33/9K7BzO/WqFXk610K1kYKfo=
index 71ba2748675f325385d3000da2ecc2e5eb4b170f..8b2224f54abd382c0e382053355cafe9ff37669b 100644 (file)
@@ -612,7 +612,7 @@ gopkg.in/warnings.v0
 gopkg.in/yaml.v2
 # mvdan.cc/xurls/v2 v2.0.0
 mvdan.cc/xurls/v2
-# strk.kbt.io/projects/go/libravatar v0.0.0-20160628055650-5eed7bff870a
+# strk.kbt.io/projects/go/libravatar v0.0.0-20191008002943-06d1c002b251
 strk.kbt.io/projects/go/libravatar
 # xorm.io/builder v0.3.6
 xorm.io/builder
diff --git a/vendor/strk.kbt.io/projects/go/libravatar/Makefile b/vendor/strk.kbt.io/projects/go/libravatar/Makefile
new file mode 100644 (file)
index 0000000..2a70ddc
--- /dev/null
@@ -0,0 +1,12 @@
+PACKAGES ?= $(shell go list ./...)
+
+.PHONY: check
+check: lint
+       go test
+
+.PHONY: lint
+lint:
+       @which golint > /dev/null; if [ $$? -ne 0 ]; then \
+               go get -u github.com/golang/lint/golint; \
+       fi
+       @for PKG in $(PACKAGES); do golint -set_exit_status $$PKG || exit 1; done;
index 660cd906435d06aa9cd90e07f655a50f76876f57..c0a9f942e2346c8d6929b455b9e66b7bfb7d2ad4 100644 (file)
@@ -1,12 +1,14 @@
 Simple [golang](https://www.golang.org) library for serving
 [federated avatars](https://www.libravatar.org)
 
+[![trunk](https://goreportcard.com/badge/strk.kbt.io/projects/go/libravatar)]
+(https://goreportcard.com/report/strk.kbt.io/projects/go/libravatar)
+
 # Use
 
 ```sh
 go get strk.kbt.io/projects/go/libravatar
-cd $GOPATH/src/strk.kbt.io/projects/go/libravatar
-go doc
+go doc strk.kbt.io/projects/go/libravatar
 ```
 
 # Contribute
index 4c748456f3604cbadef844aebf8187656c408088..fe544cd4b4de57646976563c7d68abe5e85302f8 100644 (file)
@@ -5,7 +5,7 @@
 // Implements support for federated avatars lookup.
 // See https://wiki.libravatar.org/api/
 
-package libravatar
+package libravatar // import "strk.kbt.io/projects/go/libravatar"
 
 import (
        "crypto/md5"
@@ -16,6 +16,7 @@ import (
        "net/mail"
        "net/url"
        "strings"
+       "sync"
        "time"
 )
 
@@ -38,7 +39,8 @@ const (
 )
 
 var (
-       // Default object, enabling object-less function calls
+       // DefaultLibravatar is a default Libravatar object,
+       // enabling object-less function calls
        DefaultLibravatar = New()
 )
 
@@ -53,14 +55,16 @@ type cacheValue struct {
        checkedAt time.Time
 }
 
+// Libravatar is an opaque structure holding service configuration
 type Libravatar struct {
-       defUrl             string // default url
+       defURL             string // default url
        picSize            int    // picture size
        fallbackHost       string // default fallback URL
        secureFallbackHost string // default fallback URL for secure connections
        useHTTPS           bool
        nameCache          map[cacheKey]cacheValue
        nameCacheDuration  time.Duration
+       nameCacheMutex     *sync.Mutex
        minSize            uint   // smallest image dimension allowed
        maxSize            uint   // largest image dimension allowed
        size               uint   // what dimension should be used
@@ -68,7 +72,7 @@ type Libravatar struct {
        secureServiceBase  string // SRV record to be queried for federation with secure servers
 }
 
-// Instanciate a library handle
+// New instanciates a new Libravatar object (handle)
 func New() *Libravatar {
        // According to https://wiki.libravatar.org/running_your_own/
        // the time-to-live (cache expiry) should be set to at least 1 day.
@@ -82,27 +86,28 @@ func New() *Libravatar {
                secureServiceBase:  `avatars-sec`,
                nameCache:          make(map[cacheKey]cacheValue),
                nameCacheDuration:  24 * time.Hour,
+               nameCacheMutex:     &sync.Mutex{},
        }
 }
 
-// Set the hostname for fallbacks in case no avatar service is defined
-// for a domain
+// SetFallbackHost sets the hostname for fallbacks in case no avatar
+// service is defined for a domain
 func (v *Libravatar) SetFallbackHost(host string) {
        v.fallbackHost = host
 }
 
-// Set the hostname for fallbacks in case no avatar service is defined
-// for a domain, when requiring secure domains
+// SetSecureFallbackHost sets the hostname for fallbacks in case no
+// avatar service is defined for a domain, when requiring secure domains
 func (v *Libravatar) SetSecureFallbackHost(host string) {
        v.secureFallbackHost = host
 }
 
-// Set useHTTPS flag
+// SetUseHTTPS sets flag requesting use of https for fetching avatars
 func (v *Libravatar) SetUseHTTPS(use bool) {
        v.useHTTPS = use
 }
 
-// Set Avatars image dimension (0 for default)
+// SetAvatarSize sets avatars image dimension (0 for default)
 func (v *Libravatar) SetAvatarSize(size uint) {
        v.size = size
 }
@@ -150,8 +155,8 @@ func (v *Libravatar) process(email *mail.Address, openid *url.URL) (string, erro
        res := fmt.Sprintf("%s/avatar/%s", URL, v.genHash(email, openid))
 
        values := make(url.Values)
-       if v.defUrl != "" {
-               values.Add("d", v.defUrl)
+       if v.defURL != "" {
+               values.Add("d", v.defURL)
        }
        if v.size > 0 {
                values.Add("s", fmt.Sprintf("%d", v.size))
@@ -181,7 +186,9 @@ func (v *Libravatar) baseURL(email *mail.Address, openid *url.URL) (string, erro
        host := v.getDomain(email, openid)
        key := cacheKey{service, host}
        now := time.Now()
+       v.nameCacheMutex.Lock()
        val, found := v.nameCache[key]
+       v.nameCacheMutex.Unlock()
        if found && now.Sub(val.checkedAt) <= v.nameCacheDuration {
                return protocol + val.target, nil
        }
@@ -204,53 +211,55 @@ func (v *Libravatar) baseURL(email *mail.Address, openid *url.URL) (string, erro
                }
 
                var (
-                       total_weight uint16
-                       records      []record
-                       top_priority = addrs[0].Priority
-                       top_record   *net.SRV
+                       totalWeight uint16
+                       records     []record
+                       topPriority = addrs[0].Priority
+                       topRecord   *net.SRV
                )
 
                for _, rr := range addrs {
-                       if rr.Priority > top_priority {
+                       if rr.Priority > topPriority {
                                continue
-                       } else if rr.Priority < top_priority {
+                       } else if rr.Priority < topPriority {
                                // won't happen, because net sorts
                                // by priority, but just in case
-                               total_weight = 0
+                               totalWeight = 0
                                records = nil
-                               top_priority = rr.Priority
+                               topPriority = rr.Priority
                        }
 
-                       total_weight += rr.Weight
+                       totalWeight += rr.Weight
 
                        if rr.Weight > 0 {
-                               records = append(records, record{rr, total_weight})
+                               records = append(records, record{rr, totalWeight})
                        } else if rr.Weight == 0 {
-                               records = append([]record{record{srv: rr, weight: total_weight}}, records...)
+                               records = append([]record{record{srv: rr, weight: totalWeight}}, records...)
                        }
                }
 
                if len(records) == 1 {
-                       top_record = records[0].srv
+                       topRecord = records[0].srv
                } else {
-                       randnum := uint16(rand.Intn(int(total_weight)))
+                       randnum := uint16(rand.Intn(int(totalWeight)))
 
                        for _, rr := range records {
                                if rr.weight >= randnum {
-                                       top_record = rr.srv
+                                       topRecord = rr.srv
                                        break
                                }
                        }
                }
 
-               domain = fmt.Sprintf("%s:%d", top_record.Target, top_record.Port)
+               domain = fmt.Sprintf("%s:%d", topRecord.Target, topRecord.Port)
        }
 
+       v.nameCacheMutex.Lock()
        v.nameCache[key] = cacheValue{checkedAt: now, target: domain}
+       v.nameCacheMutex.Unlock()
        return protocol + domain, nil
 }
 
-// Return url of the avatar for the given email
+// FromEmail returns the url of the avatar for the given email
 func (v *Libravatar) FromEmail(email string) (string, error) {
        addr, err := mail.ParseAddress(email)
        if err != nil {
@@ -265,12 +274,13 @@ func (v *Libravatar) FromEmail(email string) (string, error) {
        return link, nil
 }
 
-// Object-less call to DefaultLibravatar for an email adders
+// FromEmail is the object-less call to DefaultLibravatar for an email adders
 func FromEmail(email string) (string, error) {
        return DefaultLibravatar.FromEmail(email)
 }
 
-// Return url of the avatar for the given url (typically for OpenID)
+// FromURL returns the url of the avatar for the given url (typically
+// for OpenID)
 func (v *Libravatar) FromURL(openid string) (string, error) {
        ourl, err := url.Parse(openid)
        if err != nil {
@@ -291,7 +301,7 @@ func (v *Libravatar) FromURL(openid string) (string, error) {
        return link, nil
 }
 
-// Object-less call to DefaultLibravatar for a URL
+// FromURL is the object-less call to DefaultLibravatar for a URL
 func FromURL(openid string) (string, error) {
        return DefaultLibravatar.FromURL(openid)
 }