Updated logic to handle bootstrapping, and newer schema for KMS, newer
protocol for Snapshot/change server.
diff --git a/api.go b/api.go
index 241e472..9bbce01 100644
--- a/api.go
+++ b/api.go
@@ -98,12 +98,7 @@
return errorResponse(reason, errorCode)
}
- /*
- * NOTE: that here c.expired_at has been commented out because it is not
- * kept track of by Cassandra (hence always defaults to -1). FIXME
- */
-
- sSql = "SELECT ap.res_names, ap.env, c.issued_at, c.status, a.cback_url, d.username, d.id FROM APP_CREDENTIAL AS c INNER JOIN APP AS a ON c.app_id = a.id INNER JOIN DEVELOPER AS d ON a.dev_id = d.id INNER JOIN APP_AND_API_PRODUCT_MAPPER as mp ON mp.app_cred_id = c.id INNER JOIN API_PRODUCT as ap ON ap.id = mp.api_prdt_id WHERE (UPPER(d.sts) = 'ACTIVE' AND mp.api_prdt_id = ap.id AND mp.app_id = a.id AND mp.app_cred_id = c.id AND UPPER(mp.api_prdt_status) = 'APPROVED' AND UPPER(a.status) = 'APPROVED' AND UPPER(c.status) = 'APPROVED' AND c.id = '" + key + "' AND c.org = '" + org + "');"
+ sSql = "SELECT ap.api_resources, ap.environments, c.issued_at, c.app_status, a.callback_url, d.username, d.id FROM APP_CREDENTIAL AS c INNER JOIN APP AS a ON c.app_id = a.id INNER JOIN DEVELOPER AS d ON a.developer_id = d.id INNER JOIN APP_CREDENTIAL_APIPRODUCT_MAPPER as mp ON mp.appcred_id = c.id INNER JOIN API_PRODUCT as ap ON ap.id = mp.apiprdt_id WHERE (UPPER(d.status) = 'ACTIVE' AND mp.apiprdt_id = ap.id AND mp.app_id = a.id AND mp.appcred_id = c.id AND UPPER(mp.status) = 'APPROVED' AND UPPER(a.status) = 'APPROVED' AND UPPER(c.status) = 'APPROVED' AND c.id = '" + key + "' AND c._apid_scope = '" + org + "');"
err = db.QueryRow(sSql).Scan(&resName, &resEnv, &issuedAt, &status,
&redirectionURIs, &developerAppName, &developerId)
diff --git a/init.go b/init.go
index 483fa68..bae3a3f 100644
--- a/init.go
+++ b/init.go
@@ -7,7 +7,7 @@
)
const (
- apiPath = "/verifyAPIKey"
+ apiPath = "/verifiers/apikey"
)
var (
@@ -33,7 +33,7 @@
}
var count int
- row := db.QueryRow("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='API_PRODUCT';")
+ row := db.QueryRow("SELECT count(*) FROM sqlite_master WHERE type='table' AND name='API_PRODUCT' COLLATE NOCASE;")
if err := row.Scan(&count); err != nil {
log.Panic("Unable to setup database", err)
}
@@ -52,26 +52,26 @@
func createTables(db *sql.DB) {
_, err := db.Exec(`
CREATE TABLE api_product (
- id uuid,
+ id text,
tenant_id text,
name text,
display_name text,
description text,
api_resources text[],
approval_type text,
- scopes text[],
+ _apid_scope text,
proxies text[],
environments text[],
quota text,
quota_time_unit text,
quota_interval int,
- created_at timestamp,
+ created_at int64,
created_by text,
- updated_at timestamp,
+ updated_at int64,
updated_by text,
PRIMARY KEY (tenant_id, id));
CREATE TABLE developer (
- id uuid,
+ id text,
tenant_id text,
username text,
first_name text,
@@ -81,41 +81,40 @@
status text,
encrypted_password text,
salt text,
- created_at timestamp,
+ _apid_scope text,
+ created_at int64,
created_by text,
- updated_at timestamp,
+ updated_at int64,
updated_by text,
- PRIMARY KEY (tenant_id, id),
- constraint developer_email_uq unique(tenant_id, email)
+ PRIMARY KEY (tenant_id, id)
);
CREATE TABLE company (
- id uuid,
+ id text,
tenant_id text,
name text,
display_name text,
status text,
- created_at timestamp,
+ created_at int64,
created_by text,
- updated_at timestamp,
+ updated_at int64,
updated_by text,
- PRIMARY KEY (tenant_id, id),
- constraint comp_name_uq unique(tenant_id, name)
+ _apid_scope text,
+ PRIMARY KEY (tenant_id, id)
);
CREATE TABLE company_developer (
tenant_id text,
- company_id uuid,
- developer_id uuid,
+ company_id text,
+ developer_id text,
roles text[],
- created_at timestamp,
+ created_at int64,
created_by text,
- updated_at timestamp,
+ updated_at int64,
updated_by text,
- PRIMARY KEY (tenant_id, company_id,developer_id),
- FOREIGN KEY (tenant_id,company_id) references company(tenant_id,id),
- FOREIGN KEY (tenant_id,developer_id) references developer(tenant_id,id)
+ _apid_scope text,
+ PRIMARY KEY (tenant_id, company_id,developer_id)
);
CREATE TABLE app (
- id uuid,
+ id text,
tenant_id text,
name text,
display_name text,
@@ -123,72 +122,37 @@
callback_url text,
status text,
app_family text,
- company_id uuid,
- developer_id uuid,
- type app_type,
- created_at timestamp,
+ company_id text,
+ developer_id text,
+ type int,
+ created_at int64,
created_by text,
- updated_at timestamp,
+ updated_at int64,
updated_by text,
- PRIMARY KEY (tenant_id, id),
- constraint app_name_uq unique(tenant_id, name),
- FOREIGN KEY (tenant_id,company_id) references company(tenant_id,id),
- FOREIGN KEY (tenant_id,developer_id) references developer(tenant_id,id)
+ _apid_scope text,
+ PRIMARY KEY (tenant_id, id)
);
CREATE TABLE app_credential (
id text,
tenant_id text,
consumer_secret text,
- app_id uuid,
+ app_id text,
method_type text,
status text,
- issued_at timestamp,
- expires_at timestamp,
+ issued_at int64,
+ expires_at int64,
app_status text,
- scopes text[],
- PRIMARY KEY (tenant_id, id),
- FOREIGN KEY (tenant_id,app_id) references app(tenant_id,id)
+ _apid_scope text,
+ PRIMARY KEY (tenant_id, id)
);
CREATE TABLE app_credential_apiproduct_mapper (
tenant_id text,
appcred_id text,
- app_id uuid,
- apiprdt_id uuid,
- status appcred_apiprdt_status,
- PRIMARY KEY (tenant_id,appcred_id,app_id,apiprdt_id),
- FOREIGN KEY (tenant_id,appcred_id) references app_credential(tenant_id,id),
- FOREIGN KEY (tenant_id,app_id) references app(tenant_id,id)
-);
-CREATE TABLE attributes (
- tenant_id text,
- dev_id uuid,
- comp_id uuid,
- apiprdt_id uuid,
- app_id uuid,
- appcred_id text,
- type entity_type,
- name text ,
- value text,
- PRIMARY KEY (tenant_id,dev_id,comp_id,apiprdt_id,app_id,appcred_id,type,name),
- FOREIGN KEY (tenant_id,appcred_id) references app_credential(tenant_id,id),
- FOREIGN KEY (tenant_id,app_id) references app(tenant_id,id),
- FOREIGN KEY (tenant_id,dev_id) references developer(tenant_id,id),
- FOREIGN KEY (tenant_id,comp_id) references company(tenant_id,id),
- FOREIGN KEY (tenant_id,apiprdt_id) references api_product(tenant_id,id)
-);
-CREATE TABLE apidconfig (
- id uuid,
- consumer_key text,
- consumer_secret text,
- scope text[],
- app_id uuid,
- created_at timestamp,
- created_by text,
- updated_at timestamp,
- updated_by text,
- PRIMARY KEY(id),
- constraint apidconfig_key_uq unique(consumer_key),
- constraint apidconfig_appid_uq unique(app_id)
+ app_id text,
+ apiprdt_id text,
+ _apid_scope text,
+ status text,
+ PRIMARY KEY (appcred_id, app_id, apiprdt_id,tenant_id)
);
`)
if err != nil {
diff --git a/listener.go b/listener.go
index 6aec26f..6c025c7 100644
--- a/listener.go
+++ b/listener.go
@@ -2,9 +2,8 @@
import (
"database/sql"
- "encoding/json"
"github.com/30x/apid"
- "github.com/30x/apidApigeeSync"
+ "github.com/30x/transicator/common"
)
type handler struct {
@@ -17,174 +16,223 @@
// todo: The following was basically just copied from old APID - needs review.
func (h *handler) Handle(e apid.Event) {
- changeSet, ok := e.(*apidApigeeSync.ChangeSet)
- if !ok {
- log.Errorf("Received non-ChangeSet event. This shouldn't happen!")
- return
- }
- log.Debugf("apigeeSyncEvent: %d changes", len(changeSet.Changes))
+ snapData, ok := e.(*common.Snapshot)
+ if ok {
+ processSnapshot(snapData)
+ } else {
+ changeSet, ok := e.(*common.ChangeList)
+ if ok {
+ processChange(changeSet)
+ } else {
+ log.Errorf("Received Invalid event. This shouldn't happen!")
+ }
+ }
+ return
+}
+
+func processSnapshot(snapshot *common.Snapshot) {
+
+ log.Debugf("Process Snapshot data")
db, err := data.DB()
if err != nil {
- panic("help me!") // todo: handle
+ panic("Unable to access Sqlite DB")
}
- for _, payload := range changeSet.Changes {
+ for _, payload := range snapshot.Tables {
- org := payload.Data.PldCont.Organization
-
- switch payload.Data.EntityType {
+ switch payload.Name {
case "developer":
- switch payload.Data.Operation {
- case "create":
- insertCreateDeveloper(payload.Data, db, org)
+ for _, row := range payload.Rows {
+ insertCreateDeveloper(row, db)
}
-
case "app":
- switch payload.Data.Operation {
- case "create":
- insertCreateApplication(payload.Data, db, org)
+ 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 "credential":
- switch payload.Data.Operation {
- case "create":
- insertCreateCredential(payload.Data, db, org)
-
- case "delete":
- deleteCredential(payload.Data, db, org)
- }
-
- case "apiproduct":
- switch payload.Data.Operation {
- case "create":
- insertAPIproduct(payload.Data, db, org)
- }
}
+ }
+}
+func processChange(changes *common.ChangeList) {
+
+ log.Debugf("apigeeSyncEvent: %d changes", len(changes.Changes))
+
+ db, err := data.DB()
+ if err != nil {
+ panic("Unable to access Sqlite DB")
+ }
+
+ for _, payload := range changes.Changes {
+
+ switch payload.Table {
+ case "public.developer":
+ switch payload.Operation {
+ case 1:
+ insertCreateDeveloper(payload.NewRow, db)
+ }
+
+ case "public.app":
+ switch payload.Operation {
+ case 1:
+ insertCreateApplication(payload.NewRow, db)
+ }
+
+ case "public.app_credential":
+ switch payload.Operation {
+ case 1:
+ insertCreateCredential(payload.NewRow, db)
+ }
+ case "public.api_product":
+ switch payload.Operation {
+ case 1:
+ insertAPIproduct(payload.NewRow, db)
+ }
+
+ case "public.app_credential_apiproduct_mapper":
+ switch payload.Operation {
+ case 1:
+ insertApiProductMapper(payload.NewRow, db)
+ }
+
+ }
}
}
/*
* INSERT INTO APP_CREDENTIAL op
*/
-func insertCreateCredential(ele apidApigeeSync.DataPayload, db *sql.DB, org string) bool {
+func insertCreateCredential(ele common.Row, db *sql.DB) {
+
+ var scope, id, appId, consumerSecret, appstatus, status, tenantId string
+ var issuedAt int64
txn, _ := db.Begin()
- isPass := true
- _, err := txn.Exec("INSERT INTO APP_CREDENTIAL (org, id, app_id, cons_secret, status, issued_at)VALUES(?,?,?,?,?,?);",
- org,
- ele.EntityIdentifier,
- ele.PldCont.AppId,
- ele.PldCont.ConsumerSecret,
- ele.PldCont.Status,
- ele.PldCont.IssuedAt)
+ err := ele.Get("_apid_scope", &scope)
+ err = ele.Get("id", &id)
+ err = ele.Get("app_id", &appId)
+ err = ele.Get("consumer_secret", &consumerSecret)
+ err = ele.Get("app_status", &appstatus)
+ err = ele.Get("status", &status)
+ err = ele.Get("issued_at", &issuedAt)
+ err = ele.Get("tenant_id", &tenantId)
+
+ _, err = txn.Exec("INSERT INTO APP_CREDENTIAL (_apid_scope, id, app_id, consumer_secret, app_status, status, issued_at, tenant_id)VALUES(?,?,?,?,?,?,?,?);",
+ scope,
+ id,
+ appId,
+ consumerSecret,
+ appstatus,
+ status,
+ issuedAt,
+ tenantId)
if err != nil {
- isPass = false
- log.Error("INSERT CRED Failed: ", ele.EntityIdentifier, org, ")", err)
- goto OT
+ log.Error("INSERT CRED Failed: ", id, ", ", scope, ")", err)
+ txn.Rollback()
} else {
- log.Info("INSERT CRED Success: (", ele.EntityIdentifier, org, ")")
+ log.Info("INSERT CRED Success: (", id, ", ", scope, ")")
+ txn.Commit()
}
+}
+func insertApiProductMapper(ele common.Row, db *sql.DB) {
+
+ var ApiProduct, AppId, EntityIdentifier, tenantId, Scope, Status string
+
+ txn, _ := db.Begin()
+ err := ele.Get("apiprdt_id", &ApiProduct)
+ err = ele.Get("app_id", &AppId)
+ err = ele.Get("appcred_id", &EntityIdentifier)
+ err = ele.Get("tenant_id", &tenantId)
+ err = ele.Get("_apid_scope", &Scope)
+ err = ele.Get("status", &Status)
+
/*
* If the credentials has been successfully inserted, insert the
* mapping entries associated with the credential
*/
- for _, elem := range ele.PldCont.ApiProducts {
+ _, err = txn.Exec("INSERT INTO APP_CREDENTIAL_APIPRODUCT_MAPPER(apiprdt_id, app_id, appcred_id, tenant_id, _apid_scope, status) VALUES(?,?,?,?,?,?);",
+ ApiProduct,
+ AppId,
+ EntityIdentifier,
+ tenantId,
+ Scope,
+ Status)
- _, err = txn.Exec("INSERT INTO APP_AND_API_PRODUCT_MAPPER (org, api_prdt_id, app_id, app_cred_id, api_prdt_status) VALUES(?,?,?,?,?);",
- org,
- elem.ApiProduct,
- ele.PldCont.AppId,
- ele.EntityIdentifier,
- elem.Status)
-
- if err != nil {
- isPass = false
- log.Error("INSERT APP_AND_API_PRODUCT_MAPPER Failed: (",
- org,
- elem.ApiProduct,
- ele.PldCont.AppId,
- ele.EntityIdentifier,
- ")",
- err)
- break
- } else {
- log.Info("INSERT APP_AND_API_PRODUCT_MAPPER Success: (",
- org,
- elem.ApiProduct,
- ele.PldCont.AppId,
- ele.EntityIdentifier,
- ")")
- }
- }
-OT:
- if isPass == true {
- txn.Commit()
- } else {
+ if err != nil {
+ log.Error("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Failed: (",
+ ApiProduct,
+ AppId,
+ EntityIdentifier,
+ tenantId,
+ Scope,
+ Status,
+ ")",
+ err)
txn.Rollback()
+ } else {
+ log.Info("INSERT APP_CREDENTIAL_APIPRODUCT_MAPPER Success: (",
+ ApiProduct,
+ AppId,
+ EntityIdentifier,
+ tenantId,
+ Scope,
+ Status,
+ ")")
+ txn.Commit()
}
- return isPass
-
}
/*
* DELETE CRED
*/
-func deleteCredential(ele apidApigeeSync.DataPayload, db *sql.DB, org string) bool {
+func deleteCredential(ele common.Row, db *sql.DB) {
- txn, _ := db.Begin()
-
- _, err := txn.Exec("DELETE FROM APP_CREDENTIAL WHERE org=? AND id=?;", org, ele.EntityIdentifier)
-
- if err != nil {
- log.Error("DELETE CRED Failed: (", ele.EntityIdentifier, org, ")", err)
- txn.Rollback()
- return false
- } else {
- log.Info("DELETE CRED Success: (", ele.EntityIdentifier, org, ")")
- txn.Commit()
- return true
- }
-
-}
-
-/*
- * Helper function to convert string slice in to JSON format
- */
-func convertSlicetoStringFormat(inpslice []string) string {
-
- bytes, _ := json.Marshal(inpslice)
- return string(bytes)
}
/*
* INSERT INTO API product op
*/
-func insertAPIproduct(ele apidApigeeSync.DataPayload, db *sql.DB, org string) bool {
+func insertAPIproduct(ele common.Row, db *sql.DB) {
+
+ var scope, apiProduct, res, env, tenantId string
txn, _ := db.Begin()
- restr := convertSlicetoStringFormat(ele.PldCont.Resources)
- envstr := convertSlicetoStringFormat(ele.PldCont.Environments)
+ err := ele.Get("_apid_scope", &scope)
+ err = ele.Get("id", &apiProduct)
+ err = ele.Get("api_resources", &res)
+ err = ele.Get("environments", &env)
+ err = ele.Get("tenant_id", &tenantId)
- _, err := txn.Exec("INSERT INTO API_PRODUCT (org, id, res_names, env) VALUES(?,?,?,?)",
- org,
- ele.PldCont.AppName,
- restr,
- envstr)
+ _, err = txn.Exec("INSERT INTO API_PRODUCT (id, api_resources, environments, tenant_id,_apid_scope) VALUES(?,?,?,?,?)",
+ apiProduct,
+ res,
+ env,
+ tenantId,
+ scope)
if err != nil {
- log.Error("INSERT API_PRODUCT Failed: (", ele.PldCont.AppName, org, ")", err)
+ log.Error("INSERT API_PRODUCT Failed: (", apiProduct, tenantId, ")", err)
txn.Rollback()
- return false
} else {
- log.Info("INSERT API_PRODUCT Success: (", ele.PldCont.AppName, org, ")")
+ log.Info("INSERT API_PRODUCT Success: (", apiProduct, tenantId, ")")
txn.Commit()
- return true
}
}
@@ -192,31 +240,45 @@
/*
* INSERT INTO APP op
*/
-func insertCreateApplication(ele apidApigeeSync.DataPayload, db *sql.DB, org string) bool {
+func insertCreateApplication(ele common.Row, db *sql.DB) {
+ var scope, EntityIdentifier, DeveloperId, CallbackUrl, Status, AppName, AppFamily, tenantId, CreatedBy, LastModifiedBy string
+ var CreatedAt, LastModifiedAt int64
txn, _ := db.Begin()
- _, err := txn.Exec("INSERT INTO APP (org, id, dev_id,cback_url,status, name, app_family, created_at, created_by,updated_at, updated_by) VALUES(?,?,?,?,?,?,?,?,?,?,?);",
- org,
- ele.EntityIdentifier,
- ele.PldCont.DeveloperId,
- ele.PldCont.CallbackUrl,
- ele.PldCont.Status,
- ele.PldCont.AppName,
- ele.PldCont.AppFamily,
- ele.PldCont.CreatedAt,
- ele.PldCont.CreatedBy,
- ele.PldCont.LastModifiedAt,
- ele.PldCont.LastModifiedBy)
+ err := ele.Get("_apid_scope", &scope)
+ err = ele.Get("id", &EntityIdentifier)
+ err = ele.Get("developer_id", &DeveloperId)
+ err = ele.Get("callback_url", &CallbackUrl)
+ err = ele.Get("status", &Status)
+ err = ele.Get("name", &AppName)
+ err = ele.Get("app_family", &AppFamily)
+ err = ele.Get("created_at", &CreatedAt)
+ err = ele.Get("created_by", &CreatedBy)
+ err = ele.Get("updated_at", &LastModifiedAt)
+ err = ele.Get("updated_by", &LastModifiedBy)
+ err = ele.Get("tenant_id", &tenantId)
+
+ _, err = txn.Exec("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(?,?,?,?,?,?,?,?,?,?,?,?);",
+ scope,
+ EntityIdentifier,
+ DeveloperId,
+ CallbackUrl,
+ Status,
+ AppName,
+ AppFamily,
+ CreatedAt,
+ CreatedBy,
+ LastModifiedAt,
+ LastModifiedBy,
+ tenantId)
if err != nil {
- log.Error("INSERT APP Failed: (", ele.EntityIdentifier, org, ")", err)
+ log.Error("INSERT APP Failed: (", EntityIdentifier, tenantId, ")", err)
txn.Rollback()
- return false
} else {
- log.Info("INSERT APP Success: (", ele.EntityIdentifier, org, ")")
+ log.Info("INSERT APP Success: (", EntityIdentifier, tenantId, ")")
txn.Commit()
- return true
}
}
@@ -224,31 +286,43 @@
/*
* INSERT INTO DEVELOPER op
*/
-func insertCreateDeveloper(ele apidApigeeSync.DataPayload, db *sql.DB, org string) bool {
-
+func insertCreateDeveloper(ele common.Row, db *sql.DB) {
+ var scope, EntityIdentifier, Email, Status, UserName, FirstName, LastName, tenantId, CreatedBy, LastModifiedBy, Username string
+ var CreatedAt, LastModifiedAt int64
txn, _ := db.Begin()
- _, err := txn.Exec("INSERT INTO DEVELOPER (org, email, id, sts, username, firstname, lastname, created_at,created_by, updated_at, updated_by) VALUES(?,?,?,?,?,?,?,?,?,?,?);",
- org,
- ele.PldCont.Email,
- ele.EntityIdentifier,
- ele.PldCont.Status,
- ele.PldCont.UserName,
- ele.PldCont.FirstName,
- ele.PldCont.LastName,
- ele.PldCont.CreatedAt,
- ele.PldCont.CreatedBy,
- ele.PldCont.LastModifiedAt,
- ele.PldCont.LastModifiedBy)
+ err := ele.Get("_apid_scope", &scope)
+ err = ele.Get("email", &Email)
+ err = ele.Get("id", &EntityIdentifier)
+ err = ele.Get("tenant_id", &tenantId)
+ err = ele.Get("status", &Status)
+ err = ele.Get("username", &Username)
+ err = ele.Get("first_name", &FirstName)
+ err = ele.Get("last_name", &LastName)
+ err = ele.Get("created_at", &CreatedAt)
+ err = ele.Get("created_by", &CreatedBy)
+ err = ele.Get("updated_at", &LastModifiedAt)
+ err = ele.Get("updated_by", &LastModifiedBy)
+
+ _, err = txn.Exec("INSERT INTO DEVELOPER (_apid_scope,email,id,tenant_id,status,username,first_name,last_name,created_at,created_by,updated_at,updated_by) VALUES(?,?,?,?,?,?,?,?,?,?,?,?);",
+ scope,
+ Email,
+ EntityIdentifier,
+ tenantId,
+ Status,
+ UserName,
+ FirstName,
+ LastName,
+ CreatedAt,
+ CreatedBy,
+ LastModifiedAt,
+ LastModifiedBy)
if err != nil {
- log.Error("INSERT DEVELOPER Failed: (", ele.PldCont.UserName, org, ")", err)
+ log.Error("INSERT DEVELOPER Failed: (", EntityIdentifier, scope, ")", err)
txn.Rollback()
- return false
} else {
- log.Info("INSERT DEVELOPER Success: (", ele.PldCont.UserName, org, ")")
+ log.Info("INSERT DEVELOPER Success: (", EntityIdentifier, scope, ")")
txn.Commit()
- return true
}
-
}
diff --git a/validate_env.go b/validate_env.go
index df0382d..d90e27c 100644
--- a/validate_env.go
+++ b/validate_env.go
@@ -1,15 +1,16 @@
package apidVerifyApiKey
-import "encoding/json"
+import "strings"
/*
* Ensure the ENV matches.
*/
-func validateEnv(envLocal, envInPath string) bool {
+func validateEnv(envLocal string, envInPath string) bool {
- var ePaths []string
- json.Unmarshal([]byte(envLocal), &ePaths)
- for _, a := range ePaths {
+ s := strings.TrimPrefix(envLocal, "{")
+ s = strings.TrimSuffix(s, "}")
+ fs := strings.Split(s, ",")
+ for _, a := range fs {
if a == envInPath {
return true
}
diff --git a/validate_path.go b/validate_path.go
index f3cfb99..ac107cb 100644
--- a/validate_path.go
+++ b/validate_path.go
@@ -1,7 +1,6 @@
package apidVerifyApiKey
import (
- "encoding/json"
"regexp"
"strings"
)
@@ -14,9 +13,10 @@
*/
func validatePath(basePath, requestBase string) bool {
- var basePaths []string
- json.Unmarshal([]byte(basePath), &basePaths)
- for _, a := range basePaths {
+ s := strings.TrimPrefix(basePath, "{")
+ s = strings.TrimSuffix(s, "}")
+ fs := strings.Split(s, ",")
+ for _, a := range fs {
str1 := strings.Replace(a, "**", "(.*)", -1)
str2 := strings.Replace(a, "*", "([^/]+)", -1)
if a != str1 {
@@ -41,5 +41,5 @@
}
/* if the i/p resource is empty, no checks need to be made */
- return len(basePaths) == 0
+ return len(fs) == 0
}