Creating config if not exists via templating
This commit is contained in:
		
							parent
							
								
									416145dfaa
								
							
						
					
					
						commit
						0b11ac87cd
					
				
					 3 changed files with 63 additions and 8 deletions
				
			
		
							
								
								
									
										48
									
								
								src/main.go
									
										
									
									
									
								
							
							
						
						
									
										48
									
								
								src/main.go
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,12 +1,18 @@
 | 
			
		|||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	_ "embed"
 | 
			
		||||
	"flag"
 | 
			
		||||
	"log"
 | 
			
		||||
	"math/rand"
 | 
			
		||||
	"os"
 | 
			
		||||
	"text/template"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
//go:embed beretta.json
 | 
			
		||||
var defconfig string
 | 
			
		||||
 | 
			
		||||
type RepoUpdate struct {
 | 
			
		||||
	repo Repo
 | 
			
		||||
	Tag  string
 | 
			
		||||
| 
						 | 
				
			
			@ -22,7 +28,7 @@ func notifierThread(c chan RepoUpdate, n Notifier) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func repoThread(c chan RepoUpdate, repo Repo, avgInterval int, db Db) {
 | 
			
		||||
	log.Println("Checking", repo.IdTuple())
 | 
			
		||||
	log.Println("Checking: ", repo.IdTuple())
 | 
			
		||||
	tag, err := repo.GetLatestTag()
 | 
			
		||||
	isNewVersion, err_2 := db.CheckAndStore(repo.IdTuple(), tag.Name)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -33,6 +39,7 @@ func repoThread(c chan RepoUpdate, repo Repo, avgInterval int, db Db) {
 | 
			
		|||
	} else if isNewVersion {
 | 
			
		||||
		c <- RepoUpdate{repo, tag.Name}
 | 
			
		||||
	}
 | 
			
		||||
	log.Println("Checking done: ", repo.IdTuple())
 | 
			
		||||
 | 
			
		||||
	sleepTime := time.Duration(rand.Intn(avgInterval)) * time.Second
 | 
			
		||||
	time.Sleep(sleepTime)
 | 
			
		||||
| 
						 | 
				
			
			@ -41,25 +48,54 @@ func repoThread(c chan RepoUpdate, repo Repo, avgInterval int, db Db) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
 | 
			
		||||
	conf := flag.String("config", "./beretta.json", "The path to the config file")
 | 
			
		||||
	conf_path := flag.String("config", "beretta.json", "The path to the config file")
 | 
			
		||||
	db_path := flag.String("db", "cache.db", "The path to the cache database")
 | 
			
		||||
	flag.Parse()
 | 
			
		||||
 | 
			
		||||
	log.Printf("Using config path: %s", *conf)
 | 
			
		||||
	tmpl, err := template.New("config").Parse(defconfig)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	randtk, err := randToken(8)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	data := map[string]any{
 | 
			
		||||
		"TopicToken": randtk,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if _, err := os.Stat(*conf_path); os.IsNotExist(err) {
 | 
			
		||||
		log.Printf("Writing new config file: %s", *conf_path)
 | 
			
		||||
		file, err := os.Create(*conf_path)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			panic(err)
 | 
			
		||||
		}
 | 
			
		||||
		err = tmpl.Execute(file, data)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			log.Fatalf("Error writing config file: %s", err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	log.Printf("Using config path: %s", *conf_path)
 | 
			
		||||
	log.Printf("Using db path: %s", *db_path)
 | 
			
		||||
 | 
			
		||||
	// Load configuration
 | 
			
		||||
	config, err := loadConfig(*conf)
 | 
			
		||||
	config, err := loadConfig(*conf_path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatalf("Failed to load configuration: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Create database
 | 
			
		||||
	db, err := NewSQLiteDb("tags.db")
 | 
			
		||||
	db, err := NewSQLiteDb(*db_path)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Fatalf("Failed to create database: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	notifier := NtfyNotifier{Topic: config.NtfyTopic}
 | 
			
		||||
	log.Printf("Sending notifications to: %s", notifier.Url())
 | 
			
		||||
 | 
			
		||||
	c := make(chan RepoUpdate)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								src/random_token.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/random_token.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"crypto/rand"
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func randToken(n int) (string, error) {
 | 
			
		||||
	bytes := make([]byte, n)
 | 
			
		||||
	if _, err := rand.Read(bytes); err != nil {
 | 
			
		||||
		return "", err
 | 
			
		||||
	}
 | 
			
		||||
	return hex.EncodeToString(bytes), nil
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -39,6 +39,7 @@ func loadConfig(file string) (Config, error) {
 | 
			
		|||
 | 
			
		||||
type Notifier interface {
 | 
			
		||||
	Notify(repo Repo, tag string) bool
 | 
			
		||||
	Url() string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type NtfyNotifier struct {
 | 
			
		||||
| 
						 | 
				
			
			@ -46,10 +47,10 @@ type NtfyNotifier struct {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
func (n NtfyNotifier) Notify(repo Repo, tag string) bool {
 | 
			
		||||
	ntfyURL := fmt.Sprintf("https://ntfy.sh/%s", n.Topic)
 | 
			
		||||
	// ntfyURL := fmt.Sprintf("https://ntfy.sh/%s", n.Topic)
 | 
			
		||||
	message := fmt.Sprintf("New release for %s/%s: %s", repo.Owner(), repo.Name(), tag)
 | 
			
		||||
 | 
			
		||||
	_, err := http.Post(ntfyURL, "text/plain", bytes.NewBuffer([]byte(message)))
 | 
			
		||||
	_, err := http.Post(n.Url(), "text/plain", bytes.NewBuffer([]byte(message)))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("Failed to send notification: %v", err)
 | 
			
		||||
		return false
 | 
			
		||||
| 
						 | 
				
			
			@ -57,3 +58,7 @@ func (n NtfyNotifier) Notify(repo Repo, tag string) bool {
 | 
			
		|||
	log.Printf("Notification sent: %s", message)
 | 
			
		||||
	return true
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (n NtfyNotifier) Url() string {
 | 
			
		||||
	return fmt.Sprintf("https://ntfy.sh/%s", n.Topic)
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue