// GenerateForwardedRequest generates a new http.Request that contains the // original requests's information in the new request's body. func GenerateForwardedHTTPRequest(req *http.Request, addr string) (*http.Request, error) { fq, err := GenerateForwardedRequest(req) if err != nil { return nil, err } var newBody []byte switch os.Getenv("VAULT_MESSAGE_TYPE") { case "json": newBody, err = jsonutil.EncodeJSON(fq) case "json_compress": newBody, err = jsonutil.EncodeJSONAndCompress(fq, &compressutil.CompressionConfig{ Type: compressutil.CompressionTypeLzw, }) case "proto3": fallthrough default: newBody, err = proto.Marshal(fq) } if err != nil { return nil, err } ret, err := http.NewRequest("POST", addr, bytes.NewBuffer(newBody)) if err != nil { return nil, err } return ret, nil }
// StorageEntryJSON creates a StorageEntry with a JSON-encoded value. func StorageEntryJSON(k string, v interface{}) (*StorageEntry, error) { encodedBytes, err := jsonutil.EncodeJSON(v) if err != nil { return nil, fmt.Errorf("failed to encode storage entry: %v", err) } return &StorageEntry{ Key: k, Value: encodedBytes, }, nil }
// advertiseLeader is used to advertise the current node as leader func (c *Core) advertiseLeader(uuid string, leaderLostCh <-chan struct{}) error { go c.cleanLeaderPrefix(uuid, leaderLostCh) var key *ecdsa.PrivateKey switch c.localClusterPrivateKey.(type) { case *ecdsa.PrivateKey: key = c.localClusterPrivateKey.(*ecdsa.PrivateKey) default: c.logger.Error("core: unknown cluster private key type", "key_type", fmt.Sprintf("%T", c.localClusterPrivateKey)) return fmt.Errorf("unknown cluster private key type %T", c.localClusterPrivateKey) } keyParams := &clusterKeyParams{ Type: corePrivateKeyTypeP521, X: key.X, Y: key.Y, D: key.D, } adv := &activeAdvertisement{ RedirectAddr: c.redirectAddr, ClusterAddr: c.clusterAddr, ClusterCert: c.localClusterCert, ClusterKeyParams: keyParams, } val, err := jsonutil.EncodeJSON(adv) if err != nil { return err } ent := &Entry{ Key: coreLeaderPrefix + uuid, Value: val, } err = c.barrier.Put(ent) if err != nil { return err } sd, ok := c.ha.(physical.ServiceDiscovery) if ok { if err := sd.NotifyActiveStateChange(); err != nil { if c.logger.IsWarn() { c.logger.Warn("core: failed to notify active status", "error", err) } } } return nil }