github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/web/indexhandler/templatefuncs.go (about) 1 package indexhandler 2 3 import ( 4 "crypto/md5" 5 "fmt" 6 "sync" 7 8 "github.com/gobuffalo/packr" 9 ) 10 11 type templateFuncs struct { 12 assetIDs map[string]string 13 assetsL sync.Mutex 14 } 15 16 func (funcs *templateFuncs) asset(asset string) (string, error) { 17 funcs.assetsL.Lock() 18 defer funcs.assetsL.Unlock() 19 20 box := packr.NewBox("../public") 21 22 id, found := funcs.assetIDs[asset] 23 if !found { 24 hash := md5.New() 25 26 contents, err := box.MustBytes(asset) 27 if err != nil { 28 return "", err 29 } 30 31 _, err = hash.Write(contents) 32 if err != nil { 33 return "", err 34 } 35 36 id = fmt.Sprintf("%x", hash.Sum(nil)) 37 } 38 39 return fmt.Sprintf("/public/%s?id=%s", asset, id), nil 40 }