-
Notifications
You must be signed in to change notification settings - Fork 0
/
db.go
95 lines (75 loc) · 2.13 KB
/
db.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
package main
import (
"context"
"fmt"
"strings"
"time"
"github.com/pchchv/golog"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func inserter(s Secret) (password string, err error) {
keyBson, err := bson.Marshal(s.key)
if err != nil {
return "", err
}
res, err := keys_collection.InsertOne(context.Background(), keyBson)
if err != nil {
return "", err
}
password = fmt.Sprintf("%v{%v}", res.InsertedID, s.password)
textBson, err := bson.Marshal(s.encryptedtext)
if err != nil {
return "", err
}
res, err = secrets_collection.InsertOne(context.Background(), textBson)
if err != nil {
return "", err
}
password += fmt.Sprintf("%v", res.InsertedID)
return password, nil
}
func finder(pass string) (s Secret, err error) {
splitPass := strings.Split(pass, "{")
keyID := splitPass[0]
password := strings.TrimSuffix(splitPass[1], "}")
objectID, err := primitive.ObjectIDFromHex(keyID)
if err != nil {
return s, err
}
res := keys_collection.FindOneAndDelete(context.Background(), bson.M{"_id": objectID})
if err = res.Decode(&s.key); err != nil {
return s, err
}
objectID, err = primitive.ObjectIDFromHex(password)
if err != nil {
return s, err
}
res = secrets_collection.FindOneAndDelete(context.Background(), bson.M{"_id": objectID})
if err = res.Decode(&s.encryptedtext); err != nil {
return s, err
}
s.password = password
return s, nil
}
func database() {
serverAPIOptions := options.ServerAPI(options.ServerAPIVersion1)
clientOptions := options.Client().
ApplyURI(getEnvValue("MONGO")).
SetServerAPIOptions(serverAPIOptions)
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
client, err := mongo.Connect(ctx, clientOptions)
if err != nil {
golog.Fatal(err.Error())
}
err = client.Ping(ctx, nil)
if err != nil {
golog.Fatal(err.Error())
}
golog.Info("Connected to MongoDB!")
keys_collection = client.Database(getEnvValue("DATABASE")).Collection("keys")
secrets_collection = client.Database(getEnvValue("DATABASE")).Collection("secrets")
}