package routes import ( "net/http" // "log" "ems.agt/features/aaaa" "ems.agt/features/cm" "ems.agt/features/dbrest" "ems.agt/features/file" "ems.agt/features/fm" "ems.agt/features/maintenance" "ems.agt/features/mml" "ems.agt/features/nbi" "ems.agt/features/pm" "ems.agt/features/security" "ems.agt/features/state" "ems.agt/features/trace" "ems.agt/lib/midware" "ems.agt/lib/services" "github.com/gorilla/mux" ) type Router struct { Method string Pattern string Handler http.HandlerFunc Middleware mux.MiddlewareFunc } var routers []Router // var ( // commonUriPattern = config.UriPrefix + "/{apiCategory}/{apiVersion}/elementType/{elementTypeValue}/objectType/{objectTypeValue}" // getUriPattern = config.UriPrefix + "/resourceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/{objectTypeValue}" // getStatePattern = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/systemState" // // // database management rest pattern, discard // // XormGetDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/elementType/{databaseName}/objectType/{tableName}" // // XormSelectDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/select/{databaseName}/{tableName}" // // XormInsertDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/insert/{databaseName}/{tableName}" // // XormUpdateDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/update/{databaseName}/{tableName}" // // XormDeleteDataUri = config.UriPrefix + "/databaseManagement/{apiVersion}/delete/{databaseName}/{tableName}" // // XormCommonUri = config.UriPrefix + "/databaseManagement/{apiVersion}/{databaseName}/{tableName}" // // alarm management // postAlarmPattern = config.UriPrefix + "/faultManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/alarms" // // performance management // postPerformancePattern = config.UriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/kpiReport/{index}" // measureTaskUri = config.UriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/measureTask" // measureReportUri = config.UriPrefix + "/performanceManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/measureReport" // // parameter config management // paramConfigUri = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/config/{paraName}" // // NE info // UriNeInfo = config.UriPrefix + "/systemManagement/{apiVersion}/elementType/{elementTypeValue}/objectType/neInfo" // ) func init() { Register("POST", security.UriOauthToken, security.LoginFromOMC, nil) Register("POST", security.UriOauthHandshake, security.HandshakeFromOMC, nil) Register("DELETE", security.UriOauthToken, security.LogoutFromOMC, nil) Register("OPTIONS", security.UriOauthToken, OptionsProc, nil) Register("OPTIONS", security.UriOauthHandshake, OptionsProc, nil) // System state Register("GET", state.UriSysState, state.GetStateFromNF, nil) Register("OPTIONS", state.UriSysState, OptionsProc, nil) Register("GET", state.UriSysState2, state.GetStateFromNF, nil) Register("OPTIONS", state.UriSysState, OptionsProc, nil) Register("OPTIONS", state.UriSysState2, OptionsProc, nil) Register("GET", state.UriSysInfoAll, state.GetAllSysinfoFromNF, nil) Register("GET", state.UriSysInfoOne, state.GetOneSysinfoFromNF, nil) Register("OPTIONS", state.UriSysInfoAll, OptionsProc, nil) Register("OPTIONS", state.UriSysInfoOne, OptionsProc, nil) Register("GET", state.UriLicenseInfoAll, state.GetAllLicenseInfoFromNF, nil) Register("GET", state.UriLicenseInfoOne, state.GetOneLicenseInfoFromNF, nil) Register("OPTIONS", state.UriLicenseInfoAll, OptionsProc, nil) Register("OPTIONS", state.UriLicenseInfoOne, OptionsProc, nil) // database management Register("GET", dbrest.XormGetDataUri, dbrest.DatabaseGetData, nil) Register("GET", dbrest.XormSelectDataUri, dbrest.DatabaseGetData, nil) Register("POST", dbrest.XormInsertDataUri, dbrest.DatabaseInsertData, nil) Register("PUT", dbrest.XormUpdateDataUri, dbrest.DatabaseUpdateData, nil) Register("DELETE", dbrest.XormDeleteDataUri, dbrest.DatabaseDeleteData, nil) // corss orgin domain Register("OPTIONS", dbrest.XormGetDataUri, OptionsProc, nil) Register("OPTIONS", dbrest.XormSelectDataUri, OptionsProc, nil) Register("OPTIONS", dbrest.XormInsertDataUri, OptionsProc, nil) Register("OPTIONS", dbrest.XormUpdateDataUri, OptionsProc, nil) Register("OPTIONS", dbrest.XormDeleteDataUri, OptionsProc, nil) Register("GET", dbrest.XormCommonUri, dbrest.DatabaseGetData, nil) Register("POST", dbrest.XormCommonUri, dbrest.DatabaseInsertData, nil) Register("PUT", dbrest.XormCommonUri, dbrest.DatabaseUpdateData, nil) Register("DELETE", dbrest.XormCommonUri, dbrest.DatabaseDeleteData, nil) Register("GET", dbrest.XormExtDataUri, dbrest.ExtDatabaseGetData, nil) Register("POST", dbrest.XormExtDataUri, dbrest.ExtDatabaseInsertData, nil) Register("PUT", dbrest.XormExtDataUri, dbrest.ExtDatabaseUpdateData, nil) Register("DELETE", dbrest.XormExtDataUri, dbrest.ExtDatabaseDeleteData, nil) // corss orgin domain Register("OPTIONS", dbrest.XormInsertDataUri, OptionsProc, nil) Register("OPTIONS", dbrest.XormUpdateDataUri, OptionsProc, nil) Register("OPTIONS", dbrest.XormDeleteDataUri, OptionsProc, nil) Register("OPTIONS", dbrest.XormCommonUri, OptionsProc, nil) // alarm restful Register Register("POST", fm.UriAlarms, fm.PostAlarmFromNF, nil) Register("Get", fm.UriAlarms, fm.GetAlarmFromNF, nil) Register("OPTIONS", fm.UriAlarms, OptionsProc, nil) // performance restful Register Register("POST", pm.PostPerformancePattern, pm.PostKPIReportFromNF, nil) Register("POST", pm.MeasureTaskUri, pm.PostMeasureTaskToNF, nil) Register("PUT", pm.MeasureTaskUri, pm.PutMeasureTaskToNF, nil) Register("DELETE", pm.MeasureTaskUri, pm.DeleteMeasureTaskToNF, nil) Register("PATCH", pm.MeasureTaskUri, pm.PatchMeasureTaskToNF, nil) Register("POST", pm.MeasureReportUri, pm.PostMeasureReportFromNF, nil) Register("POST", pm.MeasurementUri, pm.PostMeasurementFromNF, nil) Register("GET", pm.MeasurementUri, pm.GetMeasurementFromNF, nil) Register("OPTIONS", pm.MeasureTaskUri, OptionsProc, nil) // parameter config management Register("GET", cm.ParamConfigUri, cm.GetParamConfigFromNF, nil) Register("POST", cm.ParamConfigUri, cm.PostParamConfigToNF, nil) Register("PUT", cm.ParamConfigUri, cm.PutParamConfigToNF, nil) Register("DELETE", cm.ParamConfigUri, cm.DeleteParamConfigToNF, nil) Register("OPTIONS", cm.ParamConfigUri, OptionsProc, nil) // Get/Create/Modify/Delete NE info Register("GET", cm.UriNeInfo, cm.GetNeInfo, nil) Register("POST", cm.UriNeInfo, cm.PostNeInfo, nil) Register("PUT", cm.UriNeInfo, cm.PutNeInfo, nil) Register("DELETE", cm.UriNeInfo, cm.DeleteNeInfo, nil) Register("OPTIONS", cm.UriNeInfo, OptionsProc, nil) // Post MML command to NF Register("POST", mml.UriMML, mml.PostMMLToNF, nil) Register("OPTIONS", mml.UriMML, OptionsProc, nil) Register("POST", mml.UriOmMmlExt, mml.PostMMLToOMC, nil) Register("OPTIONS", mml.UriOmMmlExt, OptionsProc, nil) // Northbound Get NRM Register("GET", nbi.GetNRMUri, nbi.NBIGetNRMFromNF, nil) // Import/Export NF CM Register("GET", cm.NeCmUri, cm.ExportCmFromNF, nil) Register("POST", cm.NeCmUri, cm.ImportCmToNF, nil) Register("OPTIONS", cm.NeCmUri, OptionsProc, nil) Register("GET", cm.UriNeCmFile, cm.DownloadNeBackupFile, nil) Register("DELETE", cm.UriNeCmFile, cm.DeleteNeBackupFile, nil) Register("OPTIONS", cm.UriNeCmFile, OptionsProc, nil) // Software management Register("GET", cm.UriSoftware, cm.DownloadSoftwareFile, nil) Register("POST", cm.UriSoftware, cm.UploadSoftwareFile, nil) Register("DELETE", cm.UriSoftware, cm.DeleteSoftwareFile, nil) Register("OPTIONS", cm.UriSoftware, OptionsProc, nil) Register("POST", cm.UriSoftwareNE, cm.DistributeSoftwareToNF, nil) Register("PUT", cm.UriSoftwareNE, cm.ActiveSoftwareToNF, nil) Register("PATCH", cm.UriSoftwareNE, cm.RollBackSoftwareToNF, nil) Register("OPTIONS", cm.UriSoftwareNE, OptionsProc, nil) // License management Register("GET", cm.LicenseUri, cm.ExportCmFromNF, nil) Register("POST", cm.LicenseUri, cm.ImportCmToNF, nil) Register("DELETE", cm.LicenseUri, cm.ImportCmToNF, nil) Register("OPTIONS", cm.LicenseUri, OptionsProc, nil) Register("POST", cm.NeLicenseUri, cm.ExportCmFromNF, nil) Register("PUT", cm.NeLicenseUri, cm.ImportCmToNF, nil) Register("PATCH", cm.NeLicenseUri, cm.ImportCmToNF, nil) Register("OPTIONS", cm.NeLicenseUri, OptionsProc, nil) // Trace management Register("POST", trace.UriTraceTask, trace.PostTraceTaskToNF, nil) Register("PUT", trace.UriTraceTask, trace.PutTraceTaskToNF, nil) Register("DELETE", trace.UriTraceTask, trace.DeleteTraceTaskToNF, nil) Register("OPTIONS", trace.UriTraceTask, OptionsProc, nil) // file management Register("POST", file.UriFile, file.UploadFile, nil) Register("GET", file.UriFile, file.DownloadFile, nil) Register("DELETE", file.UriFile, file.DeleteFile, nil) Register("OPTIONS", file.UriFile, OptionsProc, nil) // AAAA Register("GET", aaaa.UriAAAASSO, aaaa.GetSSOFromAAAA, nil) // 系统维护 Register("GET", maintenance.Uri, maintenance.List, nil) Register("GET", maintenance.UriPref, maintenance.Pref, nil) Register("GET", maintenance.UriPrefLog, maintenance.PrefLog, nil) Register("GET", maintenance.UriSqlClient, maintenance.SqlClient, nil) Register("GET", maintenance.UriTop, maintenance.Top, nil) Register("PATCH", maintenance.UriTop, maintenance.TopOps, nil) } // To resolv rest POST/PUT/DELETE/PATCH cross domain func OptionsProc(w http.ResponseWriter, r *http.Request) { services.ResponseStatusOK200Null(w) } func NewRouter() *mux.Router { r := mux.NewRouter() // set custom handle for status 404/405 r.NotFoundHandler = services.CustomResponseNotFound404Handler() r.MethodNotAllowedHandler = services.CustomResponseMethodNotAllowed405Handler() r.Use(midware.LoggerTraceMiddleware) for _, router := range routers { r.Methods(router.Method). Path(router.Pattern). Handler(router.Handler) if router.Middleware != nil { r.Use(router.Middleware) } } return r } func Register(method, pattern string, handler http.HandlerFunc, middleware mux.MiddlewareFunc) { routers = append(routers, Router{method, pattern, handler, middleware}) }