license/license.go

91 lines
1.9 KiB
Go
Raw Permalink Normal View History

2021-01-21 07:32:21 +00:00
package main
2021-01-21 08:15:34 +00:00
import (
"embed"
2022-08-16 05:59:42 +00:00
"errors"
2021-01-21 08:15:34 +00:00
"fmt"
"path/filepath"
"strings"
2021-12-02 07:08:28 +00:00
"github.com/make-go-great/ioe-go"
2021-01-21 08:15:34 +00:00
)
const (
templatesPath = "templates"
)
2022-08-16 05:59:42 +00:00
var ErrInvalidLicense = errors.New("invalid license")
//go:embed templates/*
var embedFS embed.FS
2022-11-01 16:02:20 +00:00
// Map template name with filename and args
// always use upercase for license name
2021-01-21 08:15:34 +00:00
var templates = map[string]templateInfo{
"MIT": {
2022-08-16 07:21:22 +00:00
templateFilename: "mit.txt",
licenseFilename: "LICENSE",
2021-01-21 08:15:34 +00:00
args: []string{
"[year]",
"[fullname]",
},
},
2022-08-16 06:41:48 +00:00
"GNU GPLv3": {
2022-08-16 07:21:22 +00:00
templateFilename: "gnu_gplv3.txt",
licenseFilename: "COPYING",
2022-08-16 06:41:48 +00:00
},
2022-11-01 15:59:51 +00:00
"Apache License 2.0": {
templateFilename: "apache_2.0.txt",
licenseFilename: "LICENSE",
args: []string{
"[yyyy]",
"[name of copyright owner]",
},
},
2021-01-21 08:15:34 +00:00
}
type templateInfo struct {
2022-08-16 07:21:22 +00:00
templateFilename string
licenseFilename string
2022-08-16 07:21:22 +00:00
args []string
2021-01-21 08:15:34 +00:00
}
2022-08-16 07:21:22 +00:00
func generateLicense(name string) (string, string, error) {
2021-01-21 08:15:34 +00:00
if name == "" {
2022-08-16 07:21:22 +00:00
return "", "", fmt.Errorf("empty license name: %w", ErrInvalidLicense)
2021-01-21 08:15:34 +00:00
}
2022-08-16 06:41:48 +00:00
isSupportTemplate := false
var templateInfo templateInfo
for templateName := range templates {
if strings.EqualFold(templateName, name) {
isSupportTemplate = true
templateInfo = templates[templateName]
}
}
if !isSupportTemplate {
2022-08-16 07:21:22 +00:00
return "", "", fmt.Errorf("not support license %s: %w", name, ErrInvalidLicense)
2021-01-21 08:15:34 +00:00
}
// Get correct path of license
2022-08-16 07:21:22 +00:00
path := filepath.Join(templatesPath, templateInfo.templateFilename)
// Read template
templateRaw, err := embedFS.ReadFile(path)
2021-01-21 08:15:34 +00:00
if err != nil {
2022-08-16 07:21:22 +00:00
return "", "", fmt.Errorf("failed to read file %s: %w", path, err)
2021-01-21 08:15:34 +00:00
}
2022-08-16 07:21:22 +00:00
// Replace template info args
licenseData := string(templateRaw)
2021-01-21 08:15:34 +00:00
for _, arg := range templateInfo.args {
2021-01-21 08:41:40 +00:00
fmt.Printf("What is your %s: ", arg)
value := ioe.ReadInput()
2021-01-21 08:15:34 +00:00
2022-08-16 07:21:22 +00:00
licenseData = strings.ReplaceAll(licenseData, arg, value)
2021-01-21 08:15:34 +00:00
}
return licenseData, templateInfo.licenseFilename, nil
2021-01-21 08:15:34 +00:00
}