mirror of
https://github.com/openziti/zrok.git
synced 2024-11-22 16:13:47 +01:00
richer principal (#11)
This commit is contained in:
parent
cc86776351
commit
e6e487c07e
@ -6,7 +6,6 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/go-openapi/runtime/middleware"
|
"github.com/go-openapi/runtime/middleware"
|
||||||
"github.com/openziti-test-kitchen/zrok/controller/store"
|
|
||||||
"github.com/openziti-test-kitchen/zrok/rest_model_zrok"
|
"github.com/openziti-test-kitchen/zrok/rest_model_zrok"
|
||||||
"github.com/openziti-test-kitchen/zrok/rest_server_zrok/operations/identity"
|
"github.com/openziti-test-kitchen/zrok/rest_server_zrok/operations/identity"
|
||||||
"github.com/openziti/edge/rest_management_api_client"
|
"github.com/openziti/edge/rest_management_api_client"
|
||||||
@ -19,28 +18,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func enableHandler(_ identity.EnableParams, principal *rest_model_zrok.Principal) middleware.Responder {
|
func enableHandler(_ identity.EnableParams, principal *rest_model_zrok.Principal) middleware.Responder {
|
||||||
tx, err := Str.Begin()
|
|
||||||
if err != nil {
|
|
||||||
logrus.Errorf("error starting transaction: %v", err)
|
|
||||||
return identity.NewCreateAccountInternalServerError().WithPayload(rest_model_zrok.ErrorMessage(err.Error()))
|
|
||||||
}
|
|
||||||
a, err := Str.FindAccountWithToken(string(*principal), tx)
|
|
||||||
if err != nil {
|
|
||||||
logrus.Errorf("error finding account: %v", err)
|
|
||||||
return identity.NewCreateAccountBadRequest().WithPayload(rest_model_zrok.ErrorMessage(err.Error()))
|
|
||||||
}
|
|
||||||
if a == nil {
|
|
||||||
logrus.Errorf("account not found: %v", err)
|
|
||||||
return identity.NewEnableNotFound()
|
|
||||||
}
|
|
||||||
logrus.Infof("found account '%v'", a.Username)
|
|
||||||
|
|
||||||
client, err := edgeClient()
|
client, err := edgeClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Errorf("error getting edge client: %v", err)
|
logrus.Errorf("error getting edge client: %v", err)
|
||||||
return identity.NewEnableInternalServerError().WithPayload(rest_model_zrok.ErrorMessage(err.Error()))
|
return identity.NewEnableInternalServerError().WithPayload(rest_model_zrok.ErrorMessage(err.Error()))
|
||||||
}
|
}
|
||||||
ident, err := createIdentity(a, client)
|
ident, err := createIdentity(principal.Username, client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Error(err)
|
logrus.Error(err)
|
||||||
return identity.NewEnableInternalServerError().WithPayload(rest_model_zrok.ErrorMessage(err.Error()))
|
return identity.NewEnableInternalServerError().WithPayload(rest_model_zrok.ErrorMessage(err.Error()))
|
||||||
@ -67,13 +50,13 @@ func enableHandler(_ identity.EnableParams, principal *rest_model_zrok.Principal
|
|||||||
return resp
|
return resp
|
||||||
}
|
}
|
||||||
|
|
||||||
func createIdentity(a *store.Account, client *rest_management_api_client.ZitiEdgeManagement) (*identity_edge.CreateIdentityCreated, error) {
|
func createIdentity(username string, client *rest_management_api_client.ZitiEdgeManagement) (*identity_edge.CreateIdentityCreated, error) {
|
||||||
iIsAdmin := false
|
iIsAdmin := false
|
||||||
iId, err := randomId()
|
iId, err := randomId()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
name := fmt.Sprintf("%v-%v", a.Username, iId)
|
name := fmt.Sprintf("%v-%v", username, iId)
|
||||||
identityType := rest_model_edge.IdentityTypeUser
|
identityType := rest_model_edge.IdentityTypeUser
|
||||||
i := &rest_model_edge.IdentityCreate{
|
i := &rest_model_edge.IdentityCreate{
|
||||||
Enrollment: &rest_model_edge.IdentityCreateEnrollment{Ott: true},
|
Enrollment: &rest_model_edge.IdentityCreateEnrollment{Ott: true},
|
||||||
|
@ -19,7 +19,11 @@ func ZrokAuthenticate(token string) (*rest_model_zrok.Principal, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if a, err := Str.FindAccountWithToken(token, tx); err == nil {
|
if a, err := Str.FindAccountWithToken(token, tx); err == nil {
|
||||||
principal := rest_model_zrok.Principal(a.Token)
|
principal := rest_model_zrok.Principal{
|
||||||
|
ID: int64(a.Id),
|
||||||
|
Token: a.Token,
|
||||||
|
Username: a.Username,
|
||||||
|
}
|
||||||
return &principal, nil
|
return &principal, nil
|
||||||
} else {
|
} else {
|
||||||
return nil, errors2.New(401, "invalid api key")
|
return nil, errors2.New(401, "invalid api key")
|
||||||
|
@ -9,19 +9,48 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
|
|
||||||
"github.com/go-openapi/strfmt"
|
"github.com/go-openapi/strfmt"
|
||||||
|
"github.com/go-openapi/swag"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Principal principal
|
// Principal principal
|
||||||
//
|
//
|
||||||
// swagger:model principal
|
// swagger:model principal
|
||||||
type Principal string
|
type Principal struct {
|
||||||
|
|
||||||
|
// id
|
||||||
|
ID int64 `json:"id,omitempty"`
|
||||||
|
|
||||||
|
// token
|
||||||
|
Token string `json:"token,omitempty"`
|
||||||
|
|
||||||
|
// username
|
||||||
|
Username string `json:"username,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
// Validate validates this principal
|
// Validate validates this principal
|
||||||
func (m Principal) Validate(formats strfmt.Registry) error {
|
func (m *Principal) Validate(formats strfmt.Registry) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ContextValidate validates this principal based on context it is used
|
// ContextValidate validates this principal based on context it is used
|
||||||
func (m Principal) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
|
func (m *Principal) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalBinary interface implementation
|
||||||
|
func (m *Principal) MarshalBinary() ([]byte, error) {
|
||||||
|
if m == nil {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
return swag.WriteJSON(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalBinary interface implementation
|
||||||
|
func (m *Principal) UnmarshalBinary(b []byte) error {
|
||||||
|
var res Principal
|
||||||
|
if err := swag.ReadJSON(b, &res); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*m = res
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,18 @@ func init() {
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"principal": {
|
"principal": {
|
||||||
"type": "string"
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"token": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"tunnelRequest": {
|
"tunnelRequest": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
@ -454,7 +465,18 @@ func init() {
|
|||||||
"type": "string"
|
"type": "string"
|
||||||
},
|
},
|
||||||
"principal": {
|
"principal": {
|
||||||
"type": "string"
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"token": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"tunnelRequest": {
|
"tunnelRequest": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
|
@ -123,7 +123,14 @@ definitions:
|
|||||||
errorMessage:
|
errorMessage:
|
||||||
type: string
|
type: string
|
||||||
principal:
|
principal:
|
||||||
type: string
|
type: object
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
username:
|
||||||
|
type: string
|
||||||
|
token:
|
||||||
|
type: string
|
||||||
tunnelRequest:
|
tunnelRequest:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
Loading…
Reference in New Issue
Block a user