generated from alecodes/base-template
feat: add basic miniflux conection
This commit is contained in:
parent
1459abdd84
commit
22b4abf73b
7 changed files with 173 additions and 6 deletions
|
|
@ -4,10 +4,11 @@ Copyright © 2024 NAME HERE <EMAIL ADDRESS>
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
|
|
||||||
|
"git.alecodes.page/alecodes/miniflux-archiver/internal/app"
|
||||||
|
"git.alecodes.page/alecodes/miniflux-archiver/internal/miniflux"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Services = []string{
|
var Services = []string{
|
||||||
|
|
@ -28,8 +29,21 @@ var archiveCmd = &cobra.Command{
|
||||||
Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),
|
Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),
|
||||||
ValidArgs: Services,
|
ValidArgs: Services,
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
// service := args[0]
|
service := args[0]
|
||||||
fmt.Printf("%v", viper.AllSettings())
|
|
||||||
|
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
5
go.mod
|
|
@ -25,8 +25,9 @@ require (
|
||||||
go.uber.org/atomic v1.9.0 // indirect
|
go.uber.org/atomic v1.9.0 // indirect
|
||||||
go.uber.org/multierr 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/exp v0.0.0-20230905200255-921286631fa9 // indirect
|
||||||
golang.org/x/sys v0.18.0 // indirect
|
golang.org/x/sys v0.27.0 // indirect
|
||||||
golang.org/x/text v0.14.0 // indirect
|
golang.org/x/text v0.20.0 // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
miniflux.app/v2 v2.2.3 // indirect
|
||||||
)
|
)
|
||||||
|
|
|
||||||
6
go.sum
6
go.sum
|
|
@ -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/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 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
|
||||||
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
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 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
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 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 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
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.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 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
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
17
internal/app/archive.go
Normal 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
8
internal/app/service.go
Normal 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
88
internal/logger/logger.go
Normal 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)
|
||||||
|
}
|
||||||
33
internal/miniflux/miniflux.go
Normal file
33
internal/miniflux/miniflux.go
Normal 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
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue