Home

Awesome

Test codecov

<!-- TOC --> <!-- TOC -->

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:

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

<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

Development setup

Testing

Writing tests

Linting

Docs update in README