Add schema type check in APID plugins. Add bulk updates for snapshot for
ApidVerifyKey.
diff --git a/api_test.go b/api_test.go
index d310faa..566897f 100644
--- a/api_test.go
+++ b/api_test.go
@@ -242,7 +242,7 @@
}
srvItems["tenant_id"] = scv
- res := insertCreateDeveloper(srvItems, db)
+ res := insertDeveloper(srvItems, db)
Expect(res).Should(BeTrue())
}
@@ -289,7 +289,7 @@
Type: 1,
}
srvItems["tenant_id"] = scv
- res := insertCreateApplication(srvItems, db)
+ res := insertApplication(srvItems, db)
Expect(res).Should(BeTrue())
}
k = j
@@ -328,7 +328,7 @@
Type: 1,
}
srvItems["tenant_id"] = scv
- res := insertCreateCredential(srvItems, db)
+ res := insertCredential(srvItems, db)
Expect(res).Should(BeTrue())
}
@@ -369,7 +369,7 @@
Type: 1,
}
srvItems["tenant_id"] = scv
- res := insertApiProductMapper(srvItems, db)
+ res := insertAPIProductMapper(srvItems, db)
Expect(res).Should(BeTrue())
}
diff --git a/listener.go b/listener.go
index ad662da..91eb2a2 100644
--- a/listener.go
+++ b/listener.go
@@ -33,6 +33,7 @@
func processSnapshot(snapshot *common.Snapshot) {
+ res := true
log.Debugf("Process Snapshot data")
db, err := data.DB()
@@ -40,32 +41,293 @@
panic("Unable to access Sqlite DB")
}
+ /*
+ * Iterate the tables, and insert the rows,
+ * Commit them in bulk.
+ */
for _, payload := range snapshot.Tables {
-
switch payload.Name {
- case "developer":
- for _, row := range payload.Rows {
- insertCreateDeveloper(row, db)
- }
- case "app":
- for _, row := range payload.Rows {
- insertCreateApplication(row, db)
- }
- case "app_credential":
- for _, row := range payload.Rows {
- insertCreateCredential(row, db)
- }
- case "api_product":
- for _, row := range payload.Rows {
- insertAPIproduct(row, db)
- }
- case "app_credential_apiproduct_mapper":
- for _, row := range payload.Rows {
- insertApiProductMapper(row, db)
- }
-
+ case "kms.developer":
+ res = insertDevelopers(payload.Rows, db)
+ case "kms.app":
+ res = insertApplications(payload.Rows, db)
+ case "kms.app_credential":
+ res = insertCredentials(payload.Rows, db)
+ case "kms.api_product":
+ res = insertAPIproducts(payload.Rows, db)
+ case "kms.app_credential_apiproduct_mapper":
+ res = insertApiProductMappers(payload.Rows, db)
+ }
+ if res == false {
+ log.Error("Error encountered in Downloading Snapshot for VerifyApiKey")
+ return
}
}
+ log.Debug("Downloading Snapshot for VerifyApiKey complete")
+}
+
+/*
+ * Performs bulk insert of credentials
+ */
+func insertCredentials(rows []common.Row, db *sql.DB) bool {
+
+ var scope, id, appId, consumerSecret, appstatus, status, tenantId string
+ var issuedAt int64
+
+ prep, err := db.Prepare("INSERT INTO APP_CREDENTIAL (_apid_scope, id, app_id, consumer_secret, app_status, status, issued_at, tenant_id)VALUES($1,$2,$3,$4,$5,$6,$7,$8);")
+ if err != nil {
+ log.Error("INSERT Cred Failed: ", err)
+ return false
+ }
+
+ txn, err := db.Begin()
+ for _, ele := range rows {
+ ele.Get("_apid_scope", &scope)
+ ele.Get("id", &id)
+ ele.Get("app_id", &appId)
+ ele.Get("consumer_secret", &consumerSecret)
+ ele.Get("app_status", &appstatus)
+ ele.Get("status", &status)
+ ele.Get("issued_at", &issuedAt)
+ ele.Get("tenant_id", &tenantId)
+ _, err = txn.Stmt(prep).Exec(
+ scope,
+ id,
+ appId,
+ consumerSecret,
+ appstatus,
+ status,
+ issuedAt,
+ tenantId)
+
+ if err != nil {
+ log.Error("INSERT CRED Failed: ", id, ", ", scope, ")", err)
+ txn.Rollback()
+ return false
+ } else {
+ log.Debug("INSERT CRED Success: (", id, ", ", scope, ")")
+ }
+ }
+ txn.Commit()
+ return true
+}
+
+/*
+ * Performs Bulk insert of Applications
+ */
+func insertApplications(rows []common.Row, db *sql.DB) bool {
+
+ var scope, EntityIdentifier, DeveloperId, CallbackUrl, Status, AppName, AppFamily, tenantId, CreatedBy, LastModifiedBy string
+ var CreatedAt, LastModifiedAt int64
+
+ prep, err := db.Prepare("INSERT INTO APP (_apid_scope, id, developer_id,callback_url,status, name, app_family, created_at, created_by,updated_at, updated_by,tenant_id) VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12);")
+ if err != nil {
+ log.Error("INSERT APP Failed: ", err)
+ return false
+ }
+
+ txn, err := db.Begin()
+ for _, ele := range rows {
+
+ ele.Get("_apid_scope", &scope)
+ ele.Get("id", &EntityIdentifier)
+ ele.Get("developer_id", &DeveloperId)
+ ele.Get("callback_url", &CallbackUrl)
+ ele.Get("status", &Status)
+ ele.Get("name", &AppName)
+ ele.Get("app_family", &AppFamily)
+ ele.Get("created_at", &CreatedAt)
+ ele.Get("created_by", &CreatedBy)
+ ele.Get("updated_at", &LastModifiedAt)
+ ele.Get("updated_by", &LastModifiedBy)
+ ele.Get("tenant_id", &tenantId)
+
+ _, err = txn.Stmt(prep).Exec(
+ scope,
+ EntityIdentifier,
+ DeveloperId,
+ CallbackUrl,
+ Status,
+ AppName,
+ AppFamily,
+ CreatedAt,
+ CreatedBy,
+ LastModifiedAt,
+ LastModifiedBy,
+ tenantId)
+
+ if err != nil {
+ log.Error("INSERT APP Failed: (", EntityIdentifier, ", ", tenantId, ")", err)
+ txn.Rollback()
+ return false
+ } else {
+ log.Debug("INSERT APP Success: (", EntityIdentifier, ", ", tenantId, ")")
+ }
+ }
+ txn.Commit()
+ return true
+
+}
+
+/*
+ * Performs bulk insert of Developers
+ */
+func insertDevelopers(rows []common.Row, db *sql.DB) bool {
+
+ var scope, EntityIdentifier, Email, Status, UserName, FirstName, LastName, tenantId, CreatedBy, LastModifiedBy, Username string
+ var CreatedAt, LastModifiedAt int64
+
+ prep, err := db.Prepare("INSERT INTO DEVELOPER (_apid_scope,email,id,tenant_id,status,username,first_name,last_name,created_at,created_by,updated_at,updated_by) VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12);")
+ if err != nil {
+ log.Error("INSERT DEVELOPER Failed: ", err)
+ return false
+ }
+
+ txn, err := db.Begin()
+ for _, ele := range rows {
+
+ ele.Get("_apid_scope", &scope)
+ ele.Get("email", &Email)
+ ele.Get("id", &EntityIdentifier)
+ ele.Get("tenant_id", &tenantId)
+ ele.Get("status", &Status)
+ ele.Get("username", &Username)
+ ele.Get("first_name", &FirstName)
+ ele.Get("last_name", &LastName)
+ ele.Get("created_at", &CreatedAt)
+ ele.Get("created_by", &CreatedBy)
+ ele.Get("updated_at", &LastModifiedAt)
+ ele.Get("updated_by", &LastModifiedBy)
+
+ _, err = txn.Stmt(prep).Exec(
+ scope,
+ Email,
+ EntityIdentifier,
+ tenantId,
+ Status,
+ UserName,
+ FirstName,
+ LastName,
+ CreatedAt,
+ CreatedBy,
+ LastModifiedAt,
+ LastModifiedBy)
+
+ if err != nil {
+ log.Error("INSERT DEVELOPER Failed: (", EntityIdentifier, ", ", scope, ")", err)
+ txn.Rollback()
+ return false
+ } else {
+ log.Debug("INSERT DEVELOPER Success: (", EntityIdentifier, ", ", scope, ")")
+ }
+ }
+ txn.Commit()
+ return true
+}
+
+/*
+ * Performs Bulk insert of API products
+ */
+func insertAPIproducts(rows []common.Row, db *sql.DB) bool {
+
+ var scope, apiProduct, res, env, tenantId string
+
+ prep, err := db.Prepare("INSERT INTO API_PRODUCT (id, api_resources, environments, tenant_id,_apid_scope) VALUES($1,$2,$3,$4,$5)")
+ if err != nil {
+ log.Error("INSERT API_PRODUCT Failed: ", err)
+ return false
+ }
+
+ txn, err := db.Begin()
+ for _, ele := range rows {
+
+ ele.Get("_apid_scope", &scope)
+ ele.Get("id", &apiProduct)
+ ele.Get("api_resources", &res)
+ ele.Get("environments", &env)
+ ele.Get("tenant_id", &tenantId)
+
+ _, err = txn.Stmt(prep).Exec(
+ apiProduct,
+ res,
+ env,
+ tenantId,
+ scope)
+
+ if err != nil {
+ log.Error("INSERT API_PRODUCT Failed: (", apiProduct, ", ", tenantId, ")", err)
+ txn.Rollback()
+ return false
+ } else {
+ log.Debug("INSERT API_PRODUCT Success: (", apiProduct, ", ", tenantId, ")")
+ }
+ }
+ txn.Commit()
+ return true
+}
+
+/*
+ * Performs a bulk insert of all APP_CREDENTIAL_APIPRODUCT_MAPPER rows
+ */
+func insertApiProductMappers(rows []common.Row, db *sql.DB) bool {
+
+ var ApiProduct, AppId, EntityIdentifier, tenantId, Scope, Status string
+
+ prep, err := db.Prepare("INSERT INTO APP_CREDENTIAL_APIPRODUCT_MAPPER(apiprdt_id, app_id, appcred_id, tenant_id, _apid_scope, status) VALUES($1,$2,$3,$4,$5,$6);")
+ if err != nil {
+ log.Error("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: ", err)
+ return false
+ }
+
+ txn, err := db.Begin()
+ for _, ele := range rows {
+
+ ele.Get("apiprdt_id", &ApiProduct)
+ ele.Get("app_id", &AppId)
+ ele.Get("appcred_id", &EntityIdentifier)
+ ele.Get("tenant_id", &tenantId)
+ ele.Get("_apid_scope", &Scope)
+ ele.Get("status", &Status)
+
+ /*
+ * If the credentials has been successfully inserted, insert the
+ * mapping entries associated with the credential
+ */
+
+ _, err = txn.Stmt(prep).Exec(
+ ApiProduct,
+ AppId,
+ EntityIdentifier,
+ tenantId,
+ Scope,
+ Status)
+
+ if err != nil {
+ log.Error("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: (",
+ ApiProduct, ", ",
+ AppId, ", ",
+ EntityIdentifier, ", ",
+ tenantId, ", ",
+ Scope, ", ",
+ Status,
+ ")",
+ err)
+
+ txn.Rollback()
+ return false
+ } else {
+ log.Debug("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Success: (",
+ ApiProduct, ", ",
+ AppId, ", ",
+ EntityIdentifier, ", ",
+ tenantId, ", ",
+ Scope, ", ",
+ Status,
+ ")")
+ }
+ }
+ txn.Commit()
+ return true
}
func processChange(changes *common.ChangeList) {
@@ -80,35 +342,53 @@
for _, payload := range changes.Changes {
switch payload.Table {
- case "kms.developer", "public.developer":
+ case "kms.developer":
switch payload.Operation {
case 1:
- insertCreateDeveloper(payload.NewRow, db)
+ insertDeveloper(payload.NewRow, db)
+ case 2:
+ updateDeveloper(payload.NewRow, payload.OldRow, db)
+ case 3:
+ deleteDeveloper(payload.OldRow, db)
+ }
+ case "kms.app":
+ switch payload.Operation {
+ case 1:
+ insertApplication(payload.NewRow, db)
+ case 2:
+ updateApplication(payload.NewRow, payload.OldRow, db)
+ case 3:
+ deleteApplication(payload.OldRow, db)
}
- case "kms.app", "public.app":
+ case "kms.app_credential":
switch payload.Operation {
case 1:
- insertCreateApplication(payload.NewRow, db)
+ insertCredential(payload.NewRow, db)
+ case 2:
+ updateCredential(payload.NewRow, payload.OldRow, db)
+ case 3:
+ deleteCredential(payload.OldRow, db)
}
-
- case "kms.app_credential", "public.app_credential":
- switch payload.Operation {
- case 1:
- insertCreateCredential(payload.NewRow, db)
- }
- case "kms.api_product", "public.api_product":
+ case "kms.api_product":
switch payload.Operation {
case 1:
insertAPIproduct(payload.NewRow, db)
+ case 2:
+ updateAPIproduct(payload.NewRow, payload.OldRow, db)
+ case 3:
+ deleteAPIproduct(payload.OldRow, db)
}
- case "kms.app_credential_apiproduct_mapper", "public.app_credential_apiproduct_mapper":
+ case "kms.app_credential_apiproduct_mapper":
switch payload.Operation {
case 1:
- insertApiProductMapper(payload.NewRow, db)
+ insertAPIProductMapper(payload.NewRow, db)
+ case 2:
+ updateAPIproductMapper(payload.NewRow, payload.OldRow, db)
+ case 3:
+ deleteAPIproductMapper(payload.OldRow, db)
}
-
}
}
}
@@ -116,7 +396,7 @@
/*
* INSERT INTO APP_CREDENTIAL op
*/
-func insertCreateCredential(ele common.Row, db *sql.DB) bool {
+func insertCredential(ele common.Row, db *sql.DB) bool {
var scope, id, appId, consumerSecret, appstatus, status, tenantId string
var issuedAt int64
@@ -154,7 +434,8 @@
}
}
-func insertApiProductMapper(ele common.Row, db *sql.DB) bool {
+
+func insertAPIProductMapper(ele common.Row, db *sql.DB) bool {
var ApiProduct, AppId, EntityIdentifier, tenantId, Scope, Status string
@@ -208,13 +489,6 @@
}
/*
- * DELETE CRED
- */
-func deleteCredential(ele common.Row, db *sql.DB) bool {
- return true
-}
-
-/*
* INSERT INTO API product op
*/
func insertAPIproduct(ele common.Row, db *sql.DB) bool {
@@ -252,7 +526,7 @@
/*
* INSERT INTO APP op
*/
-func insertCreateApplication(ele common.Row, db *sql.DB) bool {
+func insertApplication(ele common.Row, db *sql.DB) bool {
var scope, EntityIdentifier, DeveloperId, CallbackUrl, Status, AppName, AppFamily, tenantId, CreatedBy, LastModifiedBy string
var CreatedAt, LastModifiedAt int64
@@ -302,7 +576,7 @@
/*
* INSERT INTO DEVELOPER op
*/
-func insertCreateDeveloper(ele common.Row, db *sql.DB) bool {
+func insertDeveloper(ele common.Row, db *sql.DB) bool {
var scope, EntityIdentifier, Email, Status, UserName, FirstName, LastName, tenantId, CreatedBy, LastModifiedBy, Username string
var CreatedAt, LastModifiedAt int64
@@ -347,3 +621,73 @@
return true
}
}
+
+/*
+ * DELETE APP
+ */
+func deleteApplication(ele common.Row, db *sql.DB) bool {
+ return true
+}
+
+/*
+ * DELETE CRED
+ */
+func deleteCredential(ele common.Row, db *sql.DB) bool {
+ return true
+}
+
+/*
+ * DELETE developer
+ */
+func deleteDeveloper(ele common.Row, db *sql.DB) bool {
+ return true
+}
+
+/*
+ * DELETE API product
+ */
+func deleteAPIproduct(ele common.Row, db *sql.DB) bool {
+ return true
+}
+
+/*
+ * DELETE APIPRDT MAPPER
+ */
+func deleteAPIproductMapper(ele common.Row, db *sql.DB) bool {
+ return true
+}
+
+/*
+ * UPDATE APP
+ */
+func updateApplication(ele common.Row, ele2 common.Row, db *sql.DB) bool {
+ return true
+}
+
+/*
+ * UPDATE CRED
+ */
+func updateCredential(ele common.Row, ele2 common.Row, db *sql.DB) bool {
+ return true
+}
+
+/*
+ * UPDATE developer
+ */
+func updateDeveloper(ele common.Row, ele2 common.Row, db *sql.DB) bool {
+ return true
+}
+
+/*
+ * UPDATE API product
+ */
+func updateAPIproduct(ele common.Row, ele2 common.Row, db *sql.DB) bool {
+ return true
+}
+
+/*
+ * UPDATE APIPRDT MAPPER
+ */
+func updateAPIproductMapper(ele common.Row, ele2 common.Row, db *sql.DB) bool {
+ return true
+}
diff --git a/listener_test.go b/listener_test.go
index 2a91b90..bd425c6 100644
--- a/listener_test.go
+++ b/listener_test.go
@@ -170,27 +170,27 @@
event.Changes = []common.Change{
{
- Table: "public.api_product",
+ Table: "kms.api_product",
NewRow: srvItems,
Operation: 1,
},
{
- Table: "public.developer",
+ Table: "kms.developer",
NewRow: devItems,
Operation: 1,
},
{
- Table: "public.app",
+ Table: "kms.app",
NewRow: appItems,
Operation: 1,
},
{
- Table: "public.app_credential",
+ Table: "kms.app_credential",
NewRow: credItems,
Operation: 1,
},
{
- Table: "public.app_credential_apiproduct_mapper",
+ Table: "kms.app_credential_apiproduct_mapper",
NewRow: mpItems,
Operation: 1,
},