Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .drone.jsonnet
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
[{
kind: "pipeline",
type: "docker",
trigger: {
event: [ "push" ]
},
steps: [
{
name: "test",
Expand Down
23 changes: 23 additions & 0 deletions platform/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -191,3 +191,26 @@ func (c *Client) SetDkimKey(key string) error {
}
return nil
}

func (c *Client) GetMailRelay() (*MailRelay, error) {
c.logger.Info("get mail relay")
resp, err := c.client.Get("http://unix/mail/relay")
if err != nil {
return nil, err
}
if resp.StatusCode == 404 {
return &MailRelay{Enabled: false}, nil
}
if resp.StatusCode != 200 {
return nil, fmt.Errorf("get mail relay, %s", resp.Status)
}
bodyBytes, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
var responseJson MailRelayResponse
if err := json.Unmarshal(bodyBytes, &responseJson); err != nil {
return nil, err
}
return &responseJson.Data, nil
}
9 changes: 9 additions & 0 deletions platform/mail_relay.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package platform

type MailRelay struct {
Enabled bool `json:"enabled"`
Host string `json:"host"`
Port int `json:"port"`
Login string `json:"login"`
Password string `json:"password"`
}
6 changes: 6 additions & 0 deletions platform/mail_relay_response.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package platform

type MailRelayResponse struct {
Success bool `json:"success"`
Data MailRelay `json:"data"`
}
85 changes: 85 additions & 0 deletions platform/mail_relay_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package platform

import (
"bytes"
"io"
"net/http"
"net/url"
"testing"

"github.com/stretchr/testify/assert"
"github.com/syncloud/golib/log"
)

type MailRelayClientStub struct {
url string
body string
}

func (h *MailRelayClientStub) Get(url string) (resp *http.Response, err error) {
h.url = url
return &http.Response{
StatusCode: 200,
Body: io.NopCloser(bytes.NewReader([]byte(h.body))),
}, nil
}

func (h *MailRelayClientStub) Post(_ string, _ url.Values) (resp *http.Response, err error) {
return nil, nil
}

func TestClient_GetMailRelay_Enabled(t *testing.T) {
httpClient := &MailRelayClientStub{body: `
{
"success": true,
"data": {
"enabled": true,
"host": "mail-relay.syncloud.it",
"port": 587,
"login": "device.syncloud.it",
"password": "the-token"
}
}
`}
client := &Client{client: httpClient, logger: log.Logger()}

relay, err := client.GetMailRelay()
assert.NoError(t, err)
assert.Equal(t, "http://unix/mail/relay", httpClient.url)
assert.True(t, relay.Enabled)
assert.Equal(t, "mail-relay.syncloud.it", relay.Host)
assert.Equal(t, 587, relay.Port)
assert.Equal(t, "device.syncloud.it", relay.Login)
assert.Equal(t, "the-token", relay.Password)
}

func TestClient_GetMailRelay_Disabled(t *testing.T) {
httpClient := &MailRelayClientStub{body: `{"success": true, "data": {"enabled": false}}`}
client := &Client{client: httpClient, logger: log.Logger()}

relay, err := client.GetMailRelay()
assert.NoError(t, err)
assert.False(t, relay.Enabled)
assert.Empty(t, relay.Host)
}

type MailRelayNotFoundStub struct{}

func (h *MailRelayNotFoundStub) Get(_ string) (resp *http.Response, err error) {
return &http.Response{
StatusCode: 404,
Body: io.NopCloser(bytes.NewReader([]byte("not found"))),
}, nil
}

func (h *MailRelayNotFoundStub) Post(_ string, _ url.Values) (resp *http.Response, err error) {
return nil, nil
}

func TestClient_GetMailRelay_OldPlatformIsDisabled(t *testing.T) {
client := &Client{client: &MailRelayNotFoundStub{}, logger: log.Logger()}

relay, err := client.GetMailRelay()
assert.NoError(t, err)
assert.False(t, relay.Enabled)
}