Skip to content

Commit

Permalink
Restructure project - step 1
Browse files Browse the repository at this point in the history
  • Loading branch information
p4tin committed Jan 16, 2017
1 parent 941608c commit 69bc0b0
Show file tree
Hide file tree
Showing 43 changed files with 719 additions and 840 deletions.
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
.idea

/app/vendor/github.com/

goaws
goaws_linux_amd64

venv/
logs/
*.log
26 changes: 0 additions & 26 deletions Godeps/Godeps.json

This file was deleted.

5 changes: 0 additions & 5 deletions Godeps/Readme

This file was deleted.

139 changes: 139 additions & 0 deletions app/cmd/goaws.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
package main

import (
"flag"
"github.com/gorilla/mux"
"io"
"log"
"net/http"
"os"

sns "github.com/p4tin/goaws/app/gosns"
sqs "github.com/p4tin/goaws/app/gosqs"
"github.com/p4tin/goaws/app/conf"
)

var RoutingTable = map[string]interface{} {
// SQS
"ListQueues": sqs.ListQueues,
"CreateQueue": sqs.CreateQueue,
"GetQueueAttributes": sqs.GetQueueAttributes,
"SetQueueAttributes": sqs.SetQueueAttributes,
"SendMessage": sqs.SendMessage,
"ReceiveMessage": sqs.ReceiveMessage,
"DeleteMessage": sqs.DeleteMessage,
"GetQueueUrl": sqs.GetQueueUrl,
"PurgeQueue": sqs.PurgeQueue,
"DeleteQueue": sqs.DeleteQueue,

// SNS
"ListTopics": sns.ListTopics,
"CreateTopic": sns.CreateTopic,
"DeleteTopic": sns.DeleteTopic,
"Subscribe": sns.Subscribe,
"SetSubscriptionAttributes": sns.SetSubscriptionAttributes,
"ListSubscriptionsByTopic": sns.ListSubscriptionsByTopic,
"ListSubscriptions": sns.ListSubscriptions,
"Unsubscribe": sns.Unsubscribe,
"Publish": sns.Publish,
}

func BadRequest(w http.ResponseWriter, req *http.Request) {
resp := "Bad Request"
w.WriteHeader(http.StatusBadRequest)
io.WriteString(w, resp)
}

// hello world, the web server
func IndexServer(w http.ResponseWriter, req *http.Request) {
if val, ok := RoutingTable[req.FormValue("Action")]; ok {
val.(func(http.ResponseWriter, *http.Request))(w, req)
} else {
log.Println("Action:", req.FormValue("Action"))
BadRequest(w, req)
}

//
//switch req.FormValue("Action") {
///*** SQS Actions ***/
//case "ListQueues":
// sqs.ListQueues(w, req)
//case "CreateQueue":
// sqs.CreateQueue(w, req)
//case "GetQueueAttributes":
// sqs.GetQueueAttributes(w, req)
//case "SetQueueAttributes":
// sqs.SetQueueAttributes(w, req)
//case "SendMessage":
// sqs.SendMessage(w, req)
//case "ReceiveMessage":
// sqs.ReceiveMessage(w, req)
//case "DeleteMessage":
// sqs.DeleteMessage(w, req)
//case "GetQueueUrl":
// sqs.GetQueueUrl(w, req)
//case "PurgeQueue":
// sqs.PurgeQueue(w, req)
//case "DeleteQueue":
// sqs.DeleteQueue(w, req)
//
///*** SNS Actions ***/
//case "ListTopics":
// sns.ListTopics(w, req)
//case "CreateTopic":
// sns.CreateTopic(w, req)
//case "DeleteTopic":
// sns.DeleteTopic(w, req)
//case "Subscribe":
// sns.Subscribe(w, req)
//case "SetSubscriptionAttributes":
// sns.SetSubscriptionAttributes(w, req)
//case "ListSubscriptionsByTopic":
// sns.ListSubscriptionsByTopic(w, req)
//case "ListSubscriptions":
// sns.ListSubscriptions(w, req)
//case "Unsubscribe":
// sns.Unsubscribe(w, req)
//case "Publish":
// sns.Publish(w, req)

/*** Bad Request ***/
//default:
// log.Println("Action:", req.FormValue("Action"))
// BadRequest(w, req)
//}
}

