func api10Patch(d *Daemon, r *http.Request) Response { oldConfig, err := dbConfigValuesGet(d.db) if err != nil { return InternalError(err) } err = etagCheck(r, oldConfig) if err != nil { return PreconditionFailed(err) } req := apiPut{} if err := shared.ReadToJSON(r.Body, &req); err != nil { return BadRequest(err) } if req.Config == nil { return EmptySyncResponse } for k, v := range oldConfig { _, ok := req.Config[k] if !ok { req.Config[k] = v } } return doApi10Update(d, oldConfig, req) }
func api10Put(d *Daemon, r *http.Request) Response { req := apiPut{} if err := shared.ReadToJSON(r.Body, &req); err != nil { return BadRequest(err) } for key, value := range req.Config { if !d.ConfigKeyIsValid(key) { return BadRequest(fmt.Errorf("Bad server config key: '%s'", key)) } if key == "core.trust_password" { err := d.PasswordSet(value.(string)) if err != nil { return InternalError(err) } } else if key == "core.lvm_vg_name" { err := storageLVMSetVolumeGroupNameConfig(d, value.(string)) if err != nil { return InternalError(err) } if err = d.SetupStorageDriver(); err != nil { return InternalError(err) } } else if key == "core.lvm_thinpool_name" { err := storageLVMSetThinPoolNameConfig(d, value.(string)) if err != nil { return InternalError(err) } } else if key == "core.https_address" { old_address, err := d.ConfigValueGet("core.https_address") if err != nil { return InternalError(err) } d.UpdateHTTPsPort(old_address, value.(string)) if err != nil { return InternalError(err) } err = d.ConfigValueSet(key, value.(string)) if err != nil { return InternalError(err) } } else { err := d.ConfigValueSet(key, value.(string)) if err != nil { return InternalError(err) } if key == "images.remote_cache_expiry" { d.pruneChan <- true } } } return EmptySyncResponse }
func api10Put(d *Daemon, r *http.Request) Response { oldConfig, err := dbConfigValuesGet(d.db) if err != nil { return InternalError(err) } err = etagCheck(r, oldConfig) if err != nil { return PreconditionFailed(err) } req := apiPut{} if err := shared.ReadToJSON(r.Body, &req); err != nil { return BadRequest(err) } return doApi10Update(d, oldConfig, req) }
func certificateFingerprintPut(d *Daemon, r *http.Request) Response { fingerprint := mux.Vars(r)["fingerprint"] oldEntry, err := doCertificateGet(d, fingerprint) if err != nil { return SmartError(err) } fingerprint = oldEntry.Fingerprint err = etagCheck(r, oldEntry) if err != nil { return PreconditionFailed(err) } req := shared.CertInfo{} if err := shared.ReadToJSON(r.Body, &req); err != nil { return BadRequest(err) } return doCertificateUpdate(d, fingerprint, req) }
func api10Put(d *Daemon, r *http.Request) Response { req := apiPut{} if err := shared.ReadToJSON(r.Body, &req); err != nil { return BadRequest(err) } for key, value := range req.Config { if !d.ConfigKeyIsValid(key) { return BadRequest(fmt.Errorf("Bad server config key: '%s'", key)) } if key == "core.trust_password" { err := d.PasswordSet(value.(string)) if err != nil { return InternalError(err) } } else if key == "core.lvm_vg_name" { err := storageLVMSetVolumeGroupNameConfig(d, value.(string)) if err != nil { return InternalError(err) } if err = d.SetupStorageDriver(); err != nil { return InternalError(err) } } else if key == "core.lvm_thinpool_name" { err := storageLVMSetThinPoolNameConfig(d, value.(string)) if err != nil { return InternalError(err) } } else { err := d.ConfigValueSet(key, value.(string)) if err != nil { return InternalError(err) } } } return EmptySyncResponse }
func certificatesPost(d *Daemon, r *http.Request) Response { req := certificatesPostBody{} if err := shared.ReadToJSON(r.Body, &req); err != nil { return BadRequest(err) } if req.Type != "client" { return BadRequest(fmt.Errorf("Unknown request type %s", req.Type)) } var cert *x509.Certificate var name string if req.Certificate != "" { data, err := base64.StdEncoding.DecodeString(req.Certificate) if err != nil { return BadRequest(err) } cert, err = x509.ParseCertificate(data) if err != nil { return BadRequest(err) } name = req.Name } else if r.TLS != nil { if len(r.TLS.PeerCertificates) < 1 { return BadRequest(fmt.Errorf("No client certificate provided")) } cert = r.TLS.PeerCertificates[len(r.TLS.PeerCertificates)-1] remoteHost, _, err := net.SplitHostPort(r.RemoteAddr) if err != nil { return InternalError(err) } name = remoteHost } else { return BadRequest(fmt.Errorf("Can't use TLS data on non-TLS link")) } fingerprint := certGenerateFingerprint(cert) for _, existingCert := range d.clientCerts { if fingerprint == certGenerateFingerprint(&existingCert) { return EmptySyncResponse } } if !d.isTrustedClient(r) && !d.PasswordCheck(req.Password) { return Forbidden } err := saveCert(d, name, cert) if err != nil { return SmartError(err) } d.clientCerts = append(d.clientCerts, *cert) return EmptySyncResponse }
func api10Put(d *Daemon, r *http.Request) Response { oldConfig, err := dbConfigValuesGet(d.db) if err != nil { return InternalError(err) } req := apiPut{} if err := shared.ReadToJSON(r.Body, &req); err != nil { return BadRequest(err) } // Diff the configs changedConfig := map[string]interface{}{} for key, value := range oldConfig { if req.Config[key] != value { changedConfig[key] = req.Config[key] } } for key, value := range req.Config { if oldConfig[key] != value { changedConfig[key] = req.Config[key] } } for key, value := range changedConfig { if value == nil { value = "" } if !d.ConfigKeyIsValid(key) { return BadRequest(fmt.Errorf("Bad server config key: '%s'", key)) } if key == "core.trust_password" { if value == true { continue } err := d.PasswordSet(value.(string)) if err != nil { return InternalError(err) } } else if key == "storage.lvm_vg_name" { err := storageLVMSetVolumeGroupNameConfig(d, value.(string)) if err != nil { return InternalError(err) } if err = d.SetupStorageDriver(); err != nil { return InternalError(err) } } else if key == "storage.lvm_thinpool_name" { err := storageLVMSetThinPoolNameConfig(d, value.(string)) if err != nil { return InternalError(err) } } else if key == "storage.zfs_pool_name" { err := storageZFSSetPoolNameConfig(d, value.(string)) if err != nil { return InternalError(err) } if err = d.SetupStorageDriver(); err != nil { return InternalError(err) } } else if key == "core.https_address" { old_address, err := d.ConfigValueGet("core.https_address") if err != nil { return InternalError(err) } err = d.UpdateHTTPsPort(old_address, value.(string)) if err != nil { return InternalError(err) } err = d.ConfigValueSet(key, value.(string)) if err != nil { return InternalError(err) } } else if key == "core.proxy_https" || key == "core.proxy_http" || key == "core.proxy_ignore_hosts" { err = d.ConfigValueSet(key, value.(string)) if err != nil { return InternalError(err) } d.updateProxy() } else { err := d.ConfigValueSet(key, value.(string)) if err != nil { return InternalError(err) } if key == "images.remote_cache_expiry" { d.pruneChan <- true } } } return EmptySyncResponse }