Skip to content

Commit 68ccd5f

Browse files
feat: add actor
1 parent 870dc04 commit 68ccd5f

31 files changed

+127
-112
lines changed

internal/core/bus.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ type EventTrimStart struct {
1818

1919
type Bus struct {
2020
Mutex sync.Mutex
21-
EnvelopeCreated []func(cc *Context, evt EventEnvelopeCreated)
22-
EnvelopeDeleted []func(cc *Context, evt EventEnvelopeDeleted)
23-
TrimStart func(cc *Context, evt EventTrimStart)
21+
EnvelopeCreated []func(cc Context, evt EventEnvelopeCreated)
22+
EnvelopeDeleted []func(cc Context, evt EventEnvelopeDeleted)
23+
TrimStart func(cc Context, evt EventTrimStart)
2424
}
2525

2626
func NewBus() *Bus {

internal/core/context.go

+26-11
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,36 @@ import (
77
)
88

99
type Context struct {
10-
Bus *Bus
11-
DB *bun.DB
12-
File FileStore
13-
ctx context.Context
10+
Actor Actor
11+
Bus *Bus
12+
DB *bun.DB
13+
File FileStore
14+
ctx context.Context
1415
}
1516

16-
func (a App) Context(ctx context.Context) *Context {
17-
return &Context{
18-
Bus: a.Bus,
19-
DB: a.DB,
20-
File: a.File,
21-
ctx: ctx,
17+
func (a App) Context(ctx context.Context) Context {
18+
return Context{
19+
Actor: ActorAnon,
20+
Bus: a.Bus,
21+
DB: a.DB,
22+
File: a.File,
23+
ctx: ctx,
2224
}
2325
}
2426

25-
func (c *Context) Context() context.Context {
27+
func (c Context) WithActor(actor Actor) Context {
28+
c.Actor = actor
29+
return c
30+
}
31+
32+
func (c Context) Context() context.Context {
2633
return c.ctx
2734
}
35+
36+
type Actor int
37+
38+
const (
39+
ActorAnon Actor = iota
40+
ActorUser
41+
ActorSystem
42+
)

internal/db/db.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,13 @@ func Migrate(cc context.Context, bunDB *bun.DB) error {
5555
return nil
5656
}
5757

58-
func Size(cc *core.Context) (int64, error) {
58+
func Size(cc core.Context) (int64, error) {
5959
var size int64
6060
err := cc.DB.QueryRow("SELECT page_count * page_size as size FROM pragma_page_count(), pragma_page_size();").Scan(&size)
6161
return size, err
6262
}
6363

64-
func Vacuum(cc *core.Context) error {
64+
func Vacuum(cc core.Context) error {
6565
_, err := cc.DB.Exec("VACUUM;")
6666
return err
6767
}

internal/db/endpoint.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@ import (
55
"github.com/ItsNotGoodName/smtpbridge/internal/endpoints"
66
)
77

8-
func EndpointGet(cc *core.Context, id int64) (endpoints.Endpoint, error) {
8+
func EndpointGet(cc core.Context, id int64) (endpoints.Endpoint, error) {
99
var end endpoints.Endpoint
1010
err := cc.DB.NewSelect().Model(&end).Where("id = ?", id).Scan(cc.Context())
1111
return end, err
1212
}
1313

14-
func EndpointList(cc *core.Context) ([]endpoints.Endpoint, error) {
14+
func EndpointList(cc core.Context) ([]endpoints.Endpoint, error) {
1515
var ends []endpoints.Endpoint
1616
err := cc.DB.NewSelect().Model(&ends).Scan(cc.Context())
1717
return ends, err
1818
}
1919

20-
func EndpointListByRule(cc *core.Context, id int64) ([]endpoints.Endpoint, error) {
20+
func EndpointListByRule(cc core.Context, id int64) ([]endpoints.Endpoint, error) {
2121
var ends []endpoints.Endpoint
2222
err := cc.
2323
DB.

internal/db/envelope.go

+13-13
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,17 @@ import (
1515
"github.com/uptrace/bun"
1616
)
1717

18-
func EnvelopeDeleteAll(cc *core.Context) error {
18+
func EnvelopeDeleteAll(cc core.Context) error {
1919
_, err := cc.DB.NewDelete().Model(&envelope.Message{}).Where("1=1").Exec(cc.Context())
2020
return err
2121
}
2222

23-
func EnvelopeDelete(cc *core.Context, id int64) error {
23+
func EnvelopeDelete(cc core.Context, id int64) error {
2424
_, err := cc.DB.NewDelete().Model(&envelope.Message{}).Where("id = ?", id).Exec(cc.Context())
2525
return err
2626
}
2727

28-
func EnvelopeCreate(cc *core.Context, msg *envelope.Message, atts []*envelope.Attachment) (int64, []int64, error) {
28+
func EnvelopeCreate(cc core.Context, msg *envelope.Message, atts []*envelope.Attachment) (int64, []int64, error) {
2929
err := cc.DB.RunInTx(cc.Context(), &sql.TxOptions{}, func(ctx context.Context, tx bun.Tx) error {
3030
_, err := tx.NewInsert().Model(msg).Exec(ctx)
3131
if err != nil {
@@ -54,7 +54,7 @@ func EnvelopeCreate(cc *core.Context, msg *envelope.Message, atts []*envelope.At
5454
return msg.ID, attIDS, nil
5555
}
5656

57-
func EnvelopeMessageList(cc *core.Context, page pagination.Page, filter envelope.MessageFilter) (envelope.MessageListResult, error) {
57+
func EnvelopeMessageList(cc core.Context, page pagination.Page, filter envelope.MessageFilter) (envelope.MessageListResult, error) {
5858
var msgs []*envelope.Message
5959
q := cc.DB.NewSelect().Model(&msgs).Limit(page.Limit()).Offset(page.Offset())
6060

@@ -90,7 +90,7 @@ func EnvelopeMessageList(cc *core.Context, page pagination.Page, filter envelope
9090
}, nil
9191
}
9292

93-
func EnvelopeGet(cc *core.Context, id int64) (envelope.Envelope, error) {
93+
func EnvelopeGet(cc core.Context, id int64) (envelope.Envelope, error) {
9494
ctx := cc.Context()
9595
msg := &envelope.Message{}
9696
err := cc.DB.NewSelect().Model(msg).Where("id = ?", id).Scan(ctx, msg)
@@ -110,19 +110,19 @@ func EnvelopeGet(cc *core.Context, id int64) (envelope.Envelope, error) {
110110
}, nil
111111
}
112112

113-
func EnvelopeMessageHTMLGet(cc *core.Context, id int64) (string, error) {
113+
func EnvelopeMessageHTMLGet(cc core.Context, id int64) (string, error) {
114114
return queries.New(cc.DB.DB).GetEnvelopeMessageHTML(cc.Context(), id)
115115
}
116116

117-
func EnvelopeCount(cc *core.Context) (int, error) {
117+
func EnvelopeCount(cc core.Context) (int, error) {
118118
return cc.DB.NewSelect().Model(&envelope.Message{}).Count(cc.Context())
119119
}
120120

121-
func EnvelopeAttachmentCount(cc *core.Context) (int, error) {
121+
func EnvelopeAttachmentCount(cc core.Context) (int, error) {
122122
return cc.DB.NewSelect().Model(&envelope.Attachment{}).Where("message_id IS NOT NULL").Count(cc.Context())
123123
}
124124

125-
func EnvelopeAttachmentList(cc *core.Context, page pagination.Page, filter envelope.AttachmentFilter) (envelope.AttachmentListResult, error) {
125+
func EnvelopeAttachmentList(cc core.Context, page pagination.Page, filter envelope.AttachmentFilter) (envelope.AttachmentListResult, error) {
126126
var atts []*envelope.Attachment
127127
q := cc.DB.NewSelect().Model(&atts).Limit(page.Limit()).Offset(page.Offset()).Where("message_id IS NOT NULL")
128128

@@ -153,24 +153,24 @@ func EnvelopeAttachmentList(cc *core.Context, page pagination.Page, filter envel
153153
}, nil
154154
}
155155

156-
func EnvelopeAttachmentListOrphan(cc *core.Context, limit int) ([]*envelope.Attachment, error) {
156+
func EnvelopeAttachmentListOrphan(cc core.Context, limit int) ([]*envelope.Attachment, error) {
157157
var atts []*envelope.Attachment
158158
err := cc.DB.NewSelect().Model(&atts).Limit(limit).Where("message_id IS NULL").Scan(cc.Context())
159159
return atts, err
160160
}
161161

162-
func EnvelopeDeleteUntilCount(cc *core.Context, keep int, olderThan time.Time) (int64, error) {
162+
func EnvelopeDeleteUntilCount(cc core.Context, keep int, olderThan time.Time) (int64, error) {
163163
return queries.New(cc.DB.DB).DeleteEnvelopeUntilCount(cc.Context(), queries.DeleteEnvelopeUntilCountParams{
164164
CreatedAt: olderThan.UTC(),
165165
Limit: int64(keep),
166166
})
167167
}
168168

169-
func EnvelopeDeleteOlderThan(cc *core.Context, olderThan time.Time) (int64, error) {
169+
func EnvelopeDeleteOlderThan(cc core.Context, olderThan time.Time) (int64, error) {
170170
return queries.New(cc.DB.DB).DeleteEnvelopeOlderThan(cc.Context(), olderThan.UTC())
171171
}
172172

173-
func EnvelopeAttachmentDelete(cc *core.Context, att *envelope.Attachment) error {
173+
func EnvelopeAttachmentDelete(cc core.Context, att *envelope.Attachment) error {
174174
err := files.DeleteFile(cc, att)
175175
if err != nil && !errors.Is(err, os.ErrNotExist) {
176176
return err

internal/db/internal.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
"github.com/uptrace/bun"
1515
)
1616

17-
func InternalRuleUpsert(cc *core.Context, r rules.Rule, updatedAt time.Time) error {
17+
func InternalRuleUpsert(cc core.Context, r rules.Rule, updatedAt time.Time) error {
1818
return queries.New(cc.DB.DB).UpsertInternalRule(cc.Context(), queries.UpsertInternalRuleParams{
1919
InternalID: r.InternalID,
2020
Name: r.Name,
@@ -24,7 +24,7 @@ func InternalRuleUpsert(cc *core.Context, r rules.Rule, updatedAt time.Time) err
2424
})
2525
}
2626

27-
func InternalEndpointUpsert(cc *core.Context, end endpoints.Endpoint, updatedAt time.Time) error {
27+
func InternalEndpointUpsert(cc core.Context, end endpoints.Endpoint, updatedAt time.Time) error {
2828
config, err := json.Marshal(end.Config)
2929
if err != nil {
3030
return err
@@ -42,7 +42,7 @@ func InternalEndpointUpsert(cc *core.Context, end endpoints.Endpoint, updatedAt
4242
})
4343
}
4444

45-
func InternalRuleEndpointsUpsert(cc *core.Context, ruleInternalID string, endpointInternalIDs []string, updatedAt time.Time) error {
45+
func InternalRuleEndpointsUpsert(cc core.Context, ruleInternalID string, endpointInternalIDs []string, updatedAt time.Time) error {
4646
if len(endpointInternalIDs) == 0 {
4747
return nil
4848
}
@@ -65,7 +65,7 @@ func InternalRuleEndpointsUpsert(cc *core.Context, ruleInternalID string, endpoi
6565
return nil
6666
}
6767

68-
func InternalDeleteOlderThan(cc *core.Context, date time.Time) error {
68+
func InternalDeleteOlderThan(cc core.Context, date time.Time) error {
6969
return cc.DB.RunInTx(cc.Context(), &sql.TxOptions{}, func(ctx context.Context, tx bun.Tx) error {
7070
for _, table := range []string{"endpoints", "rules", "rules_to_endpoints"} {
7171
_, err := tx.NewDelete().Table(table).Where("updated_at < ?", date).Where("internal = true").Exec(ctx)

internal/db/rules.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,19 @@ import (
88
"github.com/ItsNotGoodName/smtpbridge/internal/rules"
99
)
1010

11-
func RuleList(cc *core.Context) ([]rules.Rule, error) {
11+
func RuleList(cc core.Context) ([]rules.Rule, error) {
1212
var rrules []rules.Rule
1313
err := cc.DB.NewSelect().Model(&rrules).Scan(cc.Context())
1414
return rrules, err
1515
}
1616

17-
func RuleListEnable(cc *core.Context) ([]rules.Rule, error) {
17+
func RuleListEnable(cc core.Context) ([]rules.Rule, error) {
1818
var rrules []rules.Rule
1919
err := cc.DB.NewSelect().Model(&rrules).Where("enable = TRUE").Scan(cc.Context())
2020
return rrules, err
2121
}
2222

23-
func RuleEndpointList(cc *core.Context, ruleID int64) ([]rules.Endpoint, error) {
23+
func RuleEndpointList(cc core.Context, ruleID int64) ([]rules.Endpoint, error) {
2424
var e []rules.Endpoint
2525
err := cc.DB.NewSelect().
2626
ColumnExpr("id, name, (rule_id IS NOT NULL) AS enable").
@@ -31,11 +31,11 @@ func RuleEndpointList(cc *core.Context, ruleID int64) ([]rules.Endpoint, error)
3131
return e, err
3232
}
3333

34-
func RuleIsInternal(cc *core.Context, ruleID int64) (bool, error) {
34+
func RuleIsInternal(cc core.Context, ruleID int64) (bool, error) {
3535
return queries.New(cc.DB.DB).IsRuleInternal(cc.Context(), ruleID)
3636
}
3737

38-
func RuleUpdate(cc *core.Context, ruleID int64, enable bool) (rules.Rule, error) {
38+
func RuleUpdate(cc core.Context, ruleID int64, enable bool) (rules.Rule, error) {
3939
rule := rules.Rule{}
4040
res, err := cc.
4141
DB.

internal/endpoints/endpoints.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ type Config struct {
6767
}
6868

6969
type Sender interface {
70-
Send(cc *core.Context, env envelope.Envelope, config Config) error
70+
Send(cc core.Context, env envelope.Envelope, config Config) error
7171
}
7272

7373
type ParsedEndpoint struct {
@@ -98,7 +98,7 @@ func (e Endpoint) Parse() (ParsedEndpoint, error) {
9898
}, nil
9999
}
100100

101-
func (pe ParsedEndpoint) Send(cc *core.Context, env envelope.Envelope) error {
101+
func (pe ParsedEndpoint) Send(cc core.Context, env envelope.Envelope) error {
102102
if err := pe.Sender.Send(cc, env, pe.Config); err != nil {
103103
return err
104104
}

internal/endpoints/sender_console.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ func NewConsole() Console {
1313
return Console{}
1414
}
1515

16-
func (c Console) Send(cc *core.Context, env envelope.Envelope, config Config) error {
16+
func (c Console) Send(cc core.Context, env envelope.Envelope, config Config) error {
1717
body, err := GetBody(env, config)
1818
if err != nil {
1919
return err

internal/endpoints/sender_shoutrrr.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ func NewShoutrrr(router *router.ServiceRouter) Shoutrrr {
1919
}
2020
}
2121

22-
func (s Shoutrrr) Send(cc *core.Context, env envelope.Envelope, config Config) error {
22+
func (s Shoutrrr) Send(cc core.Context, env envelope.Envelope, config Config) error {
2323
body, err := GetBody(env, config)
2424
if err != nil {
2525
return err

internal/endpoints/sender_telegram.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func NewTelegram(token, chatID string) *Telegram {
3030
}
3131
}
3232

33-
func (t *Telegram) Send(cc *core.Context, env envelope.Envelope, config Config) error {
33+
func (t *Telegram) Send(cc core.Context, env envelope.Envelope, config Config) error {
3434
atts := FilterImagesOnly(GetAttachments(env, config))
3535
text, err := GetBody(env, config)
3636
if err != nil {
@@ -76,7 +76,7 @@ type telegramResponse struct {
7676
Description string `json:"description"`
7777
}
7878

79-
func (t *Telegram) sendMessage(cc *core.Context, text string) error {
79+
func (t *Telegram) sendMessage(cc core.Context, text string) error {
8080
if text == "" {
8181
return nil
8282
}
@@ -115,7 +115,7 @@ func (t *Telegram) sendMessage(cc *core.Context, text string) error {
115115
return nil
116116
}
117117

118-
func (t *Telegram) sendPhoto(cc *core.Context, caption, name string, file *os.File) error {
118+
func (t *Telegram) sendPhoto(cc core.Context, caption, name string, file *os.File) error {
119119
defer file.Close()
120120
body := &bytes.Buffer{}
121121
writer := multipart.NewWriter(body)

internal/events/envelope.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,35 @@ package events
22

33
import "github.com/ItsNotGoodName/smtpbridge/internal/core"
44

5-
func OnEnvelopeCreated(app core.App, fn func(cc *core.Context, evt core.EventEnvelopeCreated)) {
5+
func OnEnvelopeCreated(app core.App, fn func(cc core.Context, evt core.EventEnvelopeCreated)) {
66
app.Bus.Mutex.Lock()
77
app.Bus.EnvelopeCreated = append(app.Bus.EnvelopeCreated, fn)
88
app.Bus.Mutex.Unlock()
99
}
1010

11-
func PublishEnvelopeCreated(cc *core.Context, id int64) {
11+
func PublishEnvelopeCreated(cc core.Context, id int64) {
1212
cc.Bus.Mutex.Lock()
1313
for _, v := range cc.Bus.EnvelopeCreated {
1414
v(cc, core.EventEnvelopeCreated{ID: id})
1515
}
1616
cc.Bus.Mutex.Unlock()
1717
}
1818

19-
func OnEnvelopeDeleted(app core.App, fn func(cc *core.Context, evt core.EventEnvelopeDeleted)) {
19+
func OnEnvelopeDeleted(app core.App, fn func(cc core.Context, evt core.EventEnvelopeDeleted)) {
2020
app.Bus.Mutex.Lock()
2121
app.Bus.EnvelopeDeleted = append(app.Bus.EnvelopeDeleted, fn)
2222
app.Bus.Mutex.Unlock()
2323
}
2424

25-
func PublishEnvelopeDeleted(cc *core.Context, ids ...int64) {
25+
func PublishEnvelopeDeleted(cc core.Context, ids ...int64) {
2626
cc.Bus.Mutex.Lock()
2727
for _, v := range cc.Bus.EnvelopeDeleted {
2828
v(cc, core.EventEnvelopeDeleted{IDS: ids})
2929
}
3030
cc.Bus.Mutex.Unlock()
3131
}
3232

33-
func OnTrimStart(app core.App, fn func(cc *core.Context, evt core.EventTrimStart)) {
33+
func OnTrimStart(app core.App, fn func(cc core.Context, evt core.EventTrimStart)) {
3434
app.Bus.Mutex.Lock()
3535
if app.Bus.TrimStart != nil {
3636
panic("TrimStart handler is being redefined")
@@ -39,7 +39,7 @@ func OnTrimStart(app core.App, fn func(cc *core.Context, evt core.EventTrimStart
3939
app.Bus.Mutex.Unlock()
4040
}
4141

42-
func PublishTrimStart(cc *core.Context) <-chan bool {
42+
func PublishTrimStart(cc core.Context) <-chan bool {
4343
res := make(chan bool)
4444
cc.Bus.Mutex.Lock()
4545
cc.Bus.TrimStart(cc, core.EventTrimStart{Response: res})

0 commit comments

Comments
 (0)