func main() {
env := "Local"
if len(os.Args) == 2 {
env = os.Args[1]
}

var filename string
flag.StringVar(&filename, "config", "", "config file location + name")
flag.Parse()

portNumbers := conf.LoadYamlConfig(filename, env)

r := mux.NewRouter()
r.HandleFunc("/", IndexServer).Methods("GET", "POST")
r.HandleFunc("/queue/{queueName}", IndexServer).Methods("GET", "POST")

if len(portNumbers) == 1 {
log.Printf("GoAws listening on: 0.0.0.0:%s\n", portNumbers[0])
err := http.ListenAndServe("0.0.0.0:" + portNumbers[0], r)
log.Fatal(err)
} else if len(portNumbers) == 2 {
go func() {
log.Printf("GoAws listening on: 0.0.0.0:%s\n", portNumbers[0])
err := http.ListenAndServe("0.0.0.0:" + portNumbers[0], r)
log.Fatal(err)
}()
log.Printf("GoAws listening on: 0.0.0.0:%s\n", portNumbers[1])
err := http.ListenAndServe("0.0.0.0:" + portNumbers[1], r)
log.Fatal(err)
} else {
log.Fatal("Not enough or too many ports defined to start GoAws.")
}
}
23 changes: 23 additions & 0 deletions app/common.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package app

/*** Common ***/
type ResponseMetadata struct {
RequestId string `xml:"RequestId"`
}


/*** Error Responses ***/
type ErrorResult struct {
Type string `xml:"Type,omitempty"`
Code string `xml:"Code,omitempty"`
Message string `xml:"Message,omitempty"`
RequestId string `xml:"RequestId,omitempty"`
}

type ErrorResponse struct {
Result ErrorResult `xml:"Error"`
}




File renamed without changes.
File renamed without changes.
6 changes: 3 additions & 3 deletions conf/config.go → app/conf/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import (
"path/filepath"

"github.com/ghodss/yaml"
"github.com/p4tin/goaws/common"
sns "github.com/p4tin/goaws/gosns"
sqs "github.com/p4tin/goaws/gosqs"
"github.com/p4tin/goaws/app/common"
sns "github.com/p4tin/goaws/app/gosns"
sqs "github.com/p4tin/goaws/app/gosqs"
)

