main.go

v1.0.0
Doc Versions Source
1
package main
2
3
import (
4
	"context"
5
	"fmt"
6
	"log"
7
8
	bitwarden "sourcecraft.dev/bigbes/go-bitwarden"
9
)
10
11
func main() {
12
	ctx := context.Background()
13
14
	// Create client (assumes `bw serve` is running on default port 8087)
15
	client := bitwarden.NewClient()
16
17
	// Check status
18
	status, err := client.Status(ctx)
19
	if err != nil {
20
		log.Fatalf("status: %v", err)
21
	}
22
	fmt.Printf("Status: %s (user: %s)\n", status.Status, status.UserEmail)
23
24
	// Unlock if needed
25
	if status.Status == "locked" {
26
		if err := client.Unlock(ctx, "your-master-password"); err != nil {
27
			log.Fatalf("unlock: %v", err)
28
		}
29
		fmt.Println("Vault unlocked")
30
	}
31
32
	// Sync vault
33
	if err := client.Sync(ctx); err != nil {
34
		log.Fatalf("sync: %v", err)
35
	}
36
	fmt.Println("Vault synced")
37
38
	// List all items
39
	items, err := client.Items().List(ctx, bitwarden.ListFilter{})
40
	if err != nil {
41
		log.Fatalf("list items: %v", err)
42
	}
43
	fmt.Printf("Found %d items\n", len(items))
44
45
	// Search for items
46
	results, err := client.Items().List(ctx, bitwarden.ListFilter{Search: "github"})
47
	if err != nil {
48
		log.Fatalf("search: %v", err)
49
	}
50
	for _, item := range results {
51
		fmt.Printf("  - %s (type=%d)\n", item.Name, item.Type)
52
	}
53
54
	// Create a login item
55
	newItem := bitwarden.Item{
56
		Type: bitwarden.ItemTypeLogin,
57
		Name: "Example Login",
58
		Login: &bitwarden.Login{
59
			Username: "user@example.com",
60
			Password: "s3cur3p4ss",
61
			URIs: []bitwarden.LoginURI{
62
				{URI: "https://example.com"},
63
			},
64
		},
65
	}
66
	created, err := client.Items().Create(ctx, newItem)
67
	if err != nil {
68
		log.Fatalf("create item: %v", err)
69
	}
70
	fmt.Printf("Created item: %s (id=%s)\n", created.Name, created.ID)
71
72
	// List folders
73
	folders, err := client.Folders().List(ctx, "")
74
	if err != nil {
75
		log.Fatalf("list folders: %v", err)
76
	}
77
	fmt.Printf("Found %d folders\n", len(folders))
78
79
	// Generate a password
80
	length := 32
81
	upper := true
82
	lower := true
83
	number := true
84
	special := true
85
	password, err := client.Generate(ctx, bitwarden.GenerateOptions{
86
		Length:    &length,
87
		Uppercase: &upper,
88
		Lowercase: &lower,
89
		Number:    &number,
90
		Special:   &special,
91
	})
92
	if err != nil {
93
		log.Fatalf("generate: %v", err)
94
	}
95
	fmt.Printf("Generated password: %s\n", password)
96
97
	// Lock vault when done
98
	if err := client.Lock(ctx); err != nil {
99
		log.Fatalf("lock: %v", err)
100
	}
101
	fmt.Println("Vault locked")
102
}
103

Source Files