Skip to content

Commit 88ff885

Browse files
authored
Merge pull request #14 from Civil/dev
Merge everything from dev branch to master
2 parents 15104a4 + 985809f commit 88ff885

File tree

1,607 files changed

+1035142
-44742
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,607 files changed

+1035142
-44742
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
config.yaml
33
github2telegram
44
github2telegram.db
5+
github2telegram.sqlite3

CHANGES.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@ Changes
1313

1414
CHANGELOG
1515
---------
16+
**0.1.0**
17+
- [Code] Upgrade all dependencies to their latest version
18+
- [Code] Migrate to a different telegram bot library
19+
20+
1621
**0.0.2**
1722
- [Improvement] Improve logging, make it more consistent
1823
- [Improvement] Add basic validation for repo name for a `new` command

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM golang:1.15-alpine AS builder
1+
FROM golang:1.21-alpine AS builder
22

33
# Set necessary environmet variables needed for our image
44
ENV CGO_ENABLED=1 \

configs/configs.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ type FiltersConfig struct {
2121
}
2222

2323
type NotificationConfig struct {
24-
Token string
25-
Url string
26-
Type string
24+
Type string
25+
Token string
26+
WebhookURL string
27+
WebhookPath string
28+
WebhookListenAddress string
2729
}
2830

