/
license.go
117 lines (105 loc) 路 3.19 KB
/
license.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/*
* Copyright 2021-2023 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package core
import (
"errors"
"fmt"
"github.com/JetBrains/qodana-cli/v2023/cloud"
"log"
"os"
"strings"
)
func requestLicenseData(token string) cloud.LicenseData {
licenseEndpoint := cloud.GetEnvWithDefault(QodanaLicenseEndpoint, "https://linters.qodana.cloud")
licenseDataResponse, err := cloud.RequestLicenseData(licenseEndpoint, token)
if errors.Is(err, cloud.TokenDeclinedError) {
log.Fatalf("License request: %v\n%s", err, cloud.DeclinedTokenErrorMessage)
}
if err != nil {
log.Fatalf("License request: %v\n%s", err, cloud.GeneralLicenseErrorMessage)
}
return cloud.DeserializeLicenseData(licenseDataResponse)
}
func SetupLicenseAndProjectHash(token string) {
var licenseData cloud.LicenseData
if token != "" {
licenseData = requestLicenseData(token)
if licenseData.ProjectIdHash != "" {
err := os.Setenv(QodanaProjectIdHash, licenseData.ProjectIdHash)
if err != nil {
log.Fatal(err)
}
}
}
_, exists := os.LookupEnv(QodanaLicense)
if exists {
return
}
// community versions works without any license and can't check any license
if Prod.IsCommunity() {
return
}
// eap version works with eap's license dependent on build date
if Prod.EAP {
if token == "" {
fmt.Println(cloud.EapWarnTokenMessage)
fmt.Println()
}
return
}
// usual builds should have token and LicenseData for execution
if token == "" {
log.Fatal(cloud.EmptyTokenMessage)
}
if strings.ToLower(licenseData.LicensePlan) == "community" {
log.Fatalf("Your Qodana Cloud organization has Community license that doesn鈥檛 support \"%s\" linter, "+
"please try one of the community linters instead: %s or obtain Ultimate "+
"or Ultimate Plus license. Read more about licenses and plans at "+
"https://www.jetbrains.com/help/qodana/pricing.html#pricing-linters-licenses.",
Prod.getProductNameFromCode(),
allCommunityNames(),
)
}
if licenseData.LicenseKey == "" {
log.Fatalf("License key should not be empty\n")
}
err := os.Setenv(QodanaLicense, licenseData.LicenseKey)
if err != nil {
log.Fatal(err)
}
}
func allCommunityNames() string {
var nameList []string
for _, code := range allSupportedFreeCodes {
nameList = append(nameList, "\""+getProductNameFromCode(code)+"\"")
}
return strings.Join(nameList, ", ")
}
func SetupLicenseToken(opts *QodanaOptions) {
token := opts.loadToken(false)
licenseOnlyToken := os.Getenv(QodanaLicenseOnlyToken)
if token == "" && licenseOnlyToken != "" {
cloud.Token = cloud.LicenseToken{
Token: licenseOnlyToken,
LicenseOnly: true,
}
} else {
cloud.Token = cloud.LicenseToken{
Token: token,
LicenseOnly: false,
}
}
}