137 lines
4.0 KiB
Go
137 lines
4.0 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.3.3"
|
|
DefaultConf = "/etc/rpaste/rpaste.conf"
|
|
DefaultLexer = "text"
|
|
DefaultLifeTime = "1day"
|
|
// This will end up being dynamic in the future
|
|
DefaultPasteBin = "rpaste"
|
|
DefaultSysInfo = false
|
|
DefaultDryMode = false
|
|
DefaultBasicDmidecode = false
|
|
ShortOption = true
|
|
)
|
|
|
|
// Initialize default settings
|
|
func init() {
|
|
setting.AppName = AppName
|
|
setting.AppVer = Version
|
|
setting.AppConf = DefaultConf
|
|
setting.DryMode = DefaultDryMode
|
|
setting.LexerType = DefaultLexer
|
|
setting.LifeTime = DefaultLifeTime
|
|
setting.PasteBinService = DefaultPasteBin
|
|
setting.SysInfo = DefaultSysInfo
|
|
setting.BasicDmidecode = DefaultBasicDmidecode
|
|
// read config?
|
|
}
|
|
|
|
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: "2024 (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.
|
|
|
|
See rpaste(1)`,
|
|
// list all commands below - For now it's only the method to paste, which
|
|
// isn't callable, it's the default. The flags dictate what happens next.
|
|
Commands: []*cli.Command{
|
|
paste.PasteMethod,
|
|
},
|
|
}
|
|
|
|
// Shorten the help/usage area
|
|
cli.AppHelpTemplate = setting.HelpTemplate
|
|
cli.VersionPrinter = setting.VersionTemplate
|
|
|
|
// Supported flags - This controls the life, syntax, or paste bin that it
|
|
// the data is sent to. It also allows running a full sysinfo call.
|
|
defaultFlags := []cli.Flag{
|
|
&cli.StringFlag{
|
|
Name: "life",
|
|
Aliases: []string{"x"},
|
|
Value: setting.LifeTime,
|
|
Usage: "Sets the life time of a paste (1h/1hour, 1d/1day, 1w/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,
|
|
},
|
|
&cli.BoolFlag{
|
|
Name: "dry",
|
|
Aliases: []string{"d"},
|
|
Value: setting.DryMode,
|
|
Usage: "Turns on dry mode, which doesn't paste the output, but shows the data to stdin",
|
|
Required: false,
|
|
},
|
|
&cli.StringFlag{
|
|
Name: "pastebin",
|
|
Aliases: []string{"p"},
|
|
Value: setting.PasteBinService,
|
|
Usage: "Sets the paste bin service to send to. Current supported: rpaste, fpaste",
|
|
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)
|
|
}
|
|
}
|