83 lines
3.4 KiB
Go
83 lines
3.4 KiB
Go
|
package agplwarning
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"os/user"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
var pages = [...]string{
|
||
|
`This is a friendly reminder that the GNU AGPL adds an additional clause to
|
||
|
the standard GNU GPL, which is that you MUST distribute the source code for the
|
||
|
software once you publish it on the web.
|
||
|
This is not to be considered professional legal advice. For further
|
||
|
information, refer to the LICENSE file which contains the whole license, or ask
|
||
|
your lawyer. If you did not receive a copy of the LICENSE file with this
|
||
|
software, you can refer to the online version:
|
||
|
https://www.gnu.org/licenses/agpl-3.0.html`,
|
||
|
`In order to comply with the license, should you have made any modification
|
||
|
to the original copy of the software, which should contain a link to the
|
||
|
source code, however minor it is, you are under the legal obligation to provide
|
||
|
the source code once you publish the software on the Web.
|
||
|
Another obligation is that of stating your changes. This is usually done by
|
||
|
cloning the original git repository of the project and stating your changes
|
||
|
through the creation of commits, which allow us to determine when a specific
|
||
|
change was done.`,
|
||
|
`Furthermore, all the original clauses of the GNU General Public License
|
||
|
are kept intact, which means you have the obligation to
|
||
|
* Keep the AGPL License, without possibility of sublicensing the software
|
||
|
or making it available under any other more liberal license.
|
||
|
* Keep the copyright notice of the original authors
|
||
|
Failure to do so will result in a request to follow the License, and
|
||
|
repeated violation of the license could result in a legal fight.`,
|
||
|
`For more information on the FSF and software freedom, refer to:
|
||
|
* What is free software? https://www.gnu.org/philosophy/free-sw.html
|
||
|
* Free Software Is Even More Important Now
|
||
|
https://www.gnu.org/philosophy/free-software-even-more-important.html
|
||
|
* The GNU operating system https://www.gnu.org
|
||
|
* The Free Software Foundation https://www.fsf.org
|
||
|
Thank you for reading this and following our license terms.`,
|
||
|
}
|
||
|
|
||
|
// Warn shows a warning about the GNU Affero General Public License the first
|
||
|
// time the software is run. The state is saved in
|
||
|
// ~/.config/[namespace]_license_agreed.
|
||
|
func Warn(namespace, projectName string) error {
|
||
|
usr, err := user.Current()
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("initialization of agplwarning failed: %v", err)
|
||
|
}
|
||
|
if err := os.MkdirAll(usr.HomeDir+"/.config", 0755); err != nil {
|
||
|
return fmt.Errorf("can't create config dir: %v", err)
|
||
|
}
|
||
|
agreedFilename := usr.HomeDir + "/.config/" + namespace + "_license_agreed"
|
||
|
if _, err := os.Stat(agreedFilename); !os.IsNotExist(err) {
|
||
|
return err
|
||
|
}
|
||
|
reader := bufio.NewReader(os.Stdin)
|
||
|
// file does not exist. Show warning.
|
||
|
fmt.Printf(" %s, and most/all software related to %s,\n"+
|
||
|
"is licensed under the GNU Affero General Public License.\n\n", projectName, namespace)
|
||
|
for _, page := range pages {
|
||
|
fmt.Println(" " + page)
|
||
|
fmt.Println("\nPress Enter to continue")
|
||
|
_, err := reader.ReadString('\n')
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
fmt.Println("Please write 'I agree' to accept the terms of the license.")
|
||
|
res, err := reader.ReadString('\n')
|
||
|
if err != nil || !strings.Contains(strings.ToLower(res), "i agree") {
|
||
|
fmt.Println("License not agreed. Quitting.")
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
f, err := os.Create(agreedFilename)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("couldn't save read status: %v", err)
|
||
|
}
|
||
|
return f.Close()
|
||
|
}
|