Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
e170569959 |
|
@ -13,4 +13,6 @@ const (
|
||||||
DbTypeArangodb = "arangodb"
|
DbTypeArangodb = "arangodb"
|
||||||
// DbTypeMongodb is the mongodb database type
|
// DbTypeMongodb is the mongodb database type
|
||||||
DbTypeMongodb = "mongodb"
|
DbTypeMongodb = "mongodb"
|
||||||
|
// DbTypeFaunadb is the faunadb database type
|
||||||
|
DbTypeFaunadb = "faunadb"
|
||||||
)
|
)
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"github.com/authorizerdev/authorizer/server/constants"
|
"github.com/authorizerdev/authorizer/server/constants"
|
||||||
"github.com/authorizerdev/authorizer/server/db/providers"
|
"github.com/authorizerdev/authorizer/server/db/providers"
|
||||||
"github.com/authorizerdev/authorizer/server/db/providers/arangodb"
|
"github.com/authorizerdev/authorizer/server/db/providers/arangodb"
|
||||||
|
"github.com/authorizerdev/authorizer/server/db/providers/faunadb"
|
||||||
"github.com/authorizerdev/authorizer/server/db/providers/mongodb"
|
"github.com/authorizerdev/authorizer/server/db/providers/mongodb"
|
||||||
"github.com/authorizerdev/authorizer/server/db/providers/sql"
|
"github.com/authorizerdev/authorizer/server/db/providers/sql"
|
||||||
"github.com/authorizerdev/authorizer/server/envstore"
|
"github.com/authorizerdev/authorizer/server/envstore"
|
||||||
|
@ -17,9 +18,10 @@ var Provider providers.Provider
|
||||||
func InitDB() {
|
func InitDB() {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
isSQL := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeArangodb && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeMongodb
|
isSQL := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeArangodb && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeMongodb && envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) != constants.DbTypeFaunadb
|
||||||
isArangoDB := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeArangodb
|
isArangoDB := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeArangodb
|
||||||
isMongoDB := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeMongodb
|
isMongoDB := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeMongodb
|
||||||
|
isFaunaDB := envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseType) == constants.DbTypeFaunadb
|
||||||
|
|
||||||
if isSQL {
|
if isSQL {
|
||||||
Provider, err = sql.NewProvider()
|
Provider, err = sql.NewProvider()
|
||||||
|
@ -41,4 +43,11 @@ func InitDB() {
|
||||||
log.Fatal("=> error setting arangodb provider:", err)
|
log.Fatal("=> error setting arangodb provider:", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if isFaunaDB {
|
||||||
|
Provider, err = faunadb.NewProvider()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal("=> error setting arangodb provider:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
51
server/db/providers/faunadb/env.go
Normal file
51
server/db/providers/faunadb/env.go
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
package faunadb
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
f "github.com/fauna/faunadb-go/v5/faunadb"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
|
||||||
|
"github.com/authorizerdev/authorizer/server/db/models"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AddEnv to save environment information in database
|
||||||
|
func (p *provider) AddEnv(env models.Env) (models.Env, error) {
|
||||||
|
if env.ID == "" {
|
||||||
|
env.ID = uuid.New().String()
|
||||||
|
env.Key = env.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
env.CreatedAt = time.Now().Unix()
|
||||||
|
env.UpdatedAt = time.Now().Unix()
|
||||||
|
|
||||||
|
_, err := p.db.Query(
|
||||||
|
f.Create(
|
||||||
|
f.Collection(models.Collections.Env),
|
||||||
|
f.Obj{
|
||||||
|
"data": env,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error adding env:", err)
|
||||||
|
return env, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return env, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateEnv to update environment information in database
|
||||||
|
func (p *provider) UpdateEnv(env models.Env) (models.Env, error) {
|
||||||
|
env.UpdatedAt = time.Now().Unix()
|
||||||
|
|
||||||
|
return env, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEnv to get environment information from database
|
||||||
|
func (p *provider) GetEnv() (models.Env, error) {
|
||||||
|
var env models.Env
|
||||||
|
|
||||||
|
return env, nil
|
||||||
|
}
|
164
server/db/providers/faunadb/faunadb.go
Normal file
164
server/db/providers/faunadb/faunadb.go
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
package faunadb
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"log"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/authorizerdev/authorizer/server/constants"
|
||||||
|
"github.com/authorizerdev/authorizer/server/db/models"
|
||||||
|
"github.com/authorizerdev/authorizer/server/envstore"
|
||||||
|
f "github.com/fauna/faunadb-go/v5/faunadb"
|
||||||
|
)
|
||||||
|
|
||||||
|
type provider struct {
|
||||||
|
db *f.FaunaClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewProvider returns a new faunadb provider
|
||||||
|
func NewProvider() (*provider, error) {
|
||||||
|
secret := ""
|
||||||
|
dbURL := "https://db.fauna.com"
|
||||||
|
|
||||||
|
// secret,url is stored in DATABASE_URL
|
||||||
|
dbURLSplit := strings.Split(envstore.EnvInMemoryStoreObj.GetStringStoreEnvVariable(constants.EnvKeyDatabaseURL), ":")
|
||||||
|
secret = dbURLSplit[0]
|
||||||
|
|
||||||
|
if len(dbURLSplit) > 1 {
|
||||||
|
dbURL = dbURLSplit[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
client := f.NewFaunaClient(secret, f.Endpoint(dbURL))
|
||||||
|
if client == nil {
|
||||||
|
return nil, errors.New("failed to create faunadb client")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err := client.Query(
|
||||||
|
f.CreateCollection(f.Obj{"name": models.Collections.Env}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = client.Query(
|
||||||
|
f.CreateIndex(
|
||||||
|
f.Obj{
|
||||||
|
"name": "env_id",
|
||||||
|
"source": f.Collection(models.Collections.Env),
|
||||||
|
"values": "_id",
|
||||||
|
"unique": true,
|
||||||
|
}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = client.Query(
|
||||||
|
f.CreateIndex(
|
||||||
|
f.Obj{
|
||||||
|
"name": "env_key",
|
||||||
|
"source": f.Collection(models.Collections.Env),
|
||||||
|
"values": "_key",
|
||||||
|
"unique": true,
|
||||||
|
}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = client.Query(
|
||||||
|
f.CreateCollection(f.Obj{"name": models.Collections.User}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = client.Query(
|
||||||
|
f.CreateIndex(
|
||||||
|
f.Obj{
|
||||||
|
"name": "_id",
|
||||||
|
"source": f.Collection(models.Collections.User),
|
||||||
|
"unique": true,
|
||||||
|
}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = client.Query(
|
||||||
|
f.CreateIndex(
|
||||||
|
f.Obj{
|
||||||
|
"name": "_key",
|
||||||
|
"source": f.Collection(models.Collections.User),
|
||||||
|
"unique": true,
|
||||||
|
}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = client.Query(
|
||||||
|
f.CreateIndex(
|
||||||
|
f.Obj{
|
||||||
|
"name": "email",
|
||||||
|
"source": f.Collection(models.Collections.User),
|
||||||
|
"unique": true,
|
||||||
|
}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = client.Query(
|
||||||
|
f.CreateCollection(f.Obj{"name": models.Collections.Session}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = client.Query(
|
||||||
|
f.CreateIndex(
|
||||||
|
f.Obj{
|
||||||
|
"name": "_id",
|
||||||
|
"source": f.Collection(models.Collections.Session),
|
||||||
|
"unique": true,
|
||||||
|
}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = client.Query(
|
||||||
|
f.CreateIndex(
|
||||||
|
f.Obj{
|
||||||
|
"name": "_key",
|
||||||
|
"source": f.Collection(models.Collections.Session),
|
||||||
|
"unique": true,
|
||||||
|
}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = client.Query(
|
||||||
|
f.CreateCollection(f.Obj{"name": models.Collections.VerificationRequest}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = client.Query(
|
||||||
|
f.CreateIndex(
|
||||||
|
f.Obj{
|
||||||
|
"name": "_id",
|
||||||
|
"source": f.Collection(models.Collections.VerificationRequest),
|
||||||
|
"unique": true,
|
||||||
|
}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = client.Query(
|
||||||
|
f.CreateIndex(
|
||||||
|
f.Obj{
|
||||||
|
"name": "_key",
|
||||||
|
"source": f.Collection(models.Collections.VerificationRequest),
|
||||||
|
"unique": true,
|
||||||
|
}))
|
||||||
|
if err != nil {
|
||||||
|
log.Println("error:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return &provider{
|
||||||
|
db: client,
|
||||||
|
}, nil
|
||||||
|
}
|
25
server/db/providers/faunadb/session.go
Normal file
25
server/db/providers/faunadb/session.go
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
package faunadb
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/authorizerdev/authorizer/server/db/models"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AddSession to save session information in database
|
||||||
|
func (p *provider) AddSession(session models.Session) error {
|
||||||
|
if session.ID == "" {
|
||||||
|
session.ID = uuid.New().String()
|
||||||
|
}
|
||||||
|
|
||||||
|
session.CreatedAt = time.Now().Unix()
|
||||||
|
session.UpdatedAt = time.Now().Unix()
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteSession to delete session information from database
|
||||||
|
func (p *provider) DeleteSession(userId string) error {
|
||||||
|
return nil
|
||||||
|
}
|
60
server/db/providers/faunadb/user.go
Normal file
60
server/db/providers/faunadb/user.go
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
package faunadb
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/authorizerdev/authorizer/server/constants"
|
||||||
|
"github.com/authorizerdev/authorizer/server/db/models"
|
||||||
|
"github.com/authorizerdev/authorizer/server/envstore"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AddUser to save user information in database
|
||||||
|
func (p *provider) AddUser(user models.User) (models.User, error) {
|
||||||
|
if user.ID == "" {
|
||||||
|
user.ID = uuid.New().String()
|
||||||
|
}
|
||||||
|
|
||||||
|
if user.Roles == "" {
|
||||||
|
user.Roles = strings.Join(envstore.EnvInMemoryStoreObj.GetSliceStoreEnvVariable(constants.EnvKeyDefaultRoles), ",")
|
||||||
|
}
|
||||||
|
|
||||||
|
user.CreatedAt = time.Now().Unix()
|
||||||
|
user.UpdatedAt = time.Now().Unix()
|
||||||
|
|
||||||
|
return user, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateUser to update user information in database
|
||||||
|
func (p *provider) UpdateUser(user models.User) (models.User, error) {
|
||||||
|
user.UpdatedAt = time.Now().Unix()
|
||||||
|
|
||||||
|
return user, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteUser to delete user information from database
|
||||||
|
func (p *provider) DeleteUser(user models.User) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListUsers to get list of users from database
|
||||||
|
func (p *provider) ListUsers() ([]models.User, error) {
|
||||||
|
var users []models.User
|
||||||
|
|
||||||
|
return users, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserByEmail to get user information from database using email address
|
||||||
|
func (p *provider) GetUserByEmail(email string) (models.User, error) {
|
||||||
|
var user models.User
|
||||||
|
|
||||||
|
return user, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetUserByID to get user information from database using user ID
|
||||||
|
func (p *provider) GetUserByID(id string) (models.User, error) {
|
||||||
|
var user models.User
|
||||||
|
|
||||||
|
return user, nil
|
||||||
|
}
|
46
server/db/providers/faunadb/verification_requests.go
Normal file
46
server/db/providers/faunadb/verification_requests.go
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
package faunadb
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/authorizerdev/authorizer/server/db/models"
|
||||||
|
"github.com/google/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AddVerification to save verification request in database
|
||||||
|
func (p *provider) AddVerificationRequest(verificationRequest models.VerificationRequest) (models.VerificationRequest, error) {
|
||||||
|
if verificationRequest.ID == "" {
|
||||||
|
verificationRequest.ID = uuid.New().String()
|
||||||
|
}
|
||||||
|
|
||||||
|
verificationRequest.CreatedAt = time.Now().Unix()
|
||||||
|
verificationRequest.UpdatedAt = time.Now().Unix()
|
||||||
|
|
||||||
|
return verificationRequest, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetVerificationRequestByToken to get verification request from database using token
|
||||||
|
func (p *provider) GetVerificationRequestByToken(token string) (models.VerificationRequest, error) {
|
||||||
|
var verificationRequest models.VerificationRequest
|
||||||
|
|
||||||
|
return verificationRequest, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetVerificationRequestByEmail to get verification request by email from database
|
||||||
|
func (p *provider) GetVerificationRequestByEmail(email string, identifier string) (models.VerificationRequest, error) {
|
||||||
|
var verificationRequest models.VerificationRequest
|
||||||
|
|
||||||
|
return verificationRequest, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListVerificationRequests to get list of verification requests from database
|
||||||
|
func (p *provider) ListVerificationRequests() ([]models.VerificationRequest, error) {
|
||||||
|
var verificationRequests []models.VerificationRequest
|
||||||
|
|
||||||
|
return verificationRequests, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteVerificationRequest to delete verification request from database
|
||||||
|
func (p *provider) DeleteVerificationRequest(verificationRequest models.VerificationRequest) error {
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -6,6 +6,7 @@ require (
|
||||||
github.com/99designs/gqlgen v0.14.0
|
github.com/99designs/gqlgen v0.14.0
|
||||||
github.com/arangodb/go-driver v1.2.1
|
github.com/arangodb/go-driver v1.2.1
|
||||||
github.com/coreos/go-oidc/v3 v3.1.0
|
github.com/coreos/go-oidc/v3 v3.1.0
|
||||||
|
github.com/fauna/faunadb-go/v5 v5.0.0-beta // indirect
|
||||||
github.com/gin-contrib/location v0.0.2
|
github.com/gin-contrib/location v0.0.2
|
||||||
github.com/gin-gonic/gin v1.7.2
|
github.com/gin-gonic/gin v1.7.2
|
||||||
github.com/go-playground/validator/v10 v10.8.0 // indirect
|
github.com/go-playground/validator/v10 v10.8.0 // indirect
|
||||||
|
|
|
@ -79,6 +79,8 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
|
||||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
|
github.com/fauna/faunadb-go/v5 v5.0.0-beta h1:qjig7OPEsDPH/DJuHWIrOboreYd5aLQnSCzLgHDpnck=
|
||||||
|
github.com/fauna/faunadb-go/v5 v5.0.0-beta/go.mod h1:eoEA8JUERBnzK5/8Rxnetzx326ImTZ8c++wi2GQwrEU=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
|
@ -456,6 +458,7 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R
|
||||||
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
|
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||||
golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q=
|
golang.org/x/net v0.0.0-20210614182718-04defd469f4e h1:XpT3nA5TvE525Ne3hInMh6+GETgn27Zfm9dxsThnX2Q=
|
||||||
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
|
|
Loading…
Reference in New Issue
Block a user