last demo import - cleaned
This commit is contained in:
21
controllers/datacenter.go
Normal file
21
controllers/datacenter.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// DatacenterController is the controller in chrage of solr
|
||||
type DatacenterController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// Prepare checks for logged in Datacenter
|
||||
func (c *DatacenterController) Prepare() {
|
||||
|
||||
}
|
||||
|
||||
// Get implements simple solr Datacenter
|
||||
func (c *DatacenterController) Get() {
|
||||
|
||||
c.TplName = "datacenter.tpl"
|
||||
}
|
||||
31
controllers/default.go
Normal file
31
controllers/default.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
OCCatalog_cli "oc-search/api-client/oc-catalog"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// MainController is in charge of the main page
|
||||
type MainController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
var OCCatalogAPI *OCCatalog_cli.APIClient
|
||||
|
||||
func init() {
|
||||
// auth := context.WithValue(context.Background(), OCCatalog_cli.ContextAPIKey, OCCatalog_cli.APIKey{Key: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjE2MTI1OTI3MDIsInVzZXJfaWQiOiJ4ZCJ9.kTLb1FtpdnaobUpe5u9Jw8S7Cc6gf7ExmU4U3XMcC2o"})
|
||||
OCCatalogAPI = OCCatalog_cli.NewAPIClient(&OCCatalog_cli.Configuration{BasePath: "http://localhost:49618/v1",
|
||||
DefaultHeader: map[string]string{
|
||||
"authorization": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjE2MTMwMDI0NjAsInVzZXJfaWQiOiJhc2QifQ.TXT18aeulnCrtedKKFVaD0BapOTdVAFcJJdVS7zk0I8",
|
||||
},
|
||||
})
|
||||
//TODO: Test API is reachable or throw exception
|
||||
}
|
||||
|
||||
// Get provides the main page
|
||||
func (c *MainController) Get() {
|
||||
c.Data["Website"] = "beego.me"
|
||||
c.Data["Email"] = "astaxie@gmail.com"
|
||||
c.TplName = "index.tpl"
|
||||
}
|
||||
74
controllers/details.go
Normal file
74
controllers/details.go
Normal file
@@ -0,0 +1,74 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// DetailsController is the controller in chrage of solr
|
||||
type DetailsController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// @Title GetDetails
|
||||
// @Description Return details of a resource
|
||||
// @Success 200 {string} Cool
|
||||
// @router /data/:id [post]
|
||||
// @router /computing/:id [post]
|
||||
// @router /storage/:id [post]
|
||||
// @router /datacenter/:id [post]
|
||||
func (c *DetailsController) SubmitToWorkspace(id string) {
|
||||
rType := c.Ctx.Input.Params()["1"]
|
||||
|
||||
var err error
|
||||
|
||||
switch rType {
|
||||
case "data":
|
||||
case "computing":
|
||||
case "datacenter":
|
||||
case "storage":
|
||||
_, err = OCCatalogAPI.WorkspaceApi.WorkspaceControllerAddModelToWorkspace(context.Background(), id, rType)
|
||||
default:
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// @Title GetDetails
|
||||
// @Description Return details of a resource
|
||||
// @Success 200 {string} Cool
|
||||
// @router /data/:id [get]
|
||||
// @router /computing/:id [get]
|
||||
// @router /storage/:id [get]
|
||||
// @router /datacenter/:id [get]
|
||||
func (c *DetailsController) GetElementInfo(id string) {
|
||||
rType := c.Ctx.Input.Params()["1"]
|
||||
|
||||
var res interface{}
|
||||
var err error
|
||||
|
||||
switch rType {
|
||||
case "data":
|
||||
res, _, err = OCCatalogAPI.DataApi.DataControllerGetDataByID(context.Background(), id)
|
||||
case "computing":
|
||||
res, _, err = OCCatalogAPI.ComputingApi.ComputingControllerGetComputingByID(context.Background(), id)
|
||||
case "datacenter":
|
||||
res, _, err = OCCatalogAPI.DatacenterApi.DatacenterControllerGetOneDatacenter(context.Background(), id)
|
||||
case "storage":
|
||||
res, _, err = OCCatalogAPI.StorageApi.StorageControllerGet(context.Background(), id)
|
||||
default:
|
||||
return
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
c.Data["data"] = res
|
||||
c.TplName = "details.tpl"
|
||||
}
|
||||
28
controllers/item.go
Normal file
28
controllers/item.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// ItemController shows partners on a map
|
||||
type ItemController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// Get items
|
||||
func (c *ItemController) Get() {
|
||||
|
||||
c.Data["Website"] = "beego.me"
|
||||
c.Data["Email"] = "astaxie@gmail.com"
|
||||
c.TplName = "item.tpl"
|
||||
c.EnableXSRF = false
|
||||
}
|
||||
|
||||
// Add item
|
||||
func (c *ItemController) Add() {
|
||||
|
||||
c.Data["Website"] = "beego.me"
|
||||
c.Data["Email"] = "astaxie@gmail.com"
|
||||
c.TplName = "item_add.tpl"
|
||||
c.EnableXSRF = false
|
||||
}
|
||||
17
controllers/login.go
Normal file
17
controllers/login.go
Normal file
@@ -0,0 +1,17 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// LoginController is the controller in chrage of solr
|
||||
type LoginController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// Get implements simple solr Login
|
||||
func (c *LoginController) Get() {
|
||||
|
||||
c.TplName = "login.tpl"
|
||||
//c.SetSession("login", "test")
|
||||
}
|
||||
19
controllers/map.go
Normal file
19
controllers/map.go
Normal file
@@ -0,0 +1,19 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// MapController shows partners on a map
|
||||
type MapController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// Get i
|
||||
func (c *MapController) Get() {
|
||||
|
||||
c.Data["Website"] = "beego.me"
|
||||
c.Data["Email"] = "astaxie@gmail.com"
|
||||
c.TplName = "map.tpl"
|
||||
c.EnableXSRF = false
|
||||
}
|
||||
21
controllers/networks.go
Normal file
21
controllers/networks.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// NetworksController is the controller in chrage of solr
|
||||
type NetworksController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// Get implements simple search
|
||||
func (c *NetworksController) Get() {
|
||||
resources := loadSingleFile("data/test.json")
|
||||
fmt.Println(len(resources))
|
||||
fmt.Println(resources[0].Name)
|
||||
c.Data["list"] = resources
|
||||
c.TplName = "networks.tpl"
|
||||
}
|
||||
96
controllers/oidc.go
Normal file
96
controllers/oidc.go
Normal file
@@ -0,0 +1,96 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
|
||||
oidc "github.com/coreos/go-oidc"
|
||||
"golang.org/x/net/context"
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
||||
// OidcController is the controller in oidc
|
||||
type OidcController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
var oauth2Config oauth2.Config
|
||||
var idTokenVerifier *oidc.IDTokenVerifier
|
||||
var ctx context.Context
|
||||
|
||||
// Connect implements open id connection to openid provider
|
||||
func (c *OidcController) Connect() {
|
||||
ctx = context.Background()
|
||||
|
||||
// Initialize a provider by specifying dex's issuer URL.
|
||||
provider, err := oidc.NewProvider(ctx, "http://127.0.0.1:5556/dex")
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// Configure the OAuth2 config with the client values.
|
||||
oauth2Config = oauth2.Config{
|
||||
// client_id and client_secret of the client.
|
||||
ClientID: "opencloud-search",
|
||||
ClientSecret: "ZXhhbXBsZS1hcHAtc2VjcmV0",
|
||||
|
||||
// The redirectURL.
|
||||
RedirectURL: "http://127.0.0.1:8080/oidc-callback",
|
||||
|
||||
// Discovery returns the OAuth2 endpoints.
|
||||
Endpoint: provider.Endpoint(),
|
||||
|
||||
// "openid" is a required scope for OpenID Connect flows.
|
||||
//
|
||||
// Other scopes, such as "groups" can be requested.
|
||||
Scopes: []string{oidc.ScopeOpenID, "profile", "email", "groups"},
|
||||
}
|
||||
|
||||
// Create an ID token parser.
|
||||
idTokenVerifier = provider.Verifier(&oidc.Config{ClientID: "opencloud-search"})
|
||||
|
||||
//state := newState()
|
||||
c.Redirect(oauth2Config.AuthCodeURL("foobar"), http.StatusFound)
|
||||
|
||||
}
|
||||
|
||||
// Callback implements open id callback from openid provider
|
||||
func (c *OidcController) Callback() {
|
||||
|
||||
state := c.GetString("state")
|
||||
code := c.GetString("code")
|
||||
_ = state
|
||||
// Verify state.
|
||||
|
||||
oauth2Token, err := oauth2Config.Exchange(ctx, code)
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
}
|
||||
|
||||
// Extract the ID Token from OAuth2 token.
|
||||
rawIDToken, ok := oauth2Token.Extra("id_token").(string)
|
||||
if !ok {
|
||||
// handle missing token
|
||||
}
|
||||
fmt.Println(rawIDToken)
|
||||
// Parse and verify ID Token payload.
|
||||
idToken, err := idTokenVerifier.Verify(ctx, rawIDToken)
|
||||
if err != nil {
|
||||
// handle error
|
||||
}
|
||||
|
||||
// Extract custom claims.
|
||||
var claims struct {
|
||||
Email string `json:"email"`
|
||||
Verified bool `json:"email_verified"`
|
||||
Groups []string `json:"groups"`
|
||||
}
|
||||
if err := idToken.Claims(&claims); err != nil {
|
||||
// handle error
|
||||
}
|
||||
c.SetSession("login", claims.Email)
|
||||
c.Redirect("/user", http.StatusFound)
|
||||
}
|
||||
28
controllers/partner.go
Normal file
28
controllers/partner.go
Normal file
@@ -0,0 +1,28 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// PartnerController shows partners on a map
|
||||
type PartnerController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// Get i
|
||||
func (c *PartnerController) Get() {
|
||||
|
||||
c.Data["Website"] = "beego.me"
|
||||
c.Data["Email"] = "astaxie@gmail.com"
|
||||
c.TplName = "item.tpl"
|
||||
c.EnableXSRF = false
|
||||
}
|
||||
|
||||
// Add i
|
||||
func (c *PartnerController) Add() {
|
||||
|
||||
c.Data["Website"] = "beego.me"
|
||||
c.Data["Email"] = "astaxie@gmail.com"
|
||||
c.TplName = "map.tpl"
|
||||
c.EnableXSRF = false
|
||||
}
|
||||
15
controllers/schedule.go
Normal file
15
controllers/schedule.go
Normal file
@@ -0,0 +1,15 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// ScheduleController is the controller in chrage of solr
|
||||
type ScheduleController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// Get implements simple search
|
||||
func (c *ScheduleController) Get() {
|
||||
c.TplName = "schedule.tpl"
|
||||
}
|
||||
53
controllers/search.go
Normal file
53
controllers/search.go
Normal file
@@ -0,0 +1,53 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
||||
OCCatalog_cli "oc-search/api-client/oc-catalog"
|
||||
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
|
||||
"oc-search/models"
|
||||
)
|
||||
|
||||
// SearchController is the controller in chrage of solr
|
||||
type SearchController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
func loadSingleFile(filename string) []models.Resource {
|
||||
var list []models.Resource
|
||||
jsonFile, err := os.Open(filename)
|
||||
// if we os.Open returns an error then handle it
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
defer jsonFile.Close()
|
||||
byteValue, _ := ioutil.ReadAll(jsonFile)
|
||||
json.Unmarshal(byteValue, &list)
|
||||
return list
|
||||
}
|
||||
|
||||
// Get implements simple search
|
||||
func (c *SearchController) Get() {
|
||||
query := c.GetString("q")
|
||||
|
||||
var resources OCCatalog_cli.ModelsSearchResult
|
||||
|
||||
//FIXME: dashboard special case for x_dash.json ?????
|
||||
resources, _, err := OCCatalogAPI.SearchApi.SearchControllerSearchByWord(context.Background(), query)
|
||||
if err != nil {
|
||||
logs.Warn(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
//TODO: Adapt the View and models to use the OCCatalog_cli models as much as possible
|
||||
|
||||
c.Data["list"] = resources
|
||||
c.TplName = "search.tpl"
|
||||
}
|
||||
25
controllers/user.go
Normal file
25
controllers/user.go
Normal file
@@ -0,0 +1,25 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
)
|
||||
|
||||
// UserController is the controller in chrage of solr
|
||||
type UserController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// Prepare checks for logged in User
|
||||
func (c *UserController) Prepare() {
|
||||
login, _ := c.GetSession("login").(string)
|
||||
if login == "" {
|
||||
c.Ctx.Redirect(302, "/login")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Get implements simple solr User
|
||||
func (c *UserController) Get() {
|
||||
c.Data["login"], _ = c.GetSession("login").(string)
|
||||
c.TplName = "user.tpl"
|
||||
}
|
||||
81
controllers/workflow.go
Normal file
81
controllers/workflow.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
"github.com/sbabiv/xml2map"
|
||||
)
|
||||
|
||||
// WorkflowController allows to edit a tasks workflow
|
||||
type WorkflowController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// Get i
|
||||
func (c *WorkflowController) Get() {
|
||||
|
||||
c.Data["Website"] = "beego.me"
|
||||
c.Data["Email"] = "astaxie@gmail.com"
|
||||
c.TplName = "workflow.tpl"
|
||||
}
|
||||
|
||||
// Open i
|
||||
func (c *WorkflowController) Open() {
|
||||
|
||||
c.Data["Website"] = "beego.me"
|
||||
c.Data["Email"] = "astaxie@gmail.com"
|
||||
c.TplName = "workflow.tpl"
|
||||
}
|
||||
|
||||
// Save i
|
||||
func (c *WorkflowController) Save() {
|
||||
xml := c.GetString("xml")
|
||||
fmt.Println(xml)
|
||||
decodedValue, err := url.QueryUnescape(xml)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return
|
||||
}
|
||||
fmt.Println(decodedValue)
|
||||
os.WriteFile("graph.xml", []byte(decodedValue), 0660)
|
||||
decoder := xml2map.NewDecoder(strings.NewReader(decodedValue))
|
||||
result, err := decoder.Decode()
|
||||
if err != nil {
|
||||
|
||||
}
|
||||
|
||||
cells := result["mxGraphModel"].(map[string]interface{})["root"].(map[string]interface{})["mxCell"].([]map[string]interface{})
|
||||
|
||||
for _, element := range cells {
|
||||
id := element["@id"].(string)
|
||||
if _, ok := element["@style"]; ok {
|
||||
if _, ok2 := element["@rID"]; ok2 {
|
||||
fmt.Print(id + ": ")
|
||||
fmt.Println(element["@rID"], element["@rType"])
|
||||
}
|
||||
}
|
||||
if src, ok := element["@source"]; ok {
|
||||
src = element["@source"].(string)
|
||||
fmt.Println("Link: " + src.(string) + " " + element["@target"].(string))
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
c.StopRun()
|
||||
}
|
||||
|
||||
// Export i
|
||||
func (c *WorkflowController) Export() {
|
||||
|
||||
c.Data["Website"] = "beego.me"
|
||||
c.Data["Email"] = "astaxie@gmail.com"
|
||||
c.TplName = "workflow.tpl"
|
||||
}
|
||||
90
controllers/workspace.go
Normal file
90
controllers/workspace.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
beego "github.com/beego/beego/v2/server/web"
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
// WorkspaceController is the controller in chrage of solr
|
||||
type WorkspaceController struct {
|
||||
beego.Controller
|
||||
}
|
||||
|
||||
// @Title GetWorkspace
|
||||
// @Description Return Workspace
|
||||
// @router / [get]
|
||||
func (c *WorkspaceController) GetWorkspace() {
|
||||
|
||||
//TODO: Use fullModel api call
|
||||
workspaceObj, _, err := OCCatalogAPI.WorkspaceApi.WorkspaceControllerGetWorkspace(context.Background())
|
||||
if err != nil {
|
||||
logs.Warn(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
outputArray := []interface{}{}
|
||||
|
||||
if len(workspaceObj.Data) > 0 {
|
||||
dataArr, _, err := OCCatalogAPI.DataApi.DataControllerGetMultipleDataByIDs(context.Background(), workspaceObj.Data)
|
||||
if err != nil {
|
||||
logs.Warn(err.Error())
|
||||
}
|
||||
|
||||
//convert array of strings to interface{}
|
||||
ArrInterface := make([]interface{}, len(dataArr))
|
||||
for i := range dataArr {
|
||||
ArrInterface[i] = dataArr[i]
|
||||
}
|
||||
|
||||
outputArray = append(outputArray, ArrInterface...)
|
||||
}
|
||||
|
||||
if len(workspaceObj.Computing) > 0 {
|
||||
computingArr, _, err := OCCatalogAPI.ComputingApi.ComputingControllerGetMultipleComputingByIDs(context.Background(), workspaceObj.Computing)
|
||||
if err != nil {
|
||||
logs.Warn(err.Error())
|
||||
}
|
||||
|
||||
//convert array of strings to interface{}
|
||||
ArrInterface := make([]interface{}, len(computingArr))
|
||||
for i := range computingArr {
|
||||
ArrInterface[i] = computingArr[i]
|
||||
}
|
||||
|
||||
outputArray = append(outputArray, ArrInterface...)
|
||||
}
|
||||
|
||||
if len(workspaceObj.Datacenter) > 0 {
|
||||
datacenterArr, _, err := OCCatalogAPI.DatacenterApi.DatacenterControllerGetMultipleDatacentersByIDs(context.Background(), workspaceObj.Datacenter)
|
||||
if err != nil {
|
||||
logs.Warn(err.Error())
|
||||
}
|
||||
|
||||
//convert array of strings to interface{}
|
||||
ArrInterface := make([]interface{}, len(datacenterArr))
|
||||
for i := range datacenterArr {
|
||||
ArrInterface[i] = datacenterArr[i]
|
||||
}
|
||||
|
||||
outputArray = append(outputArray, ArrInterface...)
|
||||
}
|
||||
|
||||
if len(workspaceObj.Storage) > 0 {
|
||||
storageArr, _, err := OCCatalogAPI.StorageApi.StorageControllerGetMultipleStoragesByIDs(context.Background(), workspaceObj.Storage)
|
||||
if err != nil {
|
||||
logs.Warn(err.Error())
|
||||
}
|
||||
|
||||
//convert array of strings to interface{}
|
||||
ArrInterface := make([]interface{}, len(storageArr))
|
||||
for i := range storageArr {
|
||||
ArrInterface[i] = storageArr[i]
|
||||
}
|
||||
|
||||
outputArray = append(outputArray, ArrInterface...)
|
||||
}
|
||||
|
||||
c.Data["list"] = outputArray
|
||||
c.TplName = "workspace.tpl"
|
||||
}
|
||||
Reference in New Issue
Block a user