func ValidateConnectionString(w rest.ResponseWriter, r *rest.Request) { form := ValidateConnectionStringRequest{} err := r.DecodeJsonPayload(&form) if err != nil { apiutils.WriteRestError(w, apierrors.NewBadRequest("can't decode json")) return } c, err := shared.DecodeConnection(form.ConnectionString) if err != nil { w.WriteJson(ValidateConnectionStringResponse{ Ok: false, }) return } w.WriteJson(ValidateConnectionStringResponse{ Ok: true, Name: c.DisplayName(), }) }
func PostConnection(w rest.ResponseWriter, r *rest.Request) { form := ConnectionSetting{} err := r.DecodeJsonPayload(&form) if err != nil { apiutils.WriteRestError(w, apierrors.NewBadRequest(err.Error())) return } err = clientconfig.Update(func(conf *clientconfig.Config) error { all := conf.Settings.Connections var connection shared.Connection // decoded connection var invalids fielderrors.ValidationErrorList // Verify that the encoded field is set { if form.Encoded == "" { invalids = append(invalids, fielderrors.NewFieldRequired("encoded")) } } // verify that the connection is decodeable { var err error connection, err = shared.DecodeConnection(form.Encoded) if err != nil { invalids = append(invalids, fielderrors.NewFieldInvalid("encoded", form.Encoded, "invalid formatting")) } } // validate that the id exists, if supplied foundIdx := 0 { if form.ID != "" { found := false for k, v := range all { if v.ID == form.ID { found = true foundIdx = k } } if !found { invalids = append(invalids, fielderrors.NewFieldNotFound("id", form.ID)) } } } // validate that the connection doesnt alreay exist { encoded, err := connection.Encode() if err != nil { apiutils.WriteRestError(w, err) return nil } found := false for _, v := range all { enc2, err := v.Encode() if err != nil { lg.Errorln(err) continue } if enc2 == encoded { found = true } } if found { invalids = append(invalids, fielderrors.NewFieldDuplicate("encoded", form.Encoded)) } } // end of field validations if len(invalids) > 0 { apiutils.WriteRestError(w, apierrors.NewInvalid("post-connection", "", invalids)) return nil } // add connection to settings and save if form.ID == "" { connection.EnsureID() conf.Settings.Connections = append(conf.Settings.Connections, connection) } else { conf.Settings.Connections[foundIdx] = connection } service.UpdateConnections(conf.Settings.Connections) return nil }) if err != nil { lg.Errorln(err) } clientconfig.Write() w.WriteJson(true) }
func (m *modifyConnections) Update() []shared.Connection { lg.Infoln("updating connections..") if lg.V(19) { lg.Infof("pre upgrade state:") for _, v := range m.Connections { lg.Infoln(v) } } // create map for id lookups conns := make(map[string]shared.Connection, 0) for _, connection := range m.Connections { conns[connection.ID] = connection } // remove old old connections for _, ID := range m.Remove { if _, ok := conns[ID]; ok { lg.V(19).Infof("remove connection: %s", ID) delete(conns, ID) } } // add new connections for _, v := range m.Add { conn, err := shared.DecodeConnection(v) if err != nil { lg.Fatal(err) } ID := conn.ID if _, ok := conns[ID]; !ok { lg.V(19).Infof("add connection: %s", ID) conns[ID] = conn } } // protect connections for _, ID := range m.Protect { if _, ok := conns[ID]; ok { c := conns[ID] c.Protected = true conns[ID] = c lg.V(19).Infof("protected connection: %s", ID) } } var result []shared.Connection for _, v := range conns { result = append(result, v) } if lg.V(19) { lg.Infof("upgraded connections result:") for _, v := range result { lg.Infoln(v) } } return result }