feat: add basic miniflux conection

This commit is contained in:
Alexander Navarro 2024-12-17 20:11:19 -03:00
parent 1459abdd84
commit 22b4abf73b
7 changed files with 173 additions and 6 deletions

View file

@ -4,10 +4,11 @@ Copyright © 2024 NAME HERE <EMAIL ADDRESS>
package cmd
import (
"fmt"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"git.alecodes.page/alecodes/miniflux-archiver/internal/app"
"git.alecodes.page/alecodes/miniflux-archiver/internal/miniflux"
)
var Services = []string{
@ -28,8 +29,21 @@ var archiveCmd = &cobra.Command{
Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),
ValidArgs: Services,
Run: func(cmd *cobra.Command, args []string) {
// service := args[0]
fmt.Printf("%v", viper.AllSettings())
service := args[0]
serviceConfig := app.ServiceConfig{
Service: service,
Host: service_host,
User: service_user,
Token: service_token,
}
minifluxConfig := miniflux.MinifluxConfig{
Host: viper.GetString("miniflux_host"),
Token: viper.GetString("miniflux_token"),
}
app.Archive(minifluxConfig, serviceConfig)
},
}

5
go.mod
View file

@ -25,8 +25,9 @@ require (
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/multierr v1.9.0 // indirect
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/sys v0.27.0 // indirect
golang.org/x/text v0.20.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
miniflux.app/v2 v2.2.3 // indirect
)

6
go.sum
View file

@ -67,8 +67,12 @@ golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjs
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@ -77,3 +81,5 @@ gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
miniflux.app/v2 v2.2.3 h1:zY0nSSRApk2nT7oPK+1FctmAgYE3SZZMr/1fmAZYhBg=
miniflux.app/v2 v2.2.3/go.mod h1:eawZVTTxQGXFhyOLem1798qDovYWqgoRgLa6hVigRWc=

17
internal/app/archive.go Normal file
View file

@ -0,0 +1,17 @@
package app
import (
"fmt"
"git.alecodes.page/alecodes/miniflux-archiver/internal/logger"
"git.alecodes.page/alecodes/miniflux-archiver/internal/miniflux"
)
func Archive(minifluxConfig miniflux.MinifluxConfig, serviceConfig ServiceConfig) {
mf, err := miniflux.NewMiniflux(minifluxConfig)
if err != nil {
logger.Fatal("Could not connect to the miniflux server: %v", err)
}
fmt.Println(mf)
}

8
internal/app/service.go Normal file
View file

@ -0,0 +1,8 @@
package app
type ServiceConfig struct {
Service string
Host string
User string
Token string
}

88
internal/logger/logger.go Normal file
View file

@ -0,0 +1,88 @@
package logger
import (
"fmt"
"io"
"log"
"os"
"strings"
"time"
"github.com/spf13/viper"
)
const (
verbose = 1 << iota
info
error
debug
)
func getLogger(level int, prefix string) *log.Logger {
var output io.Writer
if level == error {
output = os.Stderr
} else {
output = os.Stdout
}
// TODO: get from config
configLevel := debug
if configLevel < level {
output = io.Discard
}
prefix = fmt.Sprintf("%-*s", 6, prefix)
logger := log.New(output, prefix, log.Ldate|log.Ltime|log.Lmicroseconds|log.Lmsgprefix)
return logger
}
func logMessage(level string, message string) {
currentLevel := viper.GetString("log_level")
levels := map[string]int{
"verbose": 1,
"info": 2,
"error": 3,
"debug": 4,
}
if levels[currentLevel] <= levels[level] {
timestamp := time.Now().Format("2006-01-02 15:04:05")
prefix := strings.ToUpper(level)
fmt.Printf("%-7s %s %s\n", prefix, timestamp, message)
}
}
func Verbose(message string) {
logger := getLogger(verbose, "VERB")
logger.Println(message)
}
func Info(message string, args ...any) {
logger := getLogger(info, "INFO")
msg := fmt.Sprintf(message, args...)
logger.Println(msg)
}
func Error(message string, args ...any) {
logger := getLogger(error, "ERROR")
msg := fmt.Sprintf(message, args...)
logger.Println(msg)
}
func Debug(message string, args ...any) {
logger := getLogger(debug, "DEBUG")
msg := fmt.Sprintf(message, args...)
logger.Println(msg)
}
func Fatal(message string, args ...any) {
logger := getLogger(error, "FATAL")
msg := fmt.Sprintf(message, args...)
logger.Fatalln(msg)
}

View file

@ -0,0 +1,33 @@
package miniflux
import (
"git.alecodes.page/alecodes/miniflux-archiver/internal/logger"
mfApi "miniflux.app/v2/client"
)
type MinifluxConfig struct {
Host string
User string
Token string
}
type Miniflux struct {
MinifluxConfig
client *mfApi.Client
}
func NewMiniflux(config MinifluxConfig) (*Miniflux, error) {
mf := &Miniflux{
MinifluxConfig: config,
client: mfApi.NewClient(config.Host, config.Token),
}
version, err := mf.client.Version()
if err != nil {
return nil, err
}
logger.Info("Miniflux server version: %v", version.Version)
return mf, nil
}