mirror of
https://github.com/openziti/zrok.git
synced 2024-11-22 16:13:47 +01:00
parent
c0e22792d0
commit
5359754ba1
@ -67,19 +67,37 @@ func (h *accessHandler) Handle(params service.AccessParams, principal *rest_mode
|
||||
return service.NewAccessNotFound()
|
||||
}
|
||||
|
||||
edge, err := edgeClient()
|
||||
frontendName, err := createToken()
|
||||
if err != nil {
|
||||
logrus.Error(err)
|
||||
return service.NewAccessInternalServerError()
|
||||
}
|
||||
|
||||
extraTags := &rest_model_edge.Tags{SubTags: map[string]interface{}{"zrokEnvironmentZId": envZId}}
|
||||
if _, err := str.CreateFrontend(envId, &store.Frontend{Name: frontendName, ZId: envZId}, tx); err != nil {
|
||||
logrus.Errorf("error creating frontend record: %v", err)
|
||||
return service.NewAccessInternalServerError()
|
||||
}
|
||||
|
||||
edge, err := edgeClient()
|
||||
if err != nil {
|
||||
logrus.Error(err)
|
||||
return service.NewAccessInternalServerError()
|
||||
}
|
||||
extraTags := &rest_model_edge.Tags{SubTags: map[string]interface{}{
|
||||
"zrokEnvironmentZId": envZId,
|
||||
"zrokFrontendName": frontendName,
|
||||
}}
|
||||
if err := createServicePolicyDialForEnvironment(envZId, ssvc.Name, ssvc.ZId, edge, extraTags); err != nil {
|
||||
logrus.Errorf("unable to create dial policy: %v", err)
|
||||
return service.NewAccessInternalServerError()
|
||||
}
|
||||
|
||||
return service.NewAccessCreated()
|
||||
if err := tx.Commit(); err != nil {
|
||||
logrus.Errorf("error committing frontend record: %v", err)
|
||||
return service.NewAccessInternalServerError()
|
||||
}
|
||||
|
||||
return service.NewAccessCreated().WithPayload(&rest_model_zrok.AccessResponse{FrontendName: frontendName})
|
||||
}
|
||||
|
||||
func createServicePolicyDialForEnvironment(envZId, svcName, svcZId string, edge *rest_management_api_client.ZitiEdgeManagement, tags ...*rest_model.Tags) error {
|
||||
|
@ -8,17 +8,18 @@ import (
|
||||
type Frontend struct {
|
||||
Model
|
||||
EnvironmentId int
|
||||
Name string
|
||||
ZId string
|
||||
Name *string
|
||||
PublicName *string
|
||||
}
|
||||
|
||||
func (str *Store) CreateFrontend(envId int, f *Frontend, tx *sqlx.Tx) (int, error) {
|
||||
stmt, err := tx.Prepare("insert into frontends (environment_id, z_id, name) values ($1, $2, $3) returning id")
|
||||
stmt, err := tx.Prepare("insert into frontends (environment_id, name, z_id, public_name) values ($1, $2, $3, $4) returning id")
|
||||
if err != nil {
|
||||
return 0, errors.Wrap(err, "error preparing frontends insert statement")
|
||||
}
|
||||
var id int
|
||||
if err := stmt.QueryRow(envId, f.ZId, f.Name).Scan(&id); err != nil {
|
||||
if err := stmt.QueryRow(envId, f.Name, f.ZId, f.PublicName).Scan(&id); err != nil {
|
||||
return 0, errors.Wrap(err, "error executing frontends insert statement")
|
||||
}
|
||||
return id, nil
|
||||
|
@ -3,8 +3,9 @@
|
||||
create table frontends (
|
||||
id serial primary key,
|
||||
environment_id integer not null references environments(id),
|
||||
name varchar(32) not null unique,
|
||||
z_id varchar(32) not null unique,
|
||||
name varchar(64) unique,
|
||||
public_name varchar(64) unique,
|
||||
created_at timestamptz not null default(current_timestamp),
|
||||
updated_at timestamptz not null default(current_timestamp)
|
||||
);
|
||||
|
@ -20,8 +20,9 @@ drop table environments_old;
|
||||
create table frontends (
|
||||
id integer primary key,
|
||||
environment_id integer not null references environments(id),
|
||||
name varchar(32) not null unique,
|
||||
z_id varchar(32) not null unique,
|
||||
name varchar(64) unique,
|
||||
public_name varchar(64) unique,
|
||||
created_at datetime not null default(strftime('%Y-%m-%d %H:%M:%f', 'now')),
|
||||
updated_at datetime not null default(strftime('%Y-%m-%d %H:%M:%f', 'now'))
|
||||
);
|
||||
|
@ -7,9 +7,12 @@ package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
|
||||
"github.com/go-openapi/runtime"
|
||||
"github.com/go-openapi/strfmt"
|
||||
|
||||
"github.com/openziti-test-kitchen/zrok/rest_model_zrok"
|
||||
)
|
||||
|
||||
// AccessReader is a Reader for the Access structure.
|
||||
@ -60,6 +63,7 @@ AccessCreated describes a response with status code 201, with default header val
|
||||
access created
|
||||
*/
|
||||
type AccessCreated struct {
|
||||
Payload *rest_model_zrok.AccessResponse
|
||||
}
|
||||
|
||||
// IsSuccess returns true when this access created response has a 2xx status code
|
||||
@ -88,15 +92,26 @@ func (o *AccessCreated) IsCode(code int) bool {
|
||||
}
|
||||
|
||||
func (o *AccessCreated) Error() string {
|
||||
return fmt.Sprintf("[POST /access][%d] accessCreated ", 201)
|
||||
return fmt.Sprintf("[POST /access][%d] accessCreated %+v", 201, o.Payload)
|
||||
}
|
||||
|
||||
func (o *AccessCreated) String() string {
|
||||
return fmt.Sprintf("[POST /access][%d] accessCreated ", 201)
|
||||
return fmt.Sprintf("[POST /access][%d] accessCreated %+v", 201, o.Payload)
|
||||
}
|
||||
|
||||
func (o *AccessCreated) GetPayload() *rest_model_zrok.AccessResponse {
|
||||
return o.Payload
|
||||
}
|
||||
|
||||
func (o *AccessCreated) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error {
|
||||
|
||||
o.Payload = new(rest_model_zrok.AccessResponse)
|
||||
|
||||
// response payload
|
||||
if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
50
rest_model_zrok/access_response.go
Normal file
50
rest_model_zrok/access_response.go
Normal file
@ -0,0 +1,50 @@
|
||||
// Code generated by go-swagger; DO NOT EDIT.
|
||||
|
||||
package rest_model_zrok
|
||||
|
||||
// This file was generated by the swagger tool.
|
||||
// Editing this file might prove futile when you re-run the swagger generate command
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/go-openapi/strfmt"
|
||||
"github.com/go-openapi/swag"
|
||||
)
|
||||
|
||||
// AccessResponse access response
|
||||
//
|
||||
// swagger:model accessResponse
|
||||
type AccessResponse struct {
|
||||
|
||||
// frontend name
|
||||
FrontendName string `json:"frontendName,omitempty"`
|
||||
}
|
||||
|
||||
// Validate validates this access response
|
||||
func (m *AccessResponse) Validate(formats strfmt.Registry) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// ContextValidate validates this access response based on context it is used
|
||||
func (m *AccessResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// MarshalBinary interface implementation
|
||||
func (m *AccessResponse) MarshalBinary() ([]byte, error) {
|
||||
if m == nil {
|
||||
return nil, nil
|
||||
}
|
||||
return swag.WriteJSON(m)
|
||||
}
|
||||
|
||||
// UnmarshalBinary interface implementation
|
||||
func (m *AccessResponse) UnmarshalBinary(b []byte) error {
|
||||
var res AccessResponse
|
||||
if err := swag.ReadJSON(b, &res); err != nil {
|
||||
return err
|
||||
}
|
||||
*m = res
|
||||
return nil
|
||||
}
|
@ -57,7 +57,10 @@ func init() {
|
||||
],
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "access created"
|
||||
"description": "access created",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/accessResponse"
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "unauthorized"
|
||||
@ -449,6 +452,14 @@ func init() {
|
||||
}
|
||||
}
|
||||
},
|
||||
"accessResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"frontendName": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"accountRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@ -777,7 +788,10 @@ func init() {
|
||||
],
|
||||
"responses": {
|
||||
"201": {
|
||||
"description": "access created"
|
||||
"description": "access created",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/accessResponse"
|
||||
}
|
||||
},
|
||||
"401": {
|
||||
"description": "unauthorized"
|
||||
@ -1169,6 +1183,14 @@ func init() {
|
||||
}
|
||||
}
|
||||
},
|
||||
"accessResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"frontendName": {
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"accountRequest": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
@ -9,6 +9,8 @@ import (
|
||||
"net/http"
|
||||
|
||||
"github.com/go-openapi/runtime"
|
||||
|
||||
"github.com/openziti-test-kitchen/zrok/rest_model_zrok"
|
||||
)
|
||||
|
||||
// AccessCreatedCode is the HTTP code returned for type AccessCreated
|
||||
@ -20,6 +22,11 @@ AccessCreated access created
|
||||
swagger:response accessCreated
|
||||
*/
|
||||
type AccessCreated struct {
|
||||
|
||||
/*
|
||||
In: Body
|
||||
*/
|
||||
Payload *rest_model_zrok.AccessResponse `json:"body,omitempty"`
|
||||
}
|
||||
|
||||
// NewAccessCreated creates AccessCreated with default headers values
|
||||
@ -28,12 +35,27 @@ func NewAccessCreated() *AccessCreated {
|
||||
return &AccessCreated{}
|
||||
}
|
||||
|
||||
// WithPayload adds the payload to the access created response
|
||||
func (o *AccessCreated) WithPayload(payload *rest_model_zrok.AccessResponse) *AccessCreated {
|
||||
o.Payload = payload
|
||||
return o
|
||||
}
|
||||
|
||||
// SetPayload sets the payload to the access created response
|
||||
func (o *AccessCreated) SetPayload(payload *rest_model_zrok.AccessResponse) {
|
||||
o.Payload = payload
|
||||
}
|
||||
|
||||
// WriteResponse to the client
|
||||
func (o *AccessCreated) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) {
|
||||
|
||||
rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses
|
||||
|
||||
rw.WriteHeader(201)
|
||||
if o.Payload != nil {
|
||||
payload := o.Payload
|
||||
if err := producer.Produce(rw, payload); err != nil {
|
||||
panic(err) // let the recovery middleware deal with this
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// AccessUnauthorizedCode is the HTTP code returned for type AccessUnauthorized
|
||||
|
@ -194,6 +194,8 @@ paths:
|
||||
responses:
|
||||
201:
|
||||
description: access created
|
||||
schema:
|
||||
$ref: "#/definitions/accessResponse"
|
||||
401:
|
||||
description: unauthorized
|
||||
404:
|
||||
@ -280,6 +282,12 @@ definitions:
|
||||
svcName:
|
||||
type: string
|
||||
|
||||
accessResponse:
|
||||
type: object
|
||||
properties:
|
||||
frontendName:
|
||||
type: string
|
||||
|
||||
accountRequest:
|
||||
type: object
|
||||
properties:
|
||||
|
@ -5,7 +5,7 @@ import * as gateway from './gateway'
|
||||
/**
|
||||
* @param {object} options Optional options
|
||||
* @param {module:types.accessRequest} [options.body]
|
||||
* @return {Promise<object>} access created
|
||||
* @return {Promise<module:types.accessResponse>} access created
|
||||
*/
|
||||
export function access(options) {
|
||||
if (!options) options = {}
|
||||
|
@ -9,6 +9,13 @@
|
||||
* @property {string} svcName
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef accessResponse
|
||||
* @memberof module:types
|
||||
*
|
||||
* @property {string} frontendName
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef accountRequest
|
||||
* @memberof module:types
|
||||
|
Loading…
Reference in New Issue
Block a user