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  }