kopia lustrzana https://github.com/reiver/greatape
feat(api): ✨ server configuration
rodzic
429f77fe2f
commit
e96ceab3f0
|
@ -0,0 +1,22 @@
|
|||
package commands
|
||||
|
||||
import . "github.com/reiver/greatape/components/contracts"
|
||||
|
||||
func GetServerConfiguration(x IDispatcher) (IGetServerConfigurationResult, error) {
|
||||
environment := ""
|
||||
if x.IsDevelopmentEnvironment() {
|
||||
environment = "development"
|
||||
} else if x.IsTestEnvironment() {
|
||||
environment = "test"
|
||||
} else if x.IsStagingEnvironment() {
|
||||
environment = "staging"
|
||||
} else if x.IsProductionEnvironment() {
|
||||
environment = "production"
|
||||
}
|
||||
|
||||
return x.NewGetServerConfigurationResult(
|
||||
"GreatApe",
|
||||
environment,
|
||||
x.FQDN(),
|
||||
), nil
|
||||
}
|
|
@ -45,6 +45,16 @@ func TestEchoApi(test *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestGetServerConfigurationApi(test *testing.T) {
|
||||
input := &GetServerConfigurationRequest{}
|
||||
|
||||
if output, err := api.GetServerConfiguration(input); err != nil {
|
||||
test.Fatal(err)
|
||||
} else if output == nil {
|
||||
test.Fail()
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckUsernameAvailabilityApi(test *testing.T) {
|
||||
input := &CheckUsernameAvailabilityRequest{
|
||||
Username: "username",
|
||||
|
|
|
@ -8,6 +8,7 @@ func (factory *operationFactory) Operations() []IOperation {
|
|||
return []IOperation{
|
||||
SystemCallOperation(),
|
||||
EchoOperation(),
|
||||
GetServerConfigurationOperation(),
|
||||
CheckUsernameAvailabilityOperation(),
|
||||
SignupOperation(),
|
||||
ResendVerificationCodeOperation(),
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
package operations
|
||||
|
||||
import (
|
||||
. "github.com/reiver/greatape/components/api/protobuf"
|
||||
. "github.com/reiver/greatape/components/api/services"
|
||||
. "github.com/reiver/greatape/components/contracts"
|
||||
. "github.com/xeronith/diamante/contracts/operation"
|
||||
. "github.com/xeronith/diamante/contracts/service"
|
||||
. "github.com/xeronith/diamante/contracts/system"
|
||||
. "github.com/xeronith/diamante/operation"
|
||||
)
|
||||
|
||||
type getServerConfigurationOperation struct {
|
||||
Operation
|
||||
|
||||
run func(IContext, *GetServerConfigurationRequest) (*GetServerConfigurationResult, error)
|
||||
}
|
||||
|
||||
func GetServerConfigurationOperation() IOperation {
|
||||
return &getServerConfigurationOperation{
|
||||
run: GetServerConfigurationService,
|
||||
}
|
||||
}
|
||||
|
||||
func (operation *getServerConfigurationOperation) Id() (ID, ID) {
|
||||
return GET_SERVER_CONFIGURATION_REQUEST, GET_SERVER_CONFIGURATION_RESULT
|
||||
}
|
||||
|
||||
func (operation *getServerConfigurationOperation) InputContainer() Pointer {
|
||||
return new(GetServerConfigurationRequest)
|
||||
}
|
||||
|
||||
func (operation *getServerConfigurationOperation) OutputContainer() Pointer {
|
||||
return new(GetServerConfigurationResult)
|
||||
}
|
||||
|
||||
func (operation *getServerConfigurationOperation) Execute(context IContext, payload Pointer) (Pointer, error) {
|
||||
return operation.run(context, payload.(*GetServerConfigurationRequest))
|
||||
}
|
Plik diff jest za duży
Load Diff
|
@ -25,6 +25,17 @@ message EchoResult {
|
|||
Document document = 0x00000001;
|
||||
}
|
||||
|
||||
// API: GetServerConfiguration
|
||||
//-----------------------------------------------------------
|
||||
message GetServerConfigurationRequest {
|
||||
}
|
||||
|
||||
message GetServerConfigurationResult {
|
||||
string product = 0x00000001;
|
||||
string environment = 0x00000002;
|
||||
string fqdn = 0x00000003;
|
||||
}
|
||||
|
||||
// API: CheckUsernameAvailability
|
||||
//-----------------------------------------------------------
|
||||
message CheckUsernameAvailabilityRequest {
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package services
|
||||
|
||||
import (
|
||||
. "github.com/reiver/greatape/components/api/protobuf"
|
||||
. "github.com/reiver/greatape/components/contracts"
|
||||
. "github.com/reiver/greatape/components/core"
|
||||
. "github.com/xeronith/diamante/contracts/service"
|
||||
)
|
||||
|
||||
func GetServerConfigurationService(context IContext, input *GetServerConfigurationRequest) (result *GetServerConfigurationResult, err error) {
|
||||
source := "get_server_configuration"
|
||||
/* //////// */ Conductor.LogRemoteCall(context, INIT, source, input, result, err)
|
||||
defer func() { Conductor.LogRemoteCall(context, DONE, source, input, result, err) }()
|
||||
|
||||
commandResult, err := Conductor.GetServerConfiguration(context.Identity())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result = context.ResultContainer().(*GetServerConfigurationResult)
|
||||
result.Product = commandResult.Product()
|
||||
result.Environment = commandResult.Environment()
|
||||
result.Fqdn = commandResult.Fqdn()
|
||||
return result, nil
|
||||
}
|
|
@ -8,6 +8,7 @@ type IApi interface {
|
|||
//API Methods
|
||||
SystemCall(*SystemCallRequest) (*SystemCallResult, error)
|
||||
Echo(*EchoRequest) (*EchoResult, error)
|
||||
GetServerConfiguration(*GetServerConfigurationRequest) (*GetServerConfigurationResult, error)
|
||||
CheckUsernameAvailability(*CheckUsernameAvailabilityRequest) (*CheckUsernameAvailabilityResult, error)
|
||||
Signup(*SignupRequest) (*SignupResult, error)
|
||||
ResendVerificationCode(*ResendVerificationCodeRequest) (*ResendVerificationCodeResult, error)
|
||||
|
|
|
@ -12,6 +12,10 @@ const (
|
|||
ECHO_REQUEST = 0x0541BD72
|
||||
ECHO_RESULT = 0xAB2FF7D4
|
||||
|
||||
//GetServerConfigurationOperation
|
||||
GET_SERVER_CONFIGURATION_REQUEST = 0xC89C311F
|
||||
GET_SERVER_CONFIGURATION_RESULT = 0xA1A50921
|
||||
|
||||
//CheckUsernameAvailabilityOperation
|
||||
CHECK_USERNAME_AVAILABILITY_REQUEST = 0xA9501A55
|
||||
CHECK_USERNAME_AVAILABILITY_RESULT = 0x067190FF
|
||||
|
@ -101,6 +105,8 @@ var OPCODES = Opcodes{
|
|||
0x00000000: "N/A",
|
||||
0x0541BD72: "ECHO",
|
||||
0xAB2FF7D4: "Echo",
|
||||
0xC89C311F: "GET_SERVER_CONFIGURATION",
|
||||
0xA1A50921: "GetServerConfiguration",
|
||||
0xA9501A55: "CHECK_USERNAME_AVAILABILITY",
|
||||
0x067190FF: "CheckUsernameAvailability",
|
||||
0x48DB23BF: "SIGNUP",
|
||||
|
|
|
@ -56,6 +56,7 @@ type (
|
|||
Filter(predicate SpiFilterPredicate) ISpiCollection
|
||||
Map(predicate SpiMapPredicate) ISpiCollection
|
||||
Echo(document IDocument, editor Identity) (IEchoResult, error)
|
||||
GetServerConfiguration(editor Identity) (IGetServerConfigurationResult, error)
|
||||
CheckUsernameAvailability(username string, editor Identity) (ICheckUsernameAvailabilityResult, error)
|
||||
Signup(username string, email string, password string, editor Identity) (ISignupResult, error)
|
||||
ResendVerificationCode(email string, editor Identity) (IResendVerificationCodeResult, error)
|
||||
|
@ -83,6 +84,12 @@ type (
|
|||
Document() IDocument
|
||||
}
|
||||
|
||||
IGetServerConfigurationResult interface {
|
||||
Product() string
|
||||
Environment() string
|
||||
Fqdn() string
|
||||
}
|
||||
|
||||
ICheckUsernameAvailabilityResult interface {
|
||||
IsAvailable() bool
|
||||
}
|
||||
|
|
|
@ -258,6 +258,7 @@ type (
|
|||
RemoveSpi(id int64, editor Identity) (ISpi, error)
|
||||
RemoveSpiAtomic(transaction ITransaction, id int64, editor Identity) (ISpi, error)
|
||||
Echo(document IDocument, editor Identity) (IEchoResult, error)
|
||||
GetServerConfiguration(editor Identity) (IGetServerConfigurationResult, error)
|
||||
CheckUsernameAvailability(username string, editor Identity) (ICheckUsernameAvailabilityResult, error)
|
||||
Signup(username string, email string, password string, editor Identity) (ISignupResult, error)
|
||||
ResendVerificationCode(email string, editor Identity) (IResendVerificationCodeResult, error)
|
||||
|
@ -298,6 +299,7 @@ type (
|
|||
NewActivityPubFollower(id int64, handle string, inbox string, subject string, activity string, accepted bool) (IActivityPubFollower, error)
|
||||
NewSpi() (ISpi, error)
|
||||
NewEchoResult(document IDocument, ignored interface{}) IEchoResult
|
||||
NewGetServerConfigurationResult(product string, environment string, fqdn string, ignored interface{}) IGetServerConfigurationResult
|
||||
NewCheckUsernameAvailabilityResult(isAvailable bool, ignored interface{}) ICheckUsernameAvailabilityResult
|
||||
NewSignupResult(token string, code string, ignored interface{}) ISignupResult
|
||||
NewResendVerificationCodeResult(code string, ignored interface{}) IResendVerificationCodeResult
|
||||
|
|
|
@ -1033,6 +1033,7 @@ type IDispatcher interface {
|
|||
// the transaction if used in an x.Atomic context. This method is synchronous.
|
||||
RemoveSpi(id int64) ISpi
|
||||
Echo(document IDocument) (IEchoResult, error)
|
||||
GetServerConfiguration() (IGetServerConfigurationResult, error)
|
||||
CheckUsernameAvailability(username string) (ICheckUsernameAvailabilityResult, error)
|
||||
Signup(username string, email string, password string) (ISignupResult, error)
|
||||
ResendVerificationCode(email string) (IResendVerificationCodeResult, error)
|
||||
|
@ -1125,6 +1126,8 @@ type IDispatcher interface {
|
|||
NewSpis() ISpiCollection
|
||||
// NewEchoResult creates a new result container for 'Echo' system action.
|
||||
NewEchoResult(document IDocument) IEchoResult
|
||||
// NewGetServerConfigurationResult creates a new result container for 'Get Server Configuration' system action.
|
||||
NewGetServerConfigurationResult(product string, environment string, fqdn string) IGetServerConfigurationResult
|
||||
// NewCheckUsernameAvailabilityResult creates a new result container for 'Check Username Availability' system action.
|
||||
NewCheckUsernameAvailabilityResult(isAvailable bool) ICheckUsernameAvailabilityResult
|
||||
// NewSignupResult creates a new result container for 'Signup' system action.
|
||||
|
|
|
@ -25,6 +25,16 @@ func (api *api) Echo(request *EchoRequest) (*EchoResult, error) {
|
|||
}
|
||||
}
|
||||
|
||||
func (api *api) GetServerConfiguration(request *GetServerConfigurationRequest) (*GetServerConfigurationResult, error) {
|
||||
result, err := api.call(GET_SERVER_CONFIGURATION_REQUEST, request)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*GetServerConfigurationResult), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (api *api) CheckUsernameAvailability(request *CheckUsernameAvailabilityRequest) (*CheckUsernameAvailabilityResult, error) {
|
||||
result, err := api.call(CHECK_USERNAME_AVAILABILITY_REQUEST, request)
|
||||
|
||||
|
@ -238,6 +248,7 @@ func (api *api) GetInbox(request *GetInboxRequest) (*GetInboxResult, error) {
|
|||
func init() {
|
||||
API_RESULT[SYSTEM_CALL_RESULT] = SystemCallResult{}
|
||||
API_RESULT[ECHO_RESULT] = EchoResult{}
|
||||
API_RESULT[GET_SERVER_CONFIGURATION_RESULT] = GetServerConfigurationResult{}
|
||||
API_RESULT[CHECK_USERNAME_AVAILABILITY_RESULT] = CheckUsernameAvailabilityResult{}
|
||||
API_RESULT[SIGNUP_RESULT] = SignupResult{}
|
||||
API_RESULT[RESEND_VERIFICATION_CODE_RESULT] = ResendVerificationCodeResult{}
|
||||
|
|
|
@ -1098,6 +1098,10 @@ func (conductor *conductor) Echo(document IDocument, editor Identity) (IEchoResu
|
|||
return conductor.spiManager.Echo(document, editor)
|
||||
}
|
||||
|
||||
func (conductor *conductor) GetServerConfiguration(editor Identity) (IGetServerConfigurationResult, error) {
|
||||
return conductor.spiManager.GetServerConfiguration(editor)
|
||||
}
|
||||
|
||||
func (conductor *conductor) CheckUsernameAvailability(username string, editor Identity) (ICheckUsernameAvailabilityResult, error) {
|
||||
return conductor.spiManager.CheckUsernameAvailability(username, editor)
|
||||
}
|
||||
|
@ -1254,6 +1258,10 @@ func (conductor *conductor) NewEchoResult(document IDocument, _ interface{}) IEc
|
|||
return NewEchoResult(document, nil)
|
||||
}
|
||||
|
||||
func (conductor *conductor) NewGetServerConfigurationResult(product string, environment string, fqdn string, _ interface{}) IGetServerConfigurationResult {
|
||||
return NewGetServerConfigurationResult(product, environment, fqdn, nil)
|
||||
}
|
||||
|
||||
func (conductor *conductor) NewCheckUsernameAvailabilityResult(isAvailable bool, _ interface{}) ICheckUsernameAvailabilityResult {
|
||||
return NewCheckUsernameAvailabilityResult(isAvailable, nil)
|
||||
}
|
||||
|
|
|
@ -244,6 +244,10 @@ func (dispatcher *dispatcher) Echo(document IDocument) (IEchoResult, error) {
|
|||
return dispatcher.conductor.SpiManager().Echo(document, dispatcher.identity)
|
||||
}
|
||||
|
||||
func (dispatcher *dispatcher) GetServerConfiguration() (IGetServerConfigurationResult, error) {
|
||||
return dispatcher.conductor.SpiManager().GetServerConfiguration(dispatcher.identity)
|
||||
}
|
||||
|
||||
func (dispatcher *dispatcher) CheckUsernameAvailability(username string) (ICheckUsernameAvailabilityResult, error) {
|
||||
return dispatcher.conductor.SpiManager().CheckUsernameAvailability(username, dispatcher.identity)
|
||||
}
|
||||
|
|
|
@ -228,6 +228,53 @@ func (manager *spiManager) Echo(document IDocument, editor Identity) (result IEc
|
|||
}
|
||||
}
|
||||
|
||||
//region IGetServerConfigurationResult Implementation
|
||||
|
||||
type getServerConfigurationResult struct {
|
||||
product string
|
||||
environment string
|
||||
fqdn string
|
||||
}
|
||||
|
||||
func NewGetServerConfigurationResult(product string, environment string, fqdn string, _ interface{}) IGetServerConfigurationResult {
|
||||
return &getServerConfigurationResult{
|
||||
product: product,
|
||||
environment: environment,
|
||||
fqdn: fqdn,
|
||||
}
|
||||
}
|
||||
|
||||
func (result getServerConfigurationResult) Product() string {
|
||||
return result.product
|
||||
}
|
||||
|
||||
func (result getServerConfigurationResult) Environment() string {
|
||||
return result.environment
|
||||
}
|
||||
|
||||
func (result getServerConfigurationResult) Fqdn() string {
|
||||
return result.fqdn
|
||||
}
|
||||
|
||||
//endregion
|
||||
|
||||
func (manager *spiManager) GetServerConfiguration(editor Identity) (result IGetServerConfigurationResult, err error) {
|
||||
defer func() {
|
||||
if reason := recover(); reason != nil {
|
||||
err = manager.Error(reason)
|
||||
}
|
||||
}()
|
||||
|
||||
editor.Lock(GET_SERVER_CONFIGURATION_REQUEST)
|
||||
defer editor.Unlock(GET_SERVER_CONFIGURATION_REQUEST)
|
||||
|
||||
if result, err = commands.GetServerConfiguration(NewDispatcher(Conductor, editor)); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result, nil
|
||||
}
|
||||
}
|
||||
|
||||
//region ICheckUsernameAvailabilityResult Implementation
|
||||
|
||||
type checkUsernameAvailabilityResult struct {
|
||||
|
|
|
@ -160,6 +160,17 @@ func TestSpiManager_Echo(test *testing.T) {
|
|||
_ = result
|
||||
}
|
||||
|
||||
func TestSpiManager_GetServerConfiguration(test *testing.T) {
|
||||
manager := Conductor.SpiManager()
|
||||
|
||||
result, err := manager.GetServerConfiguration(nil)
|
||||
if err != nil {
|
||||
test.Fatal(err)
|
||||
}
|
||||
|
||||
_ = result
|
||||
}
|
||||
|
||||
func TestSpiManager_CheckUsernameAvailability(test *testing.T) {
|
||||
manager := Conductor.SpiManager()
|
||||
|
||||
|
|
|
@ -8,6 +8,10 @@ func (dispatcher *dispatcher) NewEchoResult(document IDocument) IEchoResult {
|
|||
return NewEchoResult(document, nil)
|
||||
}
|
||||
|
||||
func (dispatcher *dispatcher) NewGetServerConfigurationResult(product string, environment string, fqdn string) IGetServerConfigurationResult {
|
||||
return NewGetServerConfigurationResult(product, environment, fqdn, nil)
|
||||
}
|
||||
|
||||
func (dispatcher *dispatcher) NewCheckUsernameAvailabilityResult(isAvailable bool) ICheckUsernameAvailabilityResult {
|
||||
return NewCheckUsernameAvailabilityResult(isAvailable, nil)
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue