Documentation
¶
Overview ¶
Package etcd contains gotd storage implementations using etcd.
Index ¶
- type Credentials
- type PeerStorage
- func (s PeerStorage) Add(ctx context.Context, value storage.Peer) error
- func (s PeerStorage) Assign(ctx context.Context, key string, value storage.Peer) error
- func (s PeerStorage) Find(ctx context.Context, key storage.PeerKey) (storage.Peer, error)
- func (s PeerStorage) Iterate(ctx context.Context) (storage.PeerIterator, error)
- func (s PeerStorage) Resolve(ctx context.Context, key string) (storage.Peer, error)
- func (s *PeerStorage) WithIterLimit(iterLimit int64) *PeerStorage
- type SessionStorage
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Credentials ¶
type Credentials struct {
kv.Credentials
}
Credentials stores user credentials to etcd.
Example ¶
package main
import (
"context"
"fmt"
"os"
"os/signal"
"time"
clientv3 "go.etcd.io/etcd/client/v3"
"golang.org/x/xerrors"
"github.com/gotd/td/telegram"
"github.com/gotd/contrib/auth"
"github.com/gotd/contrib/auth/terminal"
"github.com/gotd/contrib/etcd"
)
func etcdAuth(ctx context.Context) error {
c, err := clientv3.New(clientv3.Config{
Endpoints: []string{"localhost:2379"},
DialTimeout: 5 * time.Second,
})
if err != nil {
return xerrors.Errorf("create etcd storage: %w", err)
}
cred := etcd.NewCredentials(c).
WithPhoneKey("phone").
WithPasswordKey("password")
client, err := telegram.ClientFromEnvironment(telegram.Options{})
if err != nil {
return xerrors.Errorf("create client: %w", err)
}
return client.Run(ctx, func(ctx context.Context) error {
return client.AuthIfNecessary(
ctx,
telegram.NewAuth(auth.Build(cred, terminal.OS()), telegram.SendCodeOptions{}),
)
})
}
func main() {
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
if err := etcdAuth(ctx); err != nil {
_, _ = fmt.Fprintf(os.Stderr, "%+v\n", err)
os.Exit(1)
}
}
func NewCredentials ¶
func NewCredentials(client *clientv3.Client) Credentials
NewCredentials creates new Credentials.
type PeerStorage ¶
type PeerStorage struct {
// contains filtered or unexported fields
}
PeerStorage is a peer storage based on etcd.
func NewPeerStorage ¶
func NewPeerStorage(etcd *clientv3.Client) *PeerStorage
NewPeerStorage creates new peer storage using etcd.
func (PeerStorage) Assign ¶
Assign adds given peer to the storage and associate it to the given key.
func (PeerStorage) Iterate ¶ added in v0.5.0
func (s PeerStorage) Iterate(ctx context.Context) (storage.PeerIterator, error)
Iterate creates and returns new PeerIterator
func (*PeerStorage) WithIterLimit ¶ added in v0.5.0
func (s *PeerStorage) WithIterLimit(iterLimit int64) *PeerStorage
WithIterLimit sets limit of buffer for used for iteration.
type SessionStorage ¶
SessionStorage is a MTProto session etcd storage.
Example ¶
package main
import (
"context"
"fmt"
"os"
"os/signal"
"time"
clientv3 "go.etcd.io/etcd/client/v3"
"golang.org/x/xerrors"
"github.com/gotd/td/telegram"
"github.com/gotd/contrib/etcd"
)
func etcdStorage(ctx context.Context) error {
c, err := clientv3.New(clientv3.Config{
Endpoints: []string{"localhost:2379"},
DialTimeout: 5 * time.Second,
})
if err != nil {
return xerrors.Errorf("create etcd storage: %w", err)
}
storage := etcd.NewSessionStorage(c, "session")
client, err := telegram.ClientFromEnvironment(telegram.Options{
SessionStorage: storage,
})
if err != nil {
return xerrors.Errorf("create client: %w", err)
}
return client.Run(ctx, func(ctx context.Context) error {
_, err := client.AuthBot(ctx, os.Getenv("BOT_TOKEN"))
return err
})
}
func main() {
ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
defer cancel()
if err := etcdStorage(ctx); err != nil {
_, _ = fmt.Fprintf(os.Stderr, "%+v\n", err)
os.Exit(1)
}
}
func NewSessionStorage ¶
func NewSessionStorage(client *clientv3.Client, key string) SessionStorage
NewSessionStorage creates new SessionStorage.
Click to show internal directories.
Click to hide internal directories.