github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/apiserver/common/http.go (about)

     1  // Copyright 2020 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package common
     5  
     6  import (
     7  	"net/http"
     8  
     9  	"github.com/juju/errors"
    10  	"github.com/juju/version/v2"
    11  
    12  	"github.com/juju/juju/rpc/params"
    13  )
    14  
    15  // JujuClientVersionFromRequest returns the Juju client version
    16  // number from the HTTP request.
    17  func JujuClientVersionFromRequest(req *http.Request) (version.Number, error) {
    18  	verStr := req.Header.Get(params.JujuClientVersion)
    19  	if verStr == "" {
    20  		return version.Zero, errors.New(`missing "X-Juju-ClientVersion" in request headers`)
    21  	}
    22  	ver, err := version.Parse(verStr)
    23  	if err != nil {
    24  		return version.Zero, errors.Annotatef(err, "invalid X-Juju-ClientVersion %q", verStr)
    25  	}
    26  	return ver, nil
    27  }