type EnvSubsciption struct {
Expand Down
4 changes: 2 additions & 2 deletions conf/config_test.go → app/conf/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package conf

import (
"testing"
"github.com/p4tin/goaws/gosns"
"github.com/p4tin/goaws/gosqs"
"github.com/p4tin/goaws/app/gosns"
"github.com/p4tin/goaws/app/gosqs"
)

func TestConfig_NoQueuesOrTopics(t *testing.T) {
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
39 changes: 20 additions & 19 deletions gosns/gosns.go → app/gosns/gosns.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,9 @@ import (
"sync"
"time"

"github.com/p4tin/goaws/common"
sqs "github.com/p4tin/goaws/gosqs"
"github.com/p4tin/goaws/app"
"github.com/p4tin/goaws/app/common"
sqs "github.com/p4tin/goaws/app/gosqs"
)

type SnsErrorType struct {
Expand Down Expand Up @@ -77,16 +78,16 @@ func init() {
func ListTopics(w http.ResponseWriter, req *http.Request) {
content := req.FormValue("ContentType")

respStruct := ListTopicsResponse{}
respStruct := app.ListTopicsResponse{}
respStruct.Xmlns = "http://queue.amazonaws.com/doc/2012-11-05/"
uuid, _ := common.NewUUID()
respStruct.Metadata = ResponseMetadata{RequestId: uuid}
respStruct.Metadata = app.ResponseMetadata{RequestId: uuid}

respStruct.Result.Topics.Member = make([]TopicArnResult, 0, 0)
respStruct.Result.Topics.Member = make([]app.TopicArnResult, 0, 0)
log.Println("Listing Topics")
for _, topic := range SyncTopics.Topics {
fmt.Println(topic)
ta := TopicArnResult{TopicArn: topic.Arn}
ta := app.TopicArnResult{TopicArn: topic.Arn}
respStruct.Result.Topics.Member = append(respStruct.Result.Topics.Member, ta)
}

Expand All @@ -110,7 +111,7 @@ func CreateTopic(w http.ResponseWriter, req *http.Request) {
SyncTopics.RUnlock()
}
uuid, _ := common.NewUUID()
respStruct := CreateTopicResponse{"http://queue.amazonaws.com/doc/2012-11-05/", CreateTopicResult{TopicArn: topicArn}, ResponseMetadata{RequestId: uuid}}
respStruct := app.CreateTopicResponse{"http://queue.amazonaws.com/doc/2012-11-05/", app.CreateTopicResult{TopicArn: topicArn}, app.ResponseMetadata{RequestId: uuid}}
SendResponseBack(w, req, respStruct, content)
}

Expand All @@ -137,7 +138,7 @@ func Subscribe(w http.ResponseWriter, req *http.Request) {

//Create the response
uuid, _ := common.NewUUID()
respStruct := SubscribeResponse{"http://queue.amazonaws.com/doc/2012-11-05/", SubscribeResult{SubscriptionArn: subArn}, ResponseMetadata{RequestId: uuid}}
respStruct := app.SubscribeResponse{"http://queue.amazonaws.com/doc/2012-11-05/", app.SubscribeResult{SubscriptionArn: subArn}, app.ResponseMetadata{RequestId: uuid}}
SendResponseBack(w, req, respStruct, content)
} else {
createErrorResponse(w, req, "TopicNotFound")
Expand All @@ -148,14 +149,14 @@ func ListSubscriptions(w http.ResponseWriter, req *http.Request) {
content := req.FormValue("ContentType")

uuid, _ := common.NewUUID()
respStruct := ListSubscriptionsResponse{}
respStruct := app.ListSubscriptionsResponse{}
respStruct.Xmlns = "http://queue.amazonaws.com/doc/2012-11-05/"
respStruct.Metadata.RequestId = uuid
respStruct.Result.Subscriptions.Member = make([]TopicMemberResult, 0, 0)
respStruct.Result.Subscriptions.Member = make([]app.TopicMemberResult, 0, 0)

for _, topic := range SyncTopics.Topics {
for _, sub := range topic.Subscriptions {
tar := TopicMemberResult{TopicArn: topic.Arn, Protocol: sub.Protocol,
tar := app.TopicMemberResult{TopicArn: topic.Arn, Protocol: sub.Protocol,
SubscriptionArn: sub.SubscriptionArn, Endpoint: sub.EndPoint}
respStruct.Result.Subscriptions.Member = append(respStruct.Result.Subscriptions.Member, tar)
}
Expand All @@ -173,13 +174,13 @@ func ListSubscriptionsByTopic(w http.ResponseWriter, req *http.Request) {

if topic, ok := SyncTopics.Topics[topicName]; ok {
uuid, _ := common.NewUUID()
respStruct := ListSubscriptionsByTopicResponse{}
respStruct := app.ListSubscriptionsByTopicResponse{}
respStruct.Xmlns = "http://queue.amazonaws.com/doc/2012-11-05/"
respStruct.Metadata.RequestId = uuid
respStruct.Result.Subscriptions.Member = make([]TopicMemberResult, 0, 0)
respStruct.Result.Subscriptions.Member = make([]app.TopicMemberResult, 0, 0)

for _, sub := range topic.Subscriptions {
tar := TopicMemberResult{TopicArn: topic.Arn, Protocol: sub.Protocol,
tar := app.TopicMemberResult{TopicArn: topic.Arn, Protocol: sub.Protocol,
SubscriptionArn: sub.SubscriptionArn, Endpoint: sub.EndPoint}
respStruct.Result.Subscriptions.Member = append(respStruct.Result.Subscriptions.Member, tar)
}
Expand Down Expand Up @@ -211,7 +212,7 @@ func SetSubscriptionAttributes(w http.ResponseWriter, req *http.Request) {
log.Println("After - Subs:", sub.EndPoint, "Raw:", sub.Raw)
//Good Response == return
uuid, _ := common.NewUUID()
respStruct := SetSubscriptionAttributesResponse{"http://queue.amazonaws.com/doc/2012-11-05/", ResponseMetadata{RequestId: uuid}}
respStruct := app.SetSubscriptionAttributesResponse{"http://queue.amazonaws.com/doc/2012-11-05/", app.ResponseMetadata{RequestId: uuid}}
SendResponseBack(w, req, respStruct, content)
return
}
Expand Down Expand Up @@ -239,7 +240,7 @@ func Unsubscribe(w http.ResponseWriter, req *http.Request) {
SyncTopics.Unlock()

uuid, _ := common.NewUUID()
respStruct := UnsubscribeResponse{"http://queue.amazonaws.com/doc/2012-11-05/", ResponseMetadata{RequestId: uuid}}
respStruct := app.UnsubscribeResponse{"http://queue.amazonaws.com/doc/2012-11-05/", app.ResponseMetadata{RequestId: uuid}}
SendResponseBack(w, req, respStruct, content)
return
}
Expand All @@ -263,7 +264,7 @@ func DeleteTopic(w http.ResponseWriter, req *http.Request) {
delete(SyncTopics.Topics, topicName)
SyncTopics.Unlock()
uuid, _ := common.NewUUID()
respStruct := DeleteTopicResponse{"http://queue.amazonaws.com/doc/2012-11-05/", ResponseMetadata{RequestId: uuid}}
respStruct := app.DeleteTopicResponse{"http://queue.amazonaws.com/doc/2012-11-05/", app.ResponseMetadata{RequestId: uuid}}
SendResponseBack(w, req, respStruct, content)
} else {
createErrorResponse(w, req, "TopicNotFound")
Expand Down Expand Up @@ -328,7 +329,7 @@ func Publish(w http.ResponseWriter, req *http.Request) {
//Create the response
msgId, _ := common.NewUUID()
uuid, _ := common.NewUUID()
respStruct := PublishResponse{"http://queue.amazonaws.com/doc/2012-11-05/", PublishResult{MessageId: msgId}, ResponseMetadata{RequestId: uuid}}
respStruct := app.PublishResponse{"http://queue.amazonaws.com/doc/2012-11-05/", app.PublishResult{MessageId: msgId}, app.ResponseMetadata{RequestId: uuid}}
SendResponseBack(w, req, respStruct, content)
}

Expand Down Expand Up @@ -387,7 +388,7 @@ func extractMessageFromJSON(msg string, protocol string) (string, error) {

func createErrorResponse(w http.ResponseWriter, req *http.Request, err string) {
er := SnsErrors[err]
respStruct := ErrorResponse{ErrorResult{Type: er.Type, Code: er.Code, Message: er.Message, RequestId: "00000000-0000-0000-0000-000000000000"}}
respStruct := app.ErrorResponse{app.ErrorResult{Type: er.Type, Code: er.Code, Message: er.Message, RequestId: "00000000-0000-0000-0000-000000000000"}}

w.WriteHeader(er.HttpError)
enc := xml.NewEncoder(w)
Expand Down
File renamed without changes.
File renamed without changes.

0 comments on commit 69bc0b0

Please sign in to comment.