mirror of
https://github.com/unidoc/unioffice.git
synced 2025-05-02 22:17:07 +08:00
101 lines
2.2 KiB
Go
101 lines
2.2 KiB
Go
/*
|
|
* This file is subject to the terms and conditions defined in
|
|
* file 'LICENSE.md', which is part of this source code package.
|
|
*/
|
|
|
|
// Package license helps manage commercial licenses and check if they are valid for the version of unidoc used.
|
|
package license
|
|
|
|
import (
|
|
"compress/gzip"
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"io"
|
|
"regexp"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/unidoc/unioffice/common"
|
|
)
|
|
|
|
// Defaults to the open source license.
|
|
var licenseKey = MakeUnlicensedKey()
|
|
|
|
// SetLicenseKey sets and validates the license key.
|
|
func SetLicenseKey(content string, customerName string) error {
|
|
lk, err := licenseKeyDecode(content)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if strings.ToLower(lk.CustomerName) != strings.ToLower(customerName) {
|
|
return fmt.Errorf("customer name mismatch, expected '%s', but got '%s'", customerName, lk.CustomerName)
|
|
}
|
|
|
|
err = lk.Validate()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
licenseKey = &lk
|
|
|
|
return nil
|
|
}
|
|
|
|
// SetLegacyLicenseKey installs a legacy license code. License codes issued prior to June 2019.
|
|
// Will be removed at some point in a future major version.
|
|
func SetLegacyLicenseKey(s string) error {
|
|
re := regexp.MustCompile("\\s")
|
|
s = re.ReplaceAllString(s, "")
|
|
|
|
var r io.Reader
|
|
r = strings.NewReader(s)
|
|
r = base64.NewDecoder(base64.RawURLEncoding, r)
|
|
r, err := gzip.NewReader(r)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
dec := json.NewDecoder(r)
|
|
l := &LegacyLicense{}
|
|
if err := dec.Decode(l); err != nil {
|
|
return err
|
|
}
|
|
// check signature
|
|
if err := l.Verify(legacyPubKey); err != nil {
|
|
return errors.New("license validatin error")
|
|
}
|
|
|
|
if l.Expiration.Before(common.ReleasedAt) {
|
|
return errors.New("license expired")
|
|
}
|
|
|
|
utcNow := time.Now().UTC()
|
|
|
|
newLicense := LicenseKey{}
|
|
newLicense.CreatedAt = utcNow
|
|
newLicense.CustomerId = "Legacy"
|
|
newLicense.CustomerName = l.Name
|
|
newLicense.Tier = LicenseTierBusiness
|
|
newLicense.ExpiresAt = l.Expiration
|
|
newLicense.CreatorName = "UniDoc support"
|
|
newLicense.CreatorEmail = "support@unidoc.io"
|
|
newLicense.UniOffice = true
|
|
|
|
licenseKey = &newLicense
|
|
|
|
return nil
|
|
}
|
|
|
|
func GetLicenseKey() *LicenseKey {
|
|
if licenseKey == nil {
|
|
return nil
|
|
}
|
|
|
|
// Copy.
|
|
lk2 := *licenseKey
|
|
return &lk2
|
|
}
|