rpaste/rpaste.go

113 lines
3.1 KiB
Go

// Copyright 2022 The rpaste Authors. All rights reserved.
// Use of this source code is governed by an MIT-style license that can be
// found in the LICENSE file of this git repository or release archive.
package main
// All Imports
import (
"log"
"os"
"time"
"github.com/rocky-linux/rpaste/modules/paste"
"github.com/rocky-linux/rpaste/modules/setting"
"github.com/urfave/cli/v2"
)
// Sane defaults and basic info
var (
AppName = "rpaste"
Version = "0.2.0"
DefaultConf = "/etc/rpaste/rpaste.conf"
DefaultLexer = "text"
DefaultLifeTime = "1hour"
// This will end up being dynamic in the future
DefaultPasteBin = "rpaste"
DefaultSysInfo = false
ShortOption = true
)
// Initialize default settings
func init() {
setting.AppName = AppName
setting.AppVer = Version
setting.AppConf = DefaultConf
setting.LexerType = DefaultLexer
setting.LifeTime = DefaultLifeTime
setting.PasteBinService = DefaultPasteBin
setting.SysInfo = DefaultSysInfo
}
func main() {
app := &cli.App{
Name: AppName,
Usage: "A paste utility originally made for the Rocky paste service",
Version: Version,
// short options should be on
UseShortOptionHandling: ShortOption,
Compiled: time.Now(),
// Explicitly setting these
Reader: os.Stdin,
Writer: os.Stdout,
ErrWriter: os.Stderr,
Copyright: "2022 (c) Louis Abel <label@rockylinux.org>",
// Usage text at the bottom to keep the editor from putting me on the wrong
// column. Additional options should be above these comments.
UsageText: `Paste utility used primarily for the Rocky Linux pastebin service.
It can collect system information and forward it to a pastebin or simply
send regular text files. This utility is primarily used for asking for
assistance in the Rocky Linux community support venue. It can also be used on
other systems like Fedora and other Enterprise Linux distributions.`,
// list all commands below
Commands: []*cli.Command{
paste.PasteMethod,
},
}
// Shorten the help/usage area
cli.AppHelpTemplate = setting.HelpTemplate
cli.VersionPrinter = setting.VersionTemplate
defaultFlags := []cli.Flag{
&cli.StringFlag{
Name: "life",
Aliases: []string{"x"},
Value: setting.LifeTime,
Usage: "Sets the life time of a paste (1hour, 1day, 1week)",
DefaultText: "1hour",
},
&cli.StringFlag{
Name: "type",
Aliases: []string{"t"},
Value: setting.LexerType,
Usage: "Sets the syntax highlighting",
DefaultText: "text",
},
&cli.BoolFlag{
Name: "sysinfo",
Aliases: []string{"s"},
Value: setting.SysInfo,
Usage: "Collects general system information (disables stdin and file input)",
Required: false,
},
}
// append the default flags to both the main and paste method
app.Flags = append(app.Flags, paste.PasteMethod.Flags...)
app.Flags = append(app.Flags, defaultFlags...)
// Actions
//app.Before = utility.SetPasteOnOS
app.Action = paste.PasteMethod.Action
// Verify reader is set
if app.Reader != os.Stdin {
log.Println("stdin not set")
}
err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
}