iamelevich / pocketbase-plugin-telegram-auth

This plugin implements Telegram WebApp Auth and Telegram Login Widget for the pocketbase

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Test codecov

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 (*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.

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 make test to run tests
  • Run make test-coverage to run tests with coverage report

Writing tests

  • Check PocketBase testing guide this will be used for API calls testing
  • To run test server and update testdata run make 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 make lint to run linters

Docs update in README

  • Install gomarkdoc
  • Run make docs to update docs in README

About

This plugin implements Telegram WebApp Auth and Telegram Login Widget for the pocketbase

License:MIT License


Languages

Language:Go 98.3%Language:Makefile 1.7%