internal/platform/deviceid.go (38 lines of code) (raw):

/* * Copyright 2021-2024 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 platform import ( "crypto/md5" "fmt" "os" "os/exec" "strings" "github.com/JetBrains/qodana-cli/internal/platform/qdenv" ) // GetDeviceIdSalt set consistent device.id based on given repo upstream #SA-391. func GetDeviceIdSalt() []string { salt := os.Getenv("SALT") deviceId := os.Getenv("DEVICEID") if salt == "" || deviceId == "" { hash := "00000000000000000000000000000000" remoteUrl := getRemoteUrl() if remoteUrl != "" { hash = fmt.Sprintf("%x", md5.Sum(append([]byte("1n1T-$@Lt-"), remoteUrl...))) } if salt == "" { salt = fmt.Sprintf("%x", md5.Sum([]byte("$eC0nd-$@Lt-"+hash))) } if deviceId == "" { deviceId = fmt.Sprintf("200820300000000-%s-%s-%s-%s", hash[0:4], hash[4:8], hash[8:12], hash[12:24]) } } return []string{deviceId, salt} } // getRemoteUrl returns remote url of the current git repository. func getRemoteUrl() string { url := os.Getenv(qdenv.QodanaRemoteUrl) if url == "" { out, err := exec.Command("git", "remote", "get-url", "origin").Output() if err != nil { return "" } url = string(out) } return strings.TrimSpace(url) }