[ISSUE-67901957] implement all endpoints
diff --git a/accessEntity/api.go b/accessEntity/api.go index 6678d3f..34aebb7 100644 --- a/accessEntity/api.go +++ b/accessEntity/api.go
@@ -44,6 +44,11 @@ IdentifierCompanyName = "companyname" ) +const ( + AppTypeDeveloper = "DEVELOPER" + AppTypeCompany = "COMPANY" +) + var ( Identifiers = map[string]bool{ "appid": true, @@ -115,57 +120,217 @@ services.API().HandleFunc(a.AccessEntityPath+EndpointCompany, a.HandleCompanies).Methods("GET") services.API().HandleFunc(a.AccessEntityPath+EndpointCompanyDeveloper, a.HandleCompanyDevelopers).Methods("GET") services.API().HandleFunc(a.AccessEntityPath+EndpointDeveloper, a.HandleDevelopers).Methods("GET") - services.API().HandleFunc(a.AccessEntityPath+EndpointAppCredentials, a.HandleConsumers).Methods("GET") + services.API().HandleFunc(a.AccessEntityPath+EndpointAppCredentials, a.HandleAppCredentials).Methods("GET") a.apiInitialized = true log.Debug("API endpoints initialized") } func (a *ApiManager) HandleApps(w http.ResponseWriter, r *http.Request) { - -} - -func (a *ApiManager) HandleApiProducts(w http.ResponseWriter, r *http.Request) { - ids, err := extractIdentifiers(r.URL.Query()) + ids, org, err := extractIdentifiers(r.URL.Query()) if err != nil { common.WriteError(w, err.Error(), INVALID_PARAMETERS, http.StatusBadRequest) } - details, errRes := a.getApiProduct(ids) + res, errRes := a.getApp(org, ids) if errRes != nil { writeJson(errRes, w, r) return } + writeJson(res, w, r) +} + +func (a *ApiManager) HandleApiProducts(w http.ResponseWriter, r *http.Request) { + ids, org, err := extractIdentifiers(r.URL.Query()) + if err != nil { + common.WriteError(w, err.Error(), INVALID_PARAMETERS, http.StatusBadRequest) + } + details, errRes := a.getApiProduct(org, ids) + if errRes != nil { + w.WriteHeader(errRes.StatusCode) + writeJson(errRes, w, r) + return + } writeJson(details, w, r) } func (a *ApiManager) HandleCompanies(w http.ResponseWriter, r *http.Request) { - + ids, org, err := extractIdentifiers(r.URL.Query()) + if err != nil { + common.WriteError(w, err.Error(), INVALID_PARAMETERS, http.StatusBadRequest) + } + details, errRes := a.getCompany(org, ids) + if errRes != nil { + w.WriteHeader(errRes.StatusCode) + writeJson(errRes, w, r) + return + } + writeJson(details, w, r) } -func (a *ApiManager) HandleCompanyDevelopers(w http.ResponseWriter, r *http.Request) { +func (a *ApiManager) HandleCompanyDevelopers(w http.ResponseWriter, r *http.Request) { + ids, org, err := extractIdentifiers(r.URL.Query()) + if err != nil { + common.WriteError(w, err.Error(), INVALID_PARAMETERS, http.StatusBadRequest) + } + details, errRes := a.getCompanyDeveloper(org, ids) + if errRes != nil { + w.WriteHeader(errRes.StatusCode) + writeJson(errRes, w, r) + return + } + writeJson(details, w, r) } func (a *ApiManager) HandleDevelopers(w http.ResponseWriter, r *http.Request) { - + ids, org, err := extractIdentifiers(r.URL.Query()) + if err != nil { + common.WriteError(w, err.Error(), INVALID_PARAMETERS, http.StatusBadRequest) + } + details, errRes := a.getDeveloper(org, ids) + if errRes != nil { + w.WriteHeader(errRes.StatusCode) + writeJson(errRes, w, r) + return + } + writeJson(details, w, r) } -func (a *ApiManager) HandleConsumers(w http.ResponseWriter, r *http.Request) { + +func (a *ApiManager) HandleAppCredentials(w http.ResponseWriter, r *http.Request) { } -func extractIdentifiers(pars map[string][]string) (map[string]string, error) { +func extractIdentifiers(pars map[string][]string) (map[string]string, string, error) { m := make(map[string]string) + org := "" + if orgs := pars["organization"]; len(orgs) > 0 { + org = orgs[0] + } for k, v := range pars { k = strings.ToLower(k) if Identifiers[k] { if len(v) == 1 { m[k] = v[0] } else { - return nil, fmt.Errorf("each identifier must have only 1 value") + return nil, org, fmt.Errorf("each identifier must have only 1 value") } } } - return m, nil + return m, org, nil } -func (a *ApiManager) getApiProduct(ids map[string]string) (*ApiProductDetails, *common.ErrorResponse) { +func (a *ApiManager) getCompanyDeveloper(org string, ids map[string]string) (*CompanyDevelopersSuccessResponse, *common.ErrorResponse) { + valid, keyVals := parseIdentifiers(EndpointDeveloper, ids) + if !valid { + return nil, ErrInvalidPar + } + priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], keyVals[2], keyVals[3] + + devs, err := a.DbMan.GetCompanyDevelopers(priKey, priVal, secKey, secVal) + if err != nil { + log.Errorf("getCompanyDeveloper: %v", err) + return nil, newDbError(err) + } + + if len(devs) == 0 { + return &CompanyDevelopersSuccessResponse{ + CompanyDevelopers: nil, + Organization: org, + }, nil + } + + var details []*CompanyDeveloperDetails + for _, dev := range devs { + comName, err := a.DbMan.GetComNameByComId(dev.CompanyId) + if err != nil { + log.Errorf("getCompanyDeveloper: %v", err) + return nil, newDbError(err) + } + email, err := a.DbMan.GetDevEmailByDevId(dev.DeveloperId) + if err != nil { + log.Errorf("getCompanyDeveloper: %v", err) + return nil, newDbError(err) + } + detail := makeComDevDetails(&dev, comName, email, priKey, priVal) + details = append(details, detail) + } + return &CompanyDevelopersSuccessResponse{ + CompanyDevelopers: details, + Organization: org, + }, nil +} + +func (a *ApiManager) getDeveloper(org string, ids map[string]string) (*DeveloperSuccessResponse, *common.ErrorResponse) { + valid, keyVals := parseIdentifiers(EndpointDeveloper, ids) + if !valid { + return nil, ErrInvalidPar + } + priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], keyVals[2], keyVals[3] + + devs, err := a.DbMan.GetDevelopers(priKey, priVal, secKey, secVal) + if err != nil { + log.Errorf("getApiProduct: %v", err) + return nil, newDbError(err) + } + + if len(devs) == 0 { + return &DeveloperSuccessResponse{ + Developer: nil, + Organization: org, + }, nil + } + dev := &devs[0] + + attrs := a.DbMan.GetKmsAttributes(dev.TenantId, dev.Id)[dev.Id] + comNames, err := a.DbMan.GetComNamesByDevId(dev.Id) + if err != nil { + log.Errorf("getApiProduct: %v", err) + return nil, newDbError(err) + } + appNames, err := a.DbMan.GetAppNamesByDevId(dev.Id) + if err != nil { + log.Errorf("getApiProduct: %v", err) + return nil, newDbError(err) + } + details := makeDevDetails(dev, appNames, comNames, attrs, priKey, priVal) + return &DeveloperSuccessResponse{ + Developer: details, + Organization: org, + }, nil +} + +func (a *ApiManager) getCompany(org string, ids map[string]string) (*CompanySuccessResponse, *common.ErrorResponse) { + valid, keyVals := parseIdentifiers(EndpointCompany, ids) + if !valid { + return nil, ErrInvalidPar + } + priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], keyVals[2], keyVals[3] + + coms, err := a.DbMan.GetCompanies(priKey, priVal, secKey, secVal) + if err != nil { + log.Errorf("getApiProduct: %v", err) + return nil, newDbError(err) + } + + if len(coms) == 0 { + return &CompanySuccessResponse{ + Company: nil, + Organization: org, + }, nil + } + com := &coms[0] + + attrs := a.DbMan.GetKmsAttributes(com.TenantId, com.Id)[com.Id] + appNames, err := a.DbMan.GetAppNamesByComId(com.Id) + if err != nil { + log.Errorf("getApiProduct: %v", err) + return nil, newDbError(err) + } + details := makeCompanyDetails(com, appNames, attrs, priKey, priVal) + return &CompanySuccessResponse{ + Company: details, + Organization: org, + }, nil +} + +func (a *ApiManager) getApiProduct(org string, ids map[string]string) (*ApiProductSuccessResponse, *common.ErrorResponse) { valid, keyVals := parseIdentifiers(EndpointApiProduct, ids) if !valid { return nil, ErrInvalidPar @@ -178,14 +343,163 @@ return nil, newDbError(err) } - var prod *common.ApiProduct var attrs []common.Attribute - if len(prods) > 0 { - prod = &prods[0] - attrs = a.DbMan.GetKmsAttributes(prod.TenantId, prod.Id)[prod.Id] + if len(prods) == 0 { + return &ApiProductSuccessResponse{ + ApiProduct: nil, + Organization: org, + }, nil + } + prod := &prods[0] + attrs = a.DbMan.GetKmsAttributes(prod.TenantId, prod.Id)[prod.Id] + details, errRes := makeApiProductDetails(prod, attrs, priKey, priVal, secKey, secVal) + if errRes != nil { + return nil, errRes } - return makeApiProductDetails(prod, attrs, priKey, priVal, secKey, secVal) + return &ApiProductSuccessResponse{ + ApiProduct: details, + Organization: org, + }, nil +} + +func (a *ApiManager) getAppCredential(org string, ids map[string]string) (*AppCredentialSuccessResponse, *common.ErrorResponse) { + valid, keyVals := parseIdentifiers(EndpointApiProduct, ids) + if !valid { + return nil, ErrInvalidPar + } + priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], keyVals[2], keyVals[3] + + appCreds, err := a.DbMan.GetAppCredentials(priKey, priVal, secKey, secVal) + if err != nil { + log.Errorf("getAppCredential: %v", err) + return nil, newDbError(err) + } + + if len(appCreds) == 0 { + return &AppCredentialSuccessResponse{ + AppCredential: nil, + Organization: org, + }, nil + } + appCred := &appCreds[0] + attrs := a.DbMan.GetKmsAttributes(appCred.TenantId, appCred.Id)[appCred.Id] + apps, err := a.DbMan.GetApps(IdentifierAppId, appCred.AppId, "", "") + if err != nil { + log.Errorf("getAppCredential: %v", err) + return nil, newDbError(err) + } + + if len(apps) == 0 { + log.Errorf("getAppCredential: No App with id=%v", appCred.AppId) + return &AppCredentialSuccessResponse{ + AppCredential: nil, + Organization: org, + }, nil + } + app := &apps[0] + cd := a.getCredDetails(appCred, app.Status) + devStatus := "" + if app.DeveloperId != "" { + devStatus, err = a.DbMan.GetStatus(app.DeveloperId, AppTypeDeveloper) + if err != nil { + log.Errorf("getAppCredential error get status: %v", err) + return nil, newDbError(err) + } + } + //TODO: isValidKey + cks := makeConsumerKeyStatusDetails(app, cd, devStatus, "") + //TODO: redirectUris + details := makeAppCredentialDetails(appCred, cks, []string{}, attrs, priKey, priVal) + return &AppCredentialSuccessResponse{ + AppCredential: details, + Organization: org, + }, nil +} + +func (a *ApiManager) getApp(org string, ids map[string]string) (*AppSuccessResponse, *common.ErrorResponse) { + valid, keyVals := parseIdentifiers(EndpointApp, ids) + if !valid { + return nil, ErrInvalidPar + } + priKey, priVal, secKey, secVal := keyVals[0], keyVals[1], keyVals[2], keyVals[3] + + apps, err := a.DbMan.GetApps(priKey, priVal, secKey, secVal) + if err != nil { + log.Errorf("getApp: %v", err) + return nil, newDbError(err) + } + + var app *common.App + var attrs []common.Attribute + + if len(apps) == 0 { + return &AppSuccessResponse{ + App: nil, + Organization: org, + }, nil + } + + app = &apps[0] + attrs = a.DbMan.GetKmsAttributes(app.TenantId, app.Id)[app.Id] + prods, err := a.DbMan.GetApiProductNamesByAppId(app.Id) + if err != nil { + log.Errorf("getApp error getting productNames: %v", err) + return nil, newDbError(err) + } + parStatus, err := a.DbMan.GetStatus(app.ParentId, app.Type) + if err != nil { + log.Errorf("getApp error getting parent status: %v", err) + return nil, newDbError(err) + } + creds, err := a.DbMan.GetAppCredentials(IdentifierAppId, app.Id, "", "") + if err != nil { + log.Errorf("getApp error getting parent status: %v", err) + return nil, newDbError(err) + } + var credDetails []*CredentialDetails + for _, cred := range creds { + credDetails = append(credDetails, a.getCredDetails(&cred, app.Status)) + } + + details, errRes := makeAppDetails(app, parStatus, prods, credDetails, attrs, priKey, priVal, secKey, secVal) + if errRes != nil { + return nil, errRes + } + return &AppSuccessResponse{ + App: details, + Organization: org, + }, nil +} + +func makeConsumerKeyStatusDetails(app *common.App, c *CredentialDetails, devStatus, isValidKey string) *ConsumerKeyStatusDetails { + return &ConsumerKeyStatusDetails{ + AppCredential: c, + AppID: c.AppID, + AppName: app.Name, + AppStatus: app.Status, + AppType: app.Type, + DeveloperID: app.DeveloperId, + DeveloperStatus: devStatus, + IsValidKey: isValidKey, + } +} + +func makeAppCredentialDetails(ac *common.AppCredential, cks *ConsumerKeyStatusDetails, redirectUrl []string, attrs []common.Attribute, priKey, priVal string) *AppCredentialDetails { + return &AppCredentialDetails{ + AppID: ac.AppId, + AppName: cks.AppName, + Attributes: attrs, + ConsumerKey: ac.Id, + ConsumerKeyStatus: cks, + ConsumerSecret: ac.ConsumerSecret, + DeveloperID: cks.DeveloperID, + PrimaryIdentifierType: priKey, + PrimaryIdentifierValue: priVal, + RedirectUris: redirectUrl, //TODO + Scopes: common.JsonToStringArray(ac.Scopes), + Status: ac.Status, + } } func makeApiProductDetails(prod *common.ApiProduct, attrs []common.Attribute, priKey, priVal, secKey, secVal string) (*ApiProductDetails, *common.ErrorResponse) { @@ -196,37 +510,135 @@ return nil, newDataError(err) } a = &ApiProductDetails{ - APIProxies: common.JsonToStringArray(prod.Proxies), - APIResources: common.JsonToStringArray(prod.ApiResources), - ApprovalType: prod.ApprovalType, - Attributes: attrs, - CreatedAt: prod.CreatedAt, - CreatedBy: prod.CreatedBy, - Description: prod.Description, - DisplayName: prod.DisplayName, - Environments: common.JsonToStringArray(prod.Environments), - ID: prod.Id, - LastModifiedAt: prod.UpdatedAt, - LastModifiedBy: prod.UpdatedBy, - Name: prod.Name, - QuotaInterval: prod.QuotaInterval, - QuotaLimit: int64(quotaLimit), - QuotaTimeUnit: prod.QuotaTimeUnit, - Scopes: common.JsonToStringArray(prod.Scopes), + ApiProxies: common.JsonToStringArray(prod.Proxies), + ApiResources: common.JsonToStringArray(prod.ApiResources), + ApprovalType: prod.ApprovalType, + Attributes: attrs, + CreatedAt: prod.CreatedAt, + CreatedBy: prod.CreatedBy, + Description: prod.Description, + DisplayName: prod.DisplayName, + Environments: common.JsonToStringArray(prod.Environments), + ID: prod.Id, + LastModifiedAt: prod.UpdatedAt, + LastModifiedBy: prod.UpdatedBy, + Name: prod.Name, + QuotaInterval: prod.QuotaInterval, + QuotaLimit: int64(quotaLimit), + QuotaTimeUnit: prod.QuotaTimeUnit, + Scopes: common.JsonToStringArray(prod.Scopes), + PrimaryIdentifierType: priKey, + PrimaryIdentifierValue: priVal, + SecondaryIdentifierType: secKey, + SecondaryIdentifierValue: secVal, } } else { a = new(ApiProductDetails) } - - setResIdentifiers(a, priKey, priVal, secKey, secVal) return a, nil } -func setResIdentifiers(a *ApiProductDetails, priKey, priVal, secKey, secVal string) { - a.PrimaryIdentifierType = priKey - a.PrimaryIdentifierValue = priVal - a.SecondaryIdentifierType = secKey - a.SecondaryIdentifierValue = secVal +func makeAppDetails(app *common.App, parentStatus string, prods []string, creds []*CredentialDetails, attrs []common.Attribute, priKey, priVal, secKey, secVal string) (*AppDetails, *common.ErrorResponse) { + var a *AppDetails + if app != nil { + a = &AppDetails{ + AccessType: app.AccessType, + ApiProducts: prods, + AppCredentials: creds, + AppFamily: app.AppFamily, + AppParentID: app.ParentId, + AppParentStatus: parentStatus, + AppType: app.Type, + Attributes: attrs, + CallbackUrl: app.CallbackUrl, + CreatedAt: app.CreatedAt, + CreatedBy: app.CreatedBy, + DisplayName: app.DisplayName, + Id: app.Id, + KeyExpiresIn: "", //TODO + LastModifiedAt: app.UpdatedAt, + LastModifiedBy: app.UpdatedBy, + Name: app.Name, + Scopes: []string{}, //TODO + Status: app.Status, + PrimaryIdentifierType: priKey, + PrimaryIdentifierValue: priVal, + SecondaryIdentifierType: secKey, + SecondaryIdentifierValue: secVal, + } + } else { + a = new(AppDetails) + } + return a, nil +} + +func makeCompanyDetails(com *common.Company, appNames []string, attrs []common.Attribute, priKey, priVal string) *CompanyDetails { + return &CompanyDetails{ + Apps: appNames, + Attributes: attrs, + CreatedAt: com.CreatedAt, + CreatedBy: com.CreatedBy, + DisplayName: com.DisplayName, + ID: com.Id, + LastModifiedAt: com.UpdatedAt, + LastModifiedBy: com.UpdatedBy, + Name: com.Name, + PrimaryIdentifierType: priKey, + PrimaryIdentifierValue: priVal, + Status: com.Status, + } +} + +func makeDevDetails(dev *common.Developer, appNames []string, comNames []string, attrs []common.Attribute, priKey, priVal string) *DeveloperDetails { + return &DeveloperDetails{ + Apps: appNames, + Attributes: attrs, + Companies: comNames, + CreatedAt: dev.CreatedAt, + CreatedBy: dev.CreatedBy, + Email: dev.Email, + FirstName: dev.FirstName, + ID: dev.Id, + LastModifiedAt: dev.UpdatedAt, + LastModifiedBy: dev.UpdatedBy, + LastName: dev.LastName, + Password: dev.Password, + PrimaryIdentifierType: priKey, + PrimaryIdentifierValue: priVal, + Status: dev.Status, + UserName: dev.UserName, + } +} + +func makeComDevDetails(comDev *common.CompanyDeveloper, comName, devEmail, priKey, priVal string) *CompanyDeveloperDetails { + return &CompanyDeveloperDetails{ + CompanyName: comName, + CreatedAt: comDev.CreatedAt, + CreatedBy: comDev.CreatedBy, + DeveloperEmail: devEmail, + LastModifiedAt: comDev.UpdatedAt, + LastModifiedBy: comDev.UpdatedBy, + PrimaryIdentifierType: priKey, + PrimaryIdentifierValue: priVal, + Roles: common.JsonToStringArray(comDev.Roles), + } +} + +func (a *ApiManager) getCredDetails(cred *common.AppCredential, appStatus string) *CredentialDetails { + + return &CredentialDetails{ + ApiProductReferences: []string{}, //TODO + AppID: cred.AppId, + AppStatus: appStatus, + Attributes: a.DbMan.GetKmsAttributes(cred.TenantId, cred.Id)[cred.Id], + ConsumerKey: cred.Id, + ConsumerSecret: cred.ConsumerSecret, + ExpiresAt: cred.ExpiresAt, + IssuedAt: cred.IssuedAt, + MethodType: cred.MethodType, + Scopes: common.JsonToStringArray(cred.Scopes), + Status: cred.Status, + } } func parseIdentifiers(endpoint string, ids map[string]string) (valid bool, keyVals []string) {
diff --git a/accessEntity/api_response.go b/accessEntity/api_response.go index 07b3f49..ac8930f 100644 --- a/accessEntity/api_response.go +++ b/accessEntity/api_response.go
@@ -2,12 +2,54 @@ import "github.com/apid/apidVerifyApiKey/common" +type ApiProductSuccessResponse struct { + // api product + ApiProduct *ApiProductDetails `json:"apiProduct,omitempty"` + // Organization Identifier/Name + Organization string `json:"organization,omitempty"` +} + +type AppCredentialSuccessResponse struct { + // app credential + AppCredential *AppCredentialDetails `json:"appCredential,omitempty"` + // Organization Identifier/Name + Organization string `json:"organization,omitempty"` +} + +type AppSuccessResponse struct { + // app + App *AppDetails `json:"app,omitempty"` + // Organization Identifier/Name + Organization string `json:"organization,omitempty"` +} + +type CompanyDevelopersSuccessResponse struct { + // company developers + CompanyDevelopers []*CompanyDeveloperDetails `json:"companyDevelopers"` + // Organization Identifier/Name + Organization string `json:"organization,omitempty"` +} + +type CompanySuccessResponse struct { + // company + Company *CompanyDetails `json:"company,omitempty"` + // Organization Identifier/Name + Organization string `json:"organization,omitempty"` +} + +type DeveloperSuccessResponse struct { + // developer + Developer *DeveloperDetails `json:"developer,omitempty"` + // Organization Identifier/Name + Organization string `json:"organization,omitempty"` +} + type ApiProductDetails struct { // api proxies - APIProxies []string `json:"apiProxies,omitempty"` + ApiProxies []string `json:"apiProxies,omitempty"` // api resources - APIResources []string `json:"apiResources,omitempty"` + ApiResources []string `json:"apiResources,omitempty"` // approval type ApprovalType string `json:"approvalType,omitempty"` @@ -66,3 +108,220 @@ // secondary identifier value SecondaryIdentifierValue string `json:"secondaryIdentifierValue,omitempty"` } + +type AppDetails struct { + + // access type + AccessType string `json:"accessType,omitempty"` + // api products + ApiProducts []string `json:"apiProducts"` + // app credentials + AppCredentials []*CredentialDetails `json:"appCredentials"` + // app family + AppFamily string `json:"appFamily,omitempty"` + // app parent Id + AppParentID string `json:"appParentId,omitempty"` + // app parent status + AppParentStatus string `json:"appParentStatus,omitempty"` + // Developer or Company + AppType string `json:"appType,omitempty"` + // Attributes associated with the app. + Attributes []common.Attribute `json:"attributes"` + // callback Url + CallbackUrl string `json:"callbackUrl,omitempty"` + // ISO-8601 + CreatedAt string `json:"createdAt,omitempty"` + // created by + CreatedBy string `json:"createdBy,omitempty"` + // display name + DisplayName string `json:"displayName,omitempty"` + // id + Id string `json:"id,omitempty"` + // key expires in + KeyExpiresIn string `json:"keyExpiresIn,omitempty"` + // ISO-8601 + LastModifiedAt string `json:"lastModifiedAt,omitempty"` + // last modified by + LastModifiedBy string `json:"lastModifiedBy,omitempty"` + // name + Name string `json:"name,omitempty"` + // primary identifier type + PrimaryIdentifierType string `json:"primaryIdentifierType,omitempty"` + // primary identifier value + PrimaryIdentifierValue string `json:"primaryIdentifierValue,omitempty"` + // scopes + Scopes []string `json:"scopes"` + // secondary identifier type + SecondaryIdentifierType string `json:"secondaryIdentifierType,omitempty"` + // secondary identifier value + SecondaryIdentifierValue string `json:"secondaryIdentifierValue,omitempty"` + // status + Status string `json:"status,omitempty"` +} + +type CredentialDetails struct { + // api product references + ApiProductReferences []string `json:"apiProductReferences"` + // app Id + AppID string `json:"appId,omitempty"` + // app status + AppStatus string `json:"appStatus,omitempty"` + // Attributes associated with the client Id. + Attributes []common.Attribute `json:"attributes"` + // consumer key + ConsumerKey string `json:"consumerKey,omitempty"` + // consumer secret + ConsumerSecret string `json:"consumerSecret,omitempty"` + // expires at + ExpiresAt string `json:"expiresAt,omitempty"` + // issued at + IssuedAt string `json:"issuedAt,omitempty"` + // method type + MethodType string `json:"methodType,omitempty"` + // scopes + Scopes []string `json:"scopes"` + // status + Status string `json:"status,omitempty"` +} + +type AppCredentialDetails struct { + // app Id + AppID string `json:"appId,omitempty"` + // app name + AppName string `json:"appName,omitempty"` + // Attributes associated with the app credential + Attributes []common.Attribute `json:"attributes"` + // consumer key + ConsumerKey string `json:"consumerKey,omitempty"` + // consumer key status + ConsumerKeyStatus *ConsumerKeyStatusDetails `json:"consumerKeyStatus,omitempty"` + // consumer secret + ConsumerSecret string `json:"consumerSecret,omitempty"` + // developer Id + DeveloperID string `json:"developerId,omitempty"` + // primary identifier type + PrimaryIdentifierType string `json:"primaryIdentifierType,omitempty"` + // primary identifier value + PrimaryIdentifierValue string `json:"primaryIdentifierValue,omitempty"` + // redirect uris + RedirectUris []string `json:"redirectURIs"` + // scopes + Scopes []string `json:"scopes"` + // TODO: no secondary identifier type + SecondaryIdentifierType string `json:"secondaryIdentifierType,omitempty"` + // TODO: no secondary identifier value + SecondaryIdentifierValue string `json:"secondaryIdentifierValue,omitempty"` + // status + Status string `json:"status,omitempty"` +} + +type ConsumerKeyStatusDetails struct { + + // app credential + AppCredential *CredentialDetails `json:"appCredential,omitempty"` + + // app Id + AppID string `json:"appId,omitempty"` + + // app name + AppName string `json:"appName,omitempty"` + + // app status + AppStatus string `json:"appStatus,omitempty"` + + // app type + AppType string `json:"appType,omitempty"` + + // developer Id + DeveloperID string `json:"developerId,omitempty"` + + // developer status + DeveloperStatus string `json:"developerStatus,omitempty"` + + // is valid key + IsValidKey string `json:"isValidKey,omitempty"` +} + +type CompanyDetails struct { + + // apps + Apps []string `json:"apps"` + // Attributes associated with the company. + Attributes []common.Attribute `json:"attributes"` + // ISO-8601 + CreatedAt string `json:"createdAt,omitempty"` + // created by + CreatedBy string `json:"createdBy,omitempty"` + // display name + DisplayName string `json:"displayName,omitempty"` + // id + ID string `json:"id,omitempty"` + // ISO-8601 + LastModifiedAt string `json:"lastModifiedAt,omitempty"` + // last modified by + LastModifiedBy string `json:"lastModifiedBy,omitempty"` + // name + Name string `json:"name,omitempty"` + // primary identifier type + PrimaryIdentifierType string `json:"primaryIdentifierType,omitempty"` + // primary identifier value + PrimaryIdentifierValue string `json:"primaryIdentifierValue,omitempty"` + // status + Status string `json:"status,omitempty"` +} + +type CompanyDeveloperDetails struct { + // company name + CompanyName string `json:"companyName,omitempty"` + // ISO-8601 + CreatedAt string `json:"createdAt,omitempty"` + // created by + CreatedBy string `json:"createdBy,omitempty"` + // developer email + DeveloperEmail string `json:"developerEmail,omitempty"` + // ISO-8601 + LastModifiedAt string `json:"lastModifiedAt,omitempty"` + // last modified by + LastModifiedBy string `json:"lastModifiedBy,omitempty"` + // primary identifier type + PrimaryIdentifierType string `json:"primaryIdentifierType,omitempty"` + // primary identifier value + PrimaryIdentifierValue string `json:"primaryIdentifierValue,omitempty"` + // roles + Roles []string `json:"roles"` +} + +type DeveloperDetails struct { + // apps + Apps []string `json:"apps"` + // Attributes associated with the developer. + Attributes []common.Attribute `json:"attributes"` + // companies + Companies []string `json:"companies"` + // ISO-8601 + CreatedAt string `json:"createdAt,omitempty"` + // created by + CreatedBy string `json:"createdBy,omitempty"` + // email + Email string `json:"email,omitempty"` + // first name + FirstName string `json:"firstName,omitempty"` + // id + ID string `json:"id,omitempty"` + // ISO-8601 + LastModifiedAt string `json:"lastModifiedAt,omitempty"` + // last modified by + LastModifiedBy string `json:"lastModifiedBy,omitempty"` + // last name + LastName string `json:"lastName,omitempty"` + // password + Password string `json:"password,omitempty"` + // primary identifier type + PrimaryIdentifierType string `json:"primaryIdentifierType,omitempty"` + // primary identifier value + PrimaryIdentifierValue string `json:"primaryIdentifierValue,omitempty"` + // status + Status string `json:"status,omitempty"` + // user name + UserName string `json:"userName,omitempty"` +}
diff --git a/accessEntity/data.go b/accessEntity/data.go index dabb2a3..0307c7a 100644 --- a/accessEntity/data.go +++ b/accessEntity/data.go
@@ -14,26 +14,183 @@ package accessEntity import ( + "database/sql" "github.com/apid/apidVerifyApiKey/common" "strings" ) const ( sql_select_api_product = `SELECT * FROM kms_api_product AS ap ` - sql_select_api = ` - SELECT * FROM kms_api_product AS ap WHERE ap.id IN ( - SELECT apiprdt_id FROM kms_app_credential_apiproduct_mapper AS acm WHERE acm.app_id IN ( - SELECT a.id FROM kms_app AS a WHERE a.name IN ('apstest') - ) - ); - - ` + sql_select_org = `SELECT * FROM kms_organization AS o WHERE o.tenant_id=$1 LIMIT 1;` ) type DbManager struct { common.DbManager } +func (d *DbManager) GetOrgName(tenantId string) (string, error) { + row := d.GetDb().QueryRow(sql_select_org, tenantId) + org := sql.NullString{} + if err := row.Scan(&org); err != nil { + return "", err + } + if org.Valid { + return org.String, nil + } + return "", nil +} + +func (d *DbManager) GetApiProductNamesByAppId(appId string) ([]string, error) { + query := selectApiProductsById( + selectAppCredentialMapperByAppId( + "'"+appId+"'", + "apiprdt_id", + ), + "name", + ) + rows, err := d.GetDb().Query(query) + if err != nil { + return nil, err + } + defer rows.Close() + var names []string + for rows.Next() { + name := sql.NullString{} + err = rows.Scan(&name) + if err != nil { + return nil, err + } + if name.Valid { + names = append(names, name.String) + } + } + return names, nil +} + +func (d *DbManager) GetAppNamesByComId(comId string) ([]string, error) { + query := selectAppByComId( + "'"+comId+"'", + "name", + ) + rows, err := d.GetDb().Query(query) + if err != nil { + return nil, err + } + defer rows.Close() + var names []string + for rows.Next() { + name := sql.NullString{} + err = rows.Scan(&name) + if err != nil { + return nil, err + } + if name.Valid { + names = append(names, name.String) + } + } + return names, nil +} + +func (d *DbManager) GetComNameByComId(comId string) (string, error) { + query := selectCompanyByComId( + "'"+comId+"'", + "name", + ) + name := sql.NullString{} + err := d.GetDb().QueryRow(query).Scan(&name) + if err != nil || !name.Valid { + return "", err + } + return name.String, nil +} + +func (d *DbManager) GetDevEmailByDevId(devId string) (string, error) { + query := selectDeveloperById( + "'"+devId+"'", + "email", + ) + email := sql.NullString{} + err := d.GetDb().QueryRow(query).Scan(&email) + if err != nil || !email.Valid { + return "", err + } + return email.String, nil +} + +func (d *DbManager) GetComNamesByDevId(devId string) ([]string, error) { + query := selectCompanyByComId( + selectCompanyDeveloperByDevId( + "'"+devId+"'", + "company_id", + ), + "name", + ) + rows, err := d.GetDb().Query(query) + if err != nil { + return nil, err + } + defer rows.Close() + var names []string + for rows.Next() { + name := sql.NullString{} + err = rows.Scan(&name) + if err != nil { + return nil, err + } + if name.Valid { + names = append(names, name.String) + } + } + return names, nil +} + +func (d *DbManager) GetAppNamesByDevId(devId string) ([]string, error) { + query := selectAppByDevId( + "'"+devId+"'", + "name", + ) + rows, err := d.GetDb().Query(query) + if err != nil { + return nil, err + } + defer rows.Close() + var names []string + for rows.Next() { + name := sql.NullString{} + err = rows.Scan(&name) + if err != nil { + return nil, err + } + if name.Valid { + names = append(names, name.String) + } + } + return names, nil +} + +func (d *DbManager) GetStatus(id, t string) (string, error) { + var query string + switch t { + case AppTypeDeveloper: + query = selectDeveloperById( + "'"+id+"'", + "status", + ) + case AppTypeCompany: + query = selectDeveloperById( + "'"+id+"'", + "status", + ) + } + status := sql.NullString{} + err := d.GetDb().QueryRow(query).Scan(&status) + if err != nil || !status.Valid { + return "", err + } + + return status.String, nil +} + func (d *DbManager) GetApiProducts(priKey, priVal, secKey, secVal string) (apiProducts []common.ApiProduct, err error) { if priKey == IdentifierAppId { apiProducts, err = d.getApiProductsByAppId(priVal) @@ -74,6 +231,67 @@ return } +func (d *DbManager) GetApps(priKey, priVal, secKey, secVal string) (apps []common.App, err error) { + switch priKey { + case IdentifierAppId: + return d.getAppByAppId(priVal) + case IdentifierAppName: + switch secKey { + case IdentifierDeveloperEmail: + return d.getAppByAppName(priVal, secVal, "", "") + case IdentifierDeveloperId: + return d.getAppByAppName(priVal, "", secVal, "") + case IdentifierCompanyName: + return d.getAppByAppName(priVal, "", "", secVal) + case "": + return d.getAppByAppName(priVal, "", "", "") + } + case IdentifierConsumerKey: + return d.getAppByConsumerKey(priVal) + } + return +} + +func (d *DbManager) GetCompanies(priKey, priVal, secKey, secVal string) (companies []common.Company, err error) { + switch priKey { + case IdentifierAppId: + return d.getCompanyByAppId(priVal) + case IdentifierCompanyName: + return d.getCompanyByName(priVal) + case IdentifierConsumerKey: + return d.getCompanyByConsumerKey(priVal) + } + return +} + +func (d *DbManager) GetCompanyDevelopers(priKey, priVal, secKey, secVal string) (companyDevelopers []common.CompanyDeveloper, err error) { + if priKey == IdentifierCompanyName { + return d.getCompanyDeveloperByComName(priVal) + } + return +} + +func (d *DbManager) GetAppCredentials(priKey, priVal, secKey, secVal string) (appCredentials []common.AppCredential, err error) { + if priKey == IdentifierConsumerKey { + return d.getAppCredentialByConsumerKey(priVal) + } + return +} + +func (d *DbManager) GetDevelopers(priKey, priVal, secKey, secVal string) (developers []common.Developer, err error) { + switch priKey { + case IdentifierAppId: + return d.getDeveloperByAppId(priVal) + case IdentifierDeveloperEmail: + return d.getDeveloperByEmail(priVal) + case IdentifierConsumerKey: + return d.getDeveloperByConsumerKey(priVal) + case IdentifierDeveloperId: + return d.getDeveloperById(priVal) + } + return +} + func (d *DbManager) getApiProductsByName(apiProdName string) (apiProducts []common.ApiProduct, err error) { err = d.GetDb().QueryStructs(&apiProducts, sql_select_api_product+`WHERE ap.name = $1;`, @@ -84,8 +302,8 @@ func (d *DbManager) getApiProductsByAppId(appId string) (apiProducts []common.ApiProduct, err error) { cols := []string{"*"} - query := selectApiProductsByIds( - selectAppCredentialMapperByAppIds( + query := selectApiProductsById( + selectAppCredentialMapperByAppId( "'"+appId+"'", "apiprdt_id", ), @@ -98,12 +316,9 @@ func (d *DbManager) getApiProductsByConsumerKey(consumerKey string) (apiProducts []common.ApiProduct, err error) { cols := []string{"*"} - query := selectApiProductsByIds( - selectAppCredentialMapperByAppIds( - selectAppCredentialByConsumerKey( - "'"+consumerKey+"'", - "app_id", - ), + query := selectApiProductsById( + selectAppCredentialMapperByConsumerKey( + "'"+consumerKey+"'", "apiprdt_id", ), cols..., @@ -148,8 +363,8 @@ ) } - query := selectApiProductsByIds( - selectAppCredentialMapperByAppIds( + query := selectApiProductsById( + selectAppCredentialMapperByAppId( appQuery, "apiprdt_id", ), @@ -160,7 +375,191 @@ return } -func selectApiProductsByIds(idQuery string, colNames ...string) string { +func (d *DbManager) getAppByAppId(id string) (apps []common.App, err error) { + cols := []string{"*"} + query := selectAppById( + "'"+id+"'", + cols..., + ) + log.Debugf("getAppByAppId: %v", query) + err = d.GetDb().QueryStructs(&apps, query) + return +} + +func (d *DbManager) getAppByAppName(appName, devEmail, devId, comName string) (apps []common.App, err error) { + cols := []string{"*"} + var query string + switch { + case devEmail != "": + query = selectAppByNameAndDeveloperId( + "'"+appName+"'", + selectDeveloperByEmail( + "'"+devEmail+"'", + "id", + ), + cols..., + ) + case devId != "": + query = selectAppByNameAndDeveloperId( + "'"+appName+"'", + "'"+devId+"'", + cols..., + ) + case comName != "": + query = selectAppByNameAndCompanyId( + "'"+appName+"'", + selectCompanyByName( + "'"+comName+"'", + "id", + ), + cols..., + ) + default: + query = selectAppByName( + "'"+appName+"'", + cols..., + ) + } + log.Debugf("getAppByAppName: %v", query) + err = d.GetDb().QueryStructs(&apps, query) + return +} + +func (d *DbManager) getAppByConsumerKey(consumerKey string) (apps []common.App, err error) { + cols := []string{"*"} + query := selectAppById( + selectAppCredentialMapperByConsumerKey( + "'"+consumerKey+"'", + "app_id", + ), + cols..., + ) + log.Debugf("getAppByConsumerKey: %v", query) + err = d.GetDb().QueryStructs(&apps, query) + return +} + +func (d *DbManager) getAppCredentialByConsumerKey(consumerKey string) (appCredentials []common.AppCredential, err error) { + cols := []string{"*"} + query := selectAppCredentialByConsumerKey( + "'"+consumerKey+"'", + cols..., + ) + log.Debugf("getAppCredentialByConsumerKey: %v", query) + err = d.GetDb().QueryStructs(&appCredentials, query) + return +} + +func (d *DbManager) getCompanyByAppId(appId string) (companies []common.Company, err error) { + cols := []string{"*"} + query := selectCompanyByComId( + selectAppById( + "'"+appId+"'", + "company_id", + ), + cols..., + ) + log.Debugf("getCompanyByAppId: %v", query) + err = d.GetDb().QueryStructs(&companies, query) + return +} + +func (d *DbManager) getCompanyByName(name string) (companies []common.Company, err error) { + cols := []string{"*"} + query := selectCompanyByName( + "'"+name+"'", + cols..., + ) + log.Debugf("getCompanyByName: %v", query) + err = d.GetDb().QueryStructs(&companies, query) + return +} + +func (d *DbManager) getCompanyByConsumerKey(consumerKey string) (companies []common.Company, err error) { + cols := []string{"*"} + query := selectCompanyByComId( + selectAppById( + selectAppCredentialMapperByConsumerKey( + "'"+consumerKey+"'", + "app_id", + ), + "company_id", + ), + cols..., + ) + log.Debugf("getCompanyByConsumerKey: %v", query) + err = d.GetDb().QueryStructs(&companies, query) + return +} + +func (d *DbManager) getCompanyDeveloperByComName(comName string) (companyDevelopers []common.CompanyDeveloper, err error) { + cols := []string{"*"} + query := selectCompanyDeveloperByComId( + selectCompanyByName( + "'"+comName+"'", + "id", + ), + cols..., + ) + log.Debugf("getCompanyDeveloperByComName: %v", query) + err = d.GetDb().QueryStructs(&companyDevelopers, query) + return +} + +func (d *DbManager) getDeveloperByAppId(appId string) (developers []common.Developer, err error) { + cols := []string{"*"} + query := selectDeveloperById( + selectAppById( + "'"+appId+"'", + "developer_id", + ), + cols..., + ) + log.Debugf("getDeveloperByAppId: %v", query) + err = d.GetDb().QueryStructs(&developers, query) + return +} + +func (d *DbManager) getDeveloperByConsumerKey(consumerKey string) (developers []common.Developer, err error) { + cols := []string{"*"} + query := selectDeveloperById( + selectAppById( + selectAppCredentialMapperByConsumerKey( + "'"+consumerKey+"'", + "app_id", + ), + "developer_id", + ), + cols..., + ) + log.Debugf("getDeveloperByConsumerKey: %v", query) + err = d.GetDb().QueryStructs(&developers, query) + return +} + +func (d *DbManager) getDeveloperByEmail(email string) (developers []common.Developer, err error) { + cols := []string{"*"} + query := selectDeveloperByEmail( + "'"+email+"'", + cols..., + ) + log.Debugf("getDeveloperByEmail: %v", query) + err = d.GetDb().QueryStructs(&developers, query) + return +} + +func (d *DbManager) getDeveloperById(id string) (developers []common.Developer, err error) { + cols := []string{"*"} + query := selectDeveloperById( + "'"+id+"'", + cols..., + ) + log.Debugf("getDeveloperById: %v", query) + err = d.GetDb().QueryStructs(&developers, query) + return +} + +func selectApiProductsById(idQuery string, colNames ...string) string { query := "SELECT " + strings.Join(colNames, ",") + " FROM kms_api_product AS ap WHERE ap.id IN (" + @@ -170,7 +569,7 @@ return query } -func selectAppCredentialMapperByAppIds(idQuery string, colNames ...string) string { +func selectAppCredentialMapperByAppId(idQuery string, colNames ...string) string { query := "SELECT " + strings.Join(colNames, ",") + " FROM kms_app_credential_apiproduct_mapper AS acm WHERE acm.app_id IN (" + @@ -179,6 +578,15 @@ return query } +func selectAppCredentialMapperByConsumerKey(keyQuery string, colNames ...string) string { + query := "SELECT " + + strings.Join(colNames, ",") + + " FROM kms_app_credential_apiproduct_mapper AS acm WHERE acm.appcred_id IN (" + + keyQuery + + ")" + return query +} + func selectAppByName(nameQuery string, colNames ...string) string { query := "SELECT " + strings.Join(colNames, ",") + @@ -188,6 +596,33 @@ return query } +func selectAppById(appIdQuery string, colNames ...string) string { + query := "SELECT " + + strings.Join(colNames, ",") + + " FROM kms_app AS a WHERE a.id IN (" + + appIdQuery + + ")" + return query +} + +func selectAppByComId(comIdQuery string, colNames ...string) string { + query := "SELECT " + + strings.Join(colNames, ",") + + " FROM kms_app AS a WHERE a.company_id IN (" + + comIdQuery + + ")" + return query +} + +func selectAppByDevId(devIdQuery string, colNames ...string) string { + query := "SELECT " + + strings.Join(colNames, ",") + + " FROM kms_app AS a WHERE a.developer_id IN (" + + devIdQuery + + ")" + return query +} + func selectAppByNameAndDeveloperId(nameQuery string, developerIdQuery string, colNames ...string) string { query := selectAppByName(nameQuery, colNames...) + " AND developer_id IN (" + @@ -213,6 +648,15 @@ return query } +func selectDeveloperById(idQuery string, colNames ...string) string { + query := "SELECT " + + strings.Join(colNames, ",") + + " FROM kms_developer AS dev WHERE dev.id IN (" + + idQuery + + ")" + return query +} + func selectCompanyByName(nameQuery string, colNames ...string) string { query := "SELECT " + strings.Join(colNames, ",") + @@ -222,10 +666,37 @@ return query } +func selectCompanyByComId(comIdQuery string, colNames ...string) string { + query := "SELECT " + + strings.Join(colNames, ",") + + " FROM kms_company AS com WHERE com.id IN (" + + comIdQuery + + ")" + return query +} + +func selectCompanyDeveloperByComId(comIdQuery string, colNames ...string) string { + query := "SELECT " + + strings.Join(colNames, ",") + + " FROM kms_company_developer AS cd WHERE cd.company_id IN (" + + comIdQuery + + ")" + return query +} + +func selectCompanyDeveloperByDevId(devIdQuery string, colNames ...string) string { + query := "SELECT " + + strings.Join(colNames, ",") + + " FROM kms_company_developer AS cd WHERE cd.developer_id IN (" + + devIdQuery + + ")" + return query +} + func selectAppCredentialByConsumerKey(consumerQuery string, colNames ...string) string { query := "SELECT " + strings.Join(colNames, ",") + - " FROM kms_app_credential AS ac WHERE ac.consumer_secret IN (" + + " FROM kms_app_credential AS ac WHERE ac.id IN (" + consumerQuery + ")" return query
diff --git a/accessEntity/data_test.sql b/accessEntity/data_test.sql index 9a774df..26a877b 100644 --- a/accessEntity/data_test.sql +++ b/accessEntity/data_test.sql
@@ -30,11 +30,11 @@ INSERT INTO "kms_api_product" VALUES('07419482-e5a1-4fd0-9d78-3560ba522b44','515211e9','ApigeenTestApp3','ApigeenTestApp3','','{/}','AUTO','{}','{}','{prod,test}','','',NULL,'2017-09-20 22:29:11.482+00:00','haoming@apid.git','2017-09-20 22:29:11.482+00:00','haoming@apid.git','515211e9'); INSERT INTO "kms_api_product" VALUES('db90a25a-15c8-42ad-96c1-63ed9682b5a9','515211e9','apigee-remote-proxy','apigee-remote-proxy','','{/**,/}','AUTO','{""}','{apigee-remote-proxy}','{prod,test}','','',NULL,'2017-09-20 23:05:09.234+00:00','haoming@apid.git','2017-09-20 23:05:09.234+00:00','haoming@apid.git','515211e9'); CREATE TABLE kms_app_credential (id text,tenant_id text,consumer_secret text,app_id text,method_type text,status text,issued_at blob,expires_at blob,app_status text,scopes text,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (id,tenant_id)); -INSERT INTO "kms_app_credential" VALUES('qUQLHViLHm9a4L623DSnmZohz6m7C83C','515211e9','abcd','408ad853-3fa0-402f-90ee-103de98d71a5','','APPROVED','2017-08-18 22:13:18.35+00:00','','','{}','2017-08-18 22:13:18.35+00:00','-NA-','2017-08-18 22:13:18.352+00:00','-NA-','515211e9'); -INSERT INTO "kms_app_credential" VALUES('00A0RcOti8kEtstbt5knxbRXFpIUGOMP','515211e9','dcba','ae053aee-f12d-4591-84ef-2e6ae0d4205d','','APPROVED','2017-09-20 23:05:59.148+00:00','','','{}','2017-09-20 23:05:59.148+00:00','-NA-','2017-09-20 23:05:59.151+00:00','-NA-','515211e9'); +INSERT INTO "kms_app_credential" VALUES('abcd','515211e9','secret1','408ad853-3fa0-402f-90ee-103de98d71a5','','APPROVED','2017-08-18 22:13:18.35+00:00','','','{}','2017-08-18 22:13:18.35+00:00','-NA-','2017-08-18 22:13:18.352+00:00','-NA-','515211e9'); +INSERT INTO "kms_app_credential" VALUES('dcba','515211e9','secret2','ae053aee-f12d-4591-84ef-2e6ae0d4205d','','APPROVED','2017-09-20 23:05:59.148+00:00','','','{}','2017-09-20 23:05:59.148+00:00','-NA-','2017-09-20 23:05:59.151+00:00','-NA-','515211e9'); CREATE TABLE kms_app_credential_apiproduct_mapper (tenant_id text,appcred_id text,app_id text,apiprdt_id text,status text,_change_selector text, primary key (tenant_id,appcred_id,app_id,apiprdt_id)); -INSERT INTO "kms_app_credential_apiproduct_mapper" VALUES('515211e9','qUQLHViLHm9a4L623DSnmZohz6m7C83C','408ad853-3fa0-402f-90ee-103de98d71a5','b7e0970c-4677-4b05-8105-5ea59fdcf4e7','APPROVED','515211e9'); -INSERT INTO "kms_app_credential_apiproduct_mapper" VALUES('515211e9','00A0RcOti8kEtstbt5knxbRXFpIUGOMP','ae053aee-f12d-4591-84ef-2e6ae0d4205d','db90a25a-15c8-42ad-96c1-63ed9682b5a9','APPROVED','515211e9'); +INSERT INTO "kms_app_credential_apiproduct_mapper" VALUES('515211e9','abcd','408ad853-3fa0-402f-90ee-103de98d71a5','b7e0970c-4677-4b05-8105-5ea59fdcf4e7','APPROVED','515211e9'); +INSERT INTO "kms_app_credential_apiproduct_mapper" VALUES('515211e9','dcba','ae053aee-f12d-4591-84ef-2e6ae0d4205d','db90a25a-15c8-42ad-96c1-63ed9682b5a9','APPROVED','515211e9'); CREATE TABLE kms_organization (id text,name text,display_name text,type text,tenant_id text,customer_id text,description text,created_at blob,created_by text,updated_at blob,updated_by text,_change_selector text, primary key (id,tenant_id)); INSERT INTO "kms_organization" VALUES('e2cc4caf-40d6-4ecb-8149-ed32d04184b2','edgex01','edgex01','paid','515211e9','94cd5075-7f33-4afb-9545-a53a254277a1','','2017-08-16 22:16:06.544+00:00','foobar@google.com','2017-08-16 22:29:23.046+00:00','foobar@google.com','515211e9'); COMMIT;
diff --git a/accessEntity/interfaces.go b/accessEntity/interfaces.go index da5c25e..cdf4154 100644 --- a/accessEntity/interfaces.go +++ b/accessEntity/interfaces.go
@@ -12,5 +12,18 @@ type DbManagerInterface interface { common.DbManagerInterface + GetOrgName(tenantId string) (string, error) GetApiProducts(priKey, priVal, secKey, secVal string) (apiProducts []common.ApiProduct, err error) + GetApps(priKey, priVal, secKey, secVal string) (apps []common.App, err error) + GetCompanies(priKey, priVal, secKey, secVal string) (companies []common.Company, err error) + GetCompanyDevelopers(priKey, priVal, secKey, secVal string) (companyDevelopers []common.CompanyDeveloper, err error) + GetAppCredentials(priKey, priVal, secKey, secVal string) (appCredentials []common.AppCredential, err error) + GetDevelopers(priKey, priVal, secKey, secVal string) (developers []common.Developer, err error) + GetApiProductNamesByAppId(appId string) ([]string, error) + GetAppNamesByComId(comId string) ([]string, error) + GetComNamesByDevId(devId string) ([]string, error) + GetAppNamesByDevId(devId string) ([]string, error) + GetComNameByComId(comId string) (string, error) + GetDevEmailByDevId(devId string) (string, error) + GetStatus(id, t string) (string, error) }
diff --git a/common/data_structs.go b/common/data_structs.go index 13dc1e9..77c0911 100644 --- a/common/data_structs.go +++ b/common/data_structs.go
@@ -32,6 +32,7 @@ type ApiProduct struct { Id string `db:"id"` + TenantId string `db:"tenant_id"` Name string `db:"name"` DisplayName string `db:"display_name"` Description string `db:"description"` @@ -47,11 +48,11 @@ CreatedBy string `db:"created_by"` UpdatedAt string `db:"updated_at"` UpdatedBy string `db:"updated_by"` - TenantId string `db:"tenant_id"` } type App struct { Id string `db:"id"` + TenantId string `db:"tenant_id"` Name string `db:"name"` DisplayName string `db:"display_name"` AccessType string `db:"access_type"` @@ -67,3 +68,60 @@ UpdatedAt string `db:"updated_at"` UpdatedBy string `db:"updated_by"` } + +type AppCredential struct { + Id string `db:"id"` + TenantId string `db:"tenant_id"` + ConsumerSecret string `db:"consumer_secret"` + AppId string `db:"app_id"` + MethodType string `db:"method_type"` + Status string `db:"status"` + IssuedAt string `db:"issued_at"` + ExpiresAt string `db:"expires_at"` + AppStatus string `db:"app_status"` + Scopes string `db:"scopes"` + CreatedAt string `db:"created_at"` + CreatedBy string `db:"created_by"` + UpdatedAt string `db:"updated_at"` + UpdatedBy string `db:"updated_by"` +} + +type Company struct { + Id string `db:"id"` + TenantId string `db:"tenant_id"` + Name string `db:"name"` + DisplayName string `db:"display_name"` + Status string `db:"status"` + CreatedAt string `db:"created_at"` + CreatedBy string `db:"created_by"` + UpdatedAt string `db:"updated_at"` + UpdatedBy string `db:"updated_by"` +} + +type Developer struct { + Id string `db:"id"` + TenantId string `db:"tenant_id"` + UserName string `db:"username"` + FirstName string `db:"first_name"` + LastName string `db:"last_name"` + Password string `db:"password"` + Email string `db:"email"` + Status string `db:"status"` + EncryptedPassword string `db:"encrypted_password"` + Salt string `db:"salt"` + CreatedAt string `db:"created_at"` + CreatedBy string `db:"created_by"` + UpdatedAt string `db:"updated_at"` + UpdatedBy string `db:"updated_by"` +} + +type CompanyDeveloper struct { + TenantId string `db:"tenant_id"` + CompanyId string `db:"company_id"` + DeveloperId string `db:"developer_id"` + Roles string `db:"roles"` + CreatedAt string `db:"created_at"` + CreatedBy string `db:"created_by"` + UpdatedAt string `db:"updated_at"` + UpdatedBy string `db:"updated_by"` +}