@@ -2,15 +2,14 @@ package main
22
33import (
44 "bytes"
5- "crypto/tls"
65 "context"
6+ "crypto/tls"
77 "encoding/json"
88 "flag"
99 "fmt"
1010 "image/color"
1111 "math"
1212 "net/http"
13- "net/http/httputil"
1413 "os"
1514 "os/exec"
1615 "strconv"
@@ -56,10 +55,10 @@ type basicAuthTransport struct {
5655
5756// Struct to hold Bitwarden login fields
5857type BitwardenItem struct {
59- Login struct {
60- Username string `json:"username"`
61- Password string `json:"password"`
62- } `json:"login"`
58+ Login struct {
59+ Username string `json:"username"`
60+ Password string `json:"password"`
61+ } `json:"login"`
6362}
6463
6564func (bat * basicAuthTransport ) RoundTrip (req * http.Request ) (* http.Response , error ) {
@@ -95,23 +94,23 @@ func (bat *basicAuthTransport) transport() http.RoundTripper {
9594
9695// Get BW_SESSION from env
9796func getSessionToken () string {
98- return os .Getenv ("BW_SESSION" )
97+ return os .Getenv ("BW_SESSION" )
9998}
10099
101100// Run Bitwarden CLI to get the item JSON
102101func getBitwardenItemJSON (itemName string ) ([]byte , error ) {
103- cmd := exec .Command ("bw" , "get" , "item" , itemName )
104- cmd .Env = append (os .Environ (), "BW_SESSION=" + getSessionToken ())
102+ cmd := exec .Command ("bw" , "get" , "item" , itemName )
103+ cmd .Env = append (os .Environ (), "BW_SESSION=" + getSessionToken ())
105104
106- var out bytes.Buffer
107- cmd .Stdout = & out
105+ var out bytes.Buffer
106+ cmd .Stdout = & out
108107
109- err := cmd .Run ()
110- if err != nil {
111- return nil , err
112- }
108+ err := cmd .Run ()
109+ if err != nil {
110+ return nil , err
111+ }
113112
114- return out .Bytes (), nil
113+ return out .Bytes (), nil
115114}
116115
117116func loadMetricsFromFile (path string ) ([]Metric , error ) {
@@ -142,28 +141,29 @@ func GetConfig() (*Config, error) {
142141 }, nil
143142}
144143
145- func (c * Config ) getMetricValue (metric string ) (int , error ) {
144+ func (c * Config ) getMetricValue (metric string , bitwarden string ) (int , error ) {
146145
147146 prometheus := c .PrometheusURL
148- // doing bitwarden stuff here to get prometheus credentials
149- itemName := "Prometheus Agent RemoteWrite"
150- jsonData , err := getBitwardenItemJSON (itemName )
151- if err != nil {
152- fmt .Printf ("Failed to get item from Bitwarden: %v\n " , err )
153- }
154-
155- var item BitwardenItem
156- err = json .Unmarshal (jsonData , & item )
157- if err != nil {
158- fmt .Printf ("Failed to parse Bitwarden JSON: %v\n " , err )
159- }
160-
161- username := item .Login .Username
162- password := item .Login .Password
163-
164- if os .Getenv ("PROMETHEUS_URL" ) != "" {
165- prometheus = os .Getenv ("PROMETHEUS_URL" )
166- }
147+ username := os .Getenv ("PROM_USER" )
148+ password := os .Getenv ("PROM_PASS" )
149+
150+ if bitwarden != "" {
151+ // doing bitwarden stuff here to get prometheus credentials
152+ itemName := "Prometheus Agent RemoteWrite"
153+ jsonData , err := getBitwardenItemJSON (itemName )
154+ if err != nil {
155+ fmt .Printf ("Failed to get item from Bitwarden: %v\n " , err )
156+ }
157+
158+ var item BitwardenItem
159+ err = json .Unmarshal (jsonData , & item )
160+ if err != nil {
161+ fmt .Printf ("Failed to parse Bitwarden JSON: %v\n " , err )
162+ }
163+
164+ username = item .Login .Username
165+ password = item .Login .Password
166+ }
167167
168168 customClient := & http.Client {
169169 Transport : & http.Transport {
@@ -226,6 +226,7 @@ func main() {
226226
227227 verbose := flag .Bool ("v" , false , "enable verbose logging" )
228228 debug := flag .Bool ("d" , false , "enable debugging" )
229+ bitwarden := flag .Bool ("bwd" , false , "enable Bitwarden password store" )
229230 flag .Parse ()
230231
231232 config , err := GetConfig ()
@@ -256,7 +257,7 @@ func main() {
256257 )
257258
258259 for _ , metric := range config .Metrics {
259- val , err := config .getMetricValue (metric .Name )
260+ val , err := config .getMetricValue (metric .Name , * bitwarden )
260261
261262 var icon * canvas.Text
262263 var statusText string
0 commit comments