func GenerateToken()

in pkg/mock/imdsv2/tokengenerator.go [44:75]


func GenerateToken(res http.ResponseWriter, req *http.Request) {
	log.Printf("GenerateToken Received request: %v", req)
	// only valid with PUT
	if req.Method != http.MethodPut {
		return
	}
	// check that header contains valid ttl
	requestedTTL := req.Header.Get(tokenTTLHeader)
	validTTL, err := extractValidTTL(requestedTTL)
	if err != nil {
		log.Printf("Something went wrong with ttl validation: %v with requested TTL: %v", err.Error(), requestedTTL)
		server.ReturnBadRequestResponse(res)
		return
	}

	key := make([]byte, 32)
	_, err = rand.Read(key)
	if err != nil {
		server.FormatAndReturnTextResponse(res, "Something went wrong with token creation")
		return
	}

	tokenValue := base64.StdEncoding.EncodeToString(key)
	token := v2Token{
		Value:     tokenValue,
		TTL:       validTTL,
		CreatedAt: time.Now(),
	}
	generatedTokens[token.Value] = token
	res.Header().Set(tokenTTLHeader, strconv.Itoa(token.TTL))
	server.FormatAndReturnTextResponse(res, token.Value)
}