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 }