Overview
This plugin implements Telegram WebApp Auth and Telegram Login Widget for the pocketbase
Requirements
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
- string
first_name
- string
last_name
- string
telegram_username
- string
telegram_id
- string
language_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);
});
pocketbase_plugin_telegram_auth
import "github.com/iamelevich/pocketbase-plugin-telegram-auth"
Index
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
}
type Plugin
type Plugin struct {
// contains filtered or unexported fields
}
func MustRegister
func MustRegister(app core.App, options *Options) *Plugin
MustRegister is a helper function to register plugin and panic if error occurred.
func Register
func Register(app core.App, options *Options) (*Plugin, error)
Register plugin in PocketBase app.
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.
func (*Plugin) GetCollection
func (p *Plugin) GetCollection() (*models.Collection, error)
GetCollection returns PocketBase collection object for collection with name or id from options.CollectionKey.
func (p *Plugin) GetForm(optAuthRecord *models.Record) (*forms.RecordTelegramLogin, error)
GetForm returns Telegram login form for collection with name or id from options.CollectionKey.
func (*Plugin) Validate
func (p *Plugin) Validate() error
Validate plugin options. Return error if some option is invalid.
Generated by gomarkdoc
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 with pre-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)