2931
type NotificationEndpoints interface {

db/interface.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package db
22

33
import (
4+
"github.com/Civil/github2telegram/types"
45
"time"
56
)
67

@@ -12,16 +13,24 @@ type Database interface {
1213
AddFeed(name, repo, filter, messagePattern string) (int, error)
1314
GetFeed(name string) (*Feed, error)
1415
ListFeeds() ([]*Feed, error)
16+
RemoveFeed(name, repo, filter, messagePattern string) error
1517

1618
// Subscriptions
1719
AddSubscribtion(endpoint, url, filter string, chatID int64) error
1820
RemoveSubscribtion(endpoint, url, filter string, chatID int64) error
1921

22+
// Maintenance
23+
UpdateChatID(oldChatID, newChatID int64) error
24+
2025
// Notification methods
2126
GetNotificationMethods(url, filter string) ([]string, error)
2227

2328
// Endpoints
2429
GetEndpointInfo(endpoint, url, filter string) ([]int64, error)
30+
31+
// Resend Queue
32+
AddMessagesToResentQueue(messages []*types.NotificationMessage) error
33+
GetMessagesFromResentQueue() ([]*types.NotificationMessage, error)
2534
}
2635

2736
type Feed struct {

db/sqlite.go

Lines changed: 150 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package db
33
import (
44
"database/sql"
55
"fmt"
6+
"github.com/Civil/github2telegram/types"
67
"time"
78

89
"github.com/Civil/github2telegram/configs"
@@ -11,7 +12,7 @@ import (
1112
)
1213

1314
const (
14-
currentSchemaVersion = 2
15+
currentSchemaVersion = 3
1516
)
1617

1718
type SQLite struct {
@@ -25,7 +26,7 @@ func initSqlite() Database {
2526
configs.Config.DB, err = sql.Open("sqlite3", configs.Config.DatabaseURL)
2627
if err != nil {
2728
logger.Fatal("unable to open database file",
28-
zap.Any("config", configs.Config),
29+
zap.String("file", configs.Config.DatabaseURL),
2930
zap.Error(err),
3031
)
3132
}
@@ -67,11 +68,16 @@ func initSqlite() Database {
6768
'message_pattern' VARCHAR(255) NOT NULL
6869
);
6970
70-
INSERT INTO 'schema_version' (id, version) values (1, 2);
71+
CREATE TABLE IF NOT EXISTS 'resend_queue' (
72+
'id' INTEGER PRIMARY KEY AUTOINCREMENT,
73+
'chat_id' Int64,
74+
'message' TEXT NOT NULL
75+
);
76+
77+
INSERT INTO 'schema_version' (id, version) values (1, 3);
7178
`)
7279
if err != nil {
7380
logger.Fatal("failed to initialize database",
74-
zap.Any("config", configs.Config),
7581
zap.Error(err),
7682
)
7783
}
@@ -92,29 +98,68 @@ func initSqlite() Database {
9298
}
9399
rows.Close()
94100

95-
if schemaVersion != currentSchemaVersion {
96-
switch schemaVersion {
97-
case 1:
98-
_, err = configs.Config.DB.Exec(`
101+
if schemaVersion == 1 {
102+
_, err = configs.Config.DB.Exec(`
99103
ALTER TABLE last_version ADD COLUMN 'last_tag' VARCHAR(255) NOT NULL DEFAULT '';
100104
101105
UPDATE schema_version SET version = 2 WHERE id=1;
102106
`)
103107

104-
if err != nil {
105-
logger.Fatal("failed to migrate database",
106-
zap.Int("databaseVersion", schemaVersion),
107-
zap.Int("upgradingTo", currentSchemaVersion),
108-
zap.Error(err),
109-
)
110-
}
111-
// 'last_tag' VARCHAR(255) NOT NULL DEFAULT '',
112-
default:
113-
// Don't know how to migrate from this version
114-
logger.Fatal("Unknown schema version specified",
115-
zap.Int("version", schemaVersion),
108+
if err != nil {
109+
logger.Fatal("failed to migrate database",
110+
zap.Int("databaseVersion", schemaVersion),
111+
zap.Int("upgradingTo", currentSchemaVersion),
112+
zap.Error(err),
113+
)
114+
}
115+
116+
_, err = configs.Config.DB.Exec(`
117+
UPDATE schema_version SET version = 2 WHERE id=1;`)
118+
if err != nil {
119+
logger.Fatal("failed to migrate database",
120+
zap.Int("databaseVersion", schemaVersion),
121+
zap.Int("upgradingTo", currentSchemaVersion),
122+
zap.Error(err),
123+
)
124+
}
125+
126+
// We've successfully upgraded to schema version 2.
127+
schemaVersion = 2
128+
}
129+
130+
if schemaVersion == 2 {
131+
_, err = configs.Config.DB.Exec(` CREATE TABLE IF NOT EXISTS 'resend_queue' (
132+
'id' INTEGER PRIMARY KEY AUTOINCREMENT,
133+
'chat_id' Int64,
134+
'message' TEXT NOT NULL
135+
);`)
136+
if err != nil {
137+
logger.Fatal("failed to migrate database",
138+
zap.Int("databaseVersion", schemaVersion),
139+
zap.Int("upgradingTo", currentSchemaVersion),
140+
zap.Error(err),
141+
)
142+
}
143+
144+
_, err = configs.Config.DB.Exec(`
145+
UPDATE schema_version SET version = 3 WHERE id=1;`)
146+
if err != nil {
147+
logger.Fatal("failed to migrate database",
148+
zap.Int("databaseVersion", schemaVersion),
149+
zap.Int("upgradingTo", currentSchemaVersion),
150+
zap.Error(err),
116151
)
117152
}
153+
154+
// We've successfully upgraded to schema version 3.
155+
schemaVersion = 3
156+
}
157+
158+
if schemaVersion != currentSchemaVersion {
159+
// Don't know how to migrate from this version
160+
logger.Fatal("Unknown schema version specified",
161+
zap.Int("version", schemaVersion),
162+
)
118163
}
119164
}
120165

@@ -288,6 +333,36 @@ func (d *SQLite) ListFeeds() ([]*Feed, error) {
288333
return result, nil
289334
}
290335

336+
func (d *SQLite) RemoveFeed(name, repo, filter, messagePattern string) error {
337+
logger := zapwriter.Logger("remove_feed")
338+
stmt, err := d.db.Prepare("DELETE FROM 'feeds' WHERE name=? and repo=? and filter=? and message_pattern=?")
339+
if err != nil {
340+
logger.Error("error creating statement",
341+
zap.Error(err),
342+
)
343+
return err
344+
}
345+
346+
_, err = stmt.Exec(name, repo, filter, messagePattern)
347+
if err != nil {
348+
logger.Error("error removing subscription",
349+
zap.Error(err),
350+
)
351+
}
352+
353+
return err
354+
}
355+
356+
func (d *SQLite) UpdateChatID(oldChatID, newChatID int64) error {
357+
stmt, err := d.db.Prepare("UPDATE 'subscriptions' SET chat_id=? WHERE chat_id=?")
358+
if err != nil {
359+
return err
360+
}
361+
362+
_, err = stmt.Exec(newChatID, oldChatID)
363+
return err
364+
}
365+
291366
func (d *SQLite) AddSubscribtion(endpoint, url, filter string, chatID int64) error {
292367
stmt, err := d.db.Prepare("SELECT chat_id FROM 'subscriptions' where endpoint=? and url=? and filter=? and chat_id=?;")
293368
if err != nil {
@@ -446,3 +521,58 @@ func (d *SQLite) UpdateLastUpdateTime(url, filter, tag string, t time.Time) {
446521
return
447522
}
448523
}
524+
525+
func (db *SQLite) AddMessagesToResentQueue(messages []*types.NotificationMessage) error {
526+
logger := zapwriter.Logger("add_messages_to_resent_queue")
527+
stmt, err := db.db.Prepare("INSERT INTO 'resend_queue' (chat_id, message) VALUES (?, ?)")
528+
if err != nil {
529+
logger.Error("error creating statement",
530+
zap.Error(err),
531+
)
532+
return err
533+
}
534+
535+
for _, m := range messages {
536+
_, err = stmt.Exec(m.ChatID, m.Message)
537+
if err != nil {
538+
logger.Error("error updating data",
539+
zap.Error(err),
540+
)
541+
return err
542+
}
543+
}
544+
return nil
545+
}
546+
547+
func (db *SQLite) GetMessagesFromResentQueue() ([]*types.NotificationMessage, error) {
548+
logger := zapwriter.Logger("get_messages_from_resent_queue")
549+
stmt, err := db.db.Prepare("SELECT chat_id, message FROM 'resend_queue'")
550+
if err != nil {
551+
logger.Error("error creating statement",
552+
zap.Error(err),
553+
)
554+
return nil, err
555+
}
556+
rows, err := stmt.Query()
557+
if err != nil {
558+
logger.Error("error retrieving data",
559+
zap.Error(err),
560+
)
561+
return nil, err
562+
}
563+
results := make([]*types.NotificationMessage, 0)
564+
for rows.Next() {
565+
res := &types.NotificationMessage{}
566+
err = rows.Scan(&res.ChatID, &res.Message)
567+
if err != nil {
568+
logger.Error("error retrieving data",
569+
zap.Error(err),
570+
)
571+
continue
572+
}
573+
results = append(results, res)
574+
}
575+
_ = rows.Close()
576+
577+
return nil, nil
578+
}

endpoints/parameters.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package endpoints
2+
3+
type ConfigParams struct {
4+
Name string
5+
Value string
6+
}

0 commit comments

Comments
 (0)