Awesome
<!-- TOC --> <!-- TOC -->Overview
This plugin implements Telegram WebApp Auth and Telegram Login Widget for the pocketbase
Requirements
- Go 1.18+
- Pocketbase 0.12+
Installation
go get github.com/iamelevich/pocketbase-plugin-telegram-auth
Autofill fields
Next fields will be filled from telegram in auth collection record if exists:
name
- stringfirst_name
- stringlast_name
- stringtelegram_username
- stringtelegram_id
- stringlanguage_code
- string
Example
You can check examples in examples folder
package main
import (
tgAuthPlugin "github.com/iamelevich/pocketbase-plugin-telegram-auth"
"log"
"github.com/pocketbase/pocketbase"
)
func main() {
app := pocketbase.New()
// Setup tg auth for users collection
tgAuthPlugin.MustRegister(app, &tgAuthPlugin.Options{
BotToken: "YOUR_SUPER_SECRET_BOT_TOKEN", // Better to use ENV variable for that
CollectionKey: "users",
})
if err := app.Start(); err != nil {
log.Fatal(err)
}
}
After that new route POST /api/collections/users/auth-with-telegram
will be available.
Usage
Simple usage with js. You can check react example here
const pb = new PocketBase('http://127.0.0.1:8090');
pb.send('/api/collections/users/auth-with-telegram', {
method: 'POST',
body: {
data: window.Telegram.WebApp.initData
}
}).then(res => {
pb.authStore.save(res.token, res.record);
});
<!-- gomarkdoc:embed:start -->
<!-- Code generated by gomarkdoc. DO NOT EDIT -->
pocketbase_plugin_telegram_auth
import "github.com/iamelevich/pocketbase-plugin-telegram-auth"
Index
- type Options
- type Plugin
- func MustRegister(app core.App, options *Options) *Plugin
- func Register(app core.App, options *Options) (*Plugin, error)
- func (p *Plugin) AuthByTelegramData(tgData forms.TelegramData) (*models.Record, *auth.AuthUser, error)
- func (p *Plugin) GetCollection() (*models.Collection, error)
- func (p *Plugin) GetForm(optAuthRecord *models.Record) (*forms.RecordTelegramLogin, error)
- func (p *Plugin) Validate() error
<a name="Options"></a>
type Options
Options defines optional struct to customize the default plugin behavior.
type Options struct {
// BotToken is a Telegram bot token.
// You can get it from @BotFather.
BotToken string
// CollectionKey is a collection key (name or id) for PocketBase auth collection.
CollectionKey string
}
<a name="Plugin"></a>
type Plugin
type Plugin struct {
// contains filtered or unexported fields
}
<a name="MustRegister"></a>
func MustRegister
func MustRegister(app core.App, options *Options) *Plugin
MustRegister is a helper function to register plugin and panic if error occurred.
<a name="Register"></a>
func Register
func Register(app core.App, options *Options) (*Plugin, error)
Register plugin in PocketBase app.
<a name="Plugin.AuthByTelegramData"></a>
func (*Plugin) AuthByTelegramData
func (p *Plugin) AuthByTelegramData(tgData forms.TelegramData) (*models.Record, *auth.AuthUser, error)
AuthByTelegramData returns auth record and auth user by Telegram data.
<a name="Plugin.GetCollection"></a>
func (*Plugin) GetCollection
func (p *Plugin) GetCollection() (*models.Collection, error)
GetCollection returns PocketBase collection object for collection with name or id from options.CollectionKey.
<a name="Plugin.GetForm"></a>
func (*Plugin) GetForm
func (p *Plugin) GetForm(optAuthRecord *models.Record) (*forms.RecordTelegramLogin, error)
GetForm returns Telegram login form for collection with name or id from options.CollectionKey.
<a name="Plugin.Validate"></a>
func (*Plugin) Validate
func (p *Plugin) Validate() error
Validate plugin options. Return error if some option is invalid.
Generated by gomarkdoc
<!-- gomarkdoc:embed:end -->Contributing
This pocketbase plugin is free and open source project licensed under the MIT License. You are free to do whatever you want with it, even offering it as a paid service.
Process
- Fork the repo
- Create a new branch
- Make your changes
- Create a pull request
- Wait for review
- Make changes if needed
- Merge
- Celebrate :)
Development setup
- Install asdf and plugins for tools listed in .tool-versions file.
- This repo also uses asdf-direnv. Install it and run
direnv allow
in the repo root. - Setup
pre-commit
hooks withpre-commit install -t commit-msg -t pre-commit
Testing
- Run
task test
to run tests - Run
task test:report
to run tests and get coverage report in./coverage.html
Writing tests
- Check PocketBase testing guide this will be used for API calls testing
- To run test server and update testdata run
task run:test-server
- Go to admin panel http://localhost:8090/_/
- Login:
test@test.test
- Password:
testpassword
- Folder with sqlite db:
./test/test_pb_data
Linting
- Run
task lint
to run linters
Docs update in README
- Run
task docs
to update docs in README (it will also install gomarkdoc)