oauth

package
v3.0.0-alpha.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 1, 2024 License: MIT Imports: 8 Imported by: 0

README

oauth Plugin

This plugin provides the ability to initiate an OAuth authentication flow with a wide range of OAuth providers:

  • Amazon
  • Apple
  • Auth0
  • AzureAD
  • BattleNet
  • Bitbucket
  • Box
  • Dailymotion
  • Deezer
  • DigitalOcean
  • Discord
  • Dropbox
  • EveOnline
  • Facebook
  • Fitbit
  • Gitea
  • Gitlab
  • Github
  • Google
  • GooglePlus
  • Heroku
  • Intercom
  • Instagram
  • Kakao
  • LastFM
  • LinkedIn
  • Line
  • Mastodon
  • Meetup
  • MicrosoftOnline
  • Naver
  • NextCloud
  • Okta
  • Onedrive
  • OpenIDConnect
  • Patreon
  • PayPal
  • SalesForce
  • SeaTalk
  • Shopify
  • Slack
  • SoundCloud
  • Spotify
  • Steam
  • Strava
  • Stripe
  • TikTok
  • Twitter
  • TwitterV2
  • Typetalk
  • Twitch
  • Uber
  • VK
  • WeCom
  • Wepay
  • Xero
  • Yahoo
  • Yammer
  • Yandex
  • Zoom

Installation

Add the plugin to the Plugins option in the Applications options. This example we are using the github provider:

package main

import (
    "github.com/wailsapp/wails/v3/pkg/application"
    "github.com/wailsapp/wails/v3/plugins/browser"
)

func main() {
    oAuthPlugin := oauth.NewPlugin(oauth.Config{
        Providers: []goth.Provider{
            github.New(
                os.Getenv("clientkey"),
                os.Getenv("secret"),
                "http://localhost:9876/auth/github/callback",
                "email",
                "profile"),
        },
    })

    app := application.New(application.Options{
    // ...
    Plugins: map[string]application.Plugin{
        "oauth": oAuthPlugin,
    },
})
Configuration

The plugin takes a Config struct as a parameter. This struct has the following fields:

type Config struct {

    // Address to bind the temporary webserver to
    // Defaults to localhost:9876
    Address string
    
    // SessionSecret is the secret used to encrypt the session store.
    SessionSecret string
    
    // MaxAge is the maximum age of the session in seconds.
    MaxAge int
    
    // Providers is a list of goth providers to use.
    Providers []goth.Provider
    
    // WindowConfig is the configuration for the window that will be opened
    // to perform the OAuth login.
    WindowConfig *application.WebviewWindowOptions
}

If you don't specify a WindowConfig, the plugin will use the default window configuration:

&application.WebviewWindowOptions{
    Title:  "OAuth Login",
    Width:  600,
    Height: 850,
    Hidden: true,
}

Usage

Go

You can start the flow by calling one of the provider methods:

err := oAuthPlugin.Github()

In this example, we send an event from the frontend to start the process, so we listen for the event in the backend:

app.Events.On("github-login", func(e *application.WailsEvent) {
    err := oAuthPlugin.Github()
    if err != nil {
        // process error
    }
})
JavaScript

You can start the flow by calling one of the provider methods:

await wails.Plugin("oauth","Github")
Handling Success & Failure

When the OAuth flow completes, the plugin will send one of 2 events:

- `wails:oauth:success` - The OAuth flow completed successfully. The event data will contain the user information.
- `wails:oauth:error` - The OAuth flow failed. The event data will contain the error message.

In Javascript, we can listen for these events like so:

window.wails.Events.On("wails:oauth:success", (event) => {
    document.getElementById("main").style.display = "none";
    document.getElementById("name").innerText = event.data.Name;
    document.getElementById("logo").src = event.data.AvatarURL;
    document.body.style.backgroundColor = "#000";
    document.body.style.color = "#FFF";
});

If you want to handle them in Go, you can do so like this:

app.Events.On("wails:oauth:success", func(e *application.WailsEvent) {
    // Do something with the user data
})

Both these events are constants in the plugin:

const (
    Success = "wails:oauth:success"
    Error   = "wails:oauth:error"
)

There is a working example of GitHub auth in the v3/examples/oauth directory.

Logging Out

To log out, you can call the relevant Logout method for the provider:

    err := oAuthPlugin.GithubLogout()

On success, the plugin will send a wails:oauth:loggedout event. On failure, it will send a wails:oauth:error event.

Support

If you find a bug in this plugin, please raise a ticket on the Wails Issue Tracker.

Documentation

Index

Constants

View Source
const (
	Success   = "wails:oauth:success"
	Error     = "wails:oauth:error"
	LoggedOut = "wails:oauth:loggedout"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {

	// Address to bind the temporary webserver to
	// Defaults to localhost:9876
	Address string

	// SessionSecret is the secret used to encrypt the session store.
	SessionSecret string

	// MaxAge is the maximum age of the session in seconds.
	MaxAge int

	// Providers is a list of goth providers to use.
	Providers []goth.Provider

	// WindowConfig is the configuration for the window that will be opened
	// to perform the OAuth login.
	WindowConfig *application.WebviewWindowOptions
}

type Plugin

type Plugin struct {
	// contains filtered or unexported fields
}

func NewPlugin

func NewPlugin(config Config) *Plugin

func (*Plugin) Amazon

func (p *Plugin) Amazon() error

func (*Plugin) Apple

func (p *Plugin) Apple() error

func (*Plugin) Auth0

func (p *Plugin) Auth0() error

func (*Plugin) AzureAD

func (p *Plugin) AzureAD() error

func (*Plugin) BattleNet

func (p *Plugin) BattleNet() error

func (*Plugin) Bitbucket

func (p *Plugin) Bitbucket() error

func (*Plugin) Box

func (p *Plugin) Box() error

func (*Plugin) CallableByJS

func (p *Plugin) CallableByJS() []string

func (*Plugin) Dailymotion

func (p *Plugin) Dailymotion() error

func (*Plugin) Deezer

func (p *Plugin) Deezer() error

func (*Plugin) DigitalOcean

func (p *Plugin) DigitalOcean() error

func (*Plugin) Discord

func (p *Plugin) Discord() error

func (*Plugin) Dropbox

func (p *Plugin) Dropbox() error

func (*Plugin) EveOnline

func (p *Plugin) EveOnline() error

func (*Plugin) Facebook

func (p *Plugin) Facebook() error

func (*Plugin) Fitbit

func (p *Plugin) Fitbit() error

func (*Plugin) Gitea

func (p *Plugin) Gitea() error

func (*Plugin) Github

func (p *Plugin) Github() error

func (*Plugin) Gitlab

func (p *Plugin) Gitlab() error

func (*Plugin) Google

func (p *Plugin) Google() error

func (*Plugin) GooglePlus

func (p *Plugin) GooglePlus() error

func (*Plugin) Heroku

func (p *Plugin) Heroku() error

func (*Plugin) Init

func (p *Plugin) Init() error

func (*Plugin) InjectJS

func (p *Plugin) InjectJS() string

func (*Plugin) Instagram

func (p *Plugin) Instagram() error

func (*Plugin) Intercom

func (p *Plugin) Intercom() error

func (*Plugin) Kakao

func (p *Plugin) Kakao() error

func (*Plugin) LastFM

func (p *Plugin) LastFM() error

func (*Plugin) Line

func (p *Plugin) Line() error

func (*Plugin) LinkedIn

func (p *Plugin) LinkedIn() error

func (*Plugin) LogoutAmazon

func (p *Plugin) LogoutAmazon() error

func (*Plugin) LogoutApple

func (p *Plugin) LogoutApple() error

func (*Plugin) LogoutAuth0

func (p *Plugin) LogoutAuth0() error

func (*Plugin) LogoutAzureAD

func (p *Plugin) LogoutAzureAD() error

func (*Plugin) LogoutBattleNet

func (p *Plugin) LogoutBattleNet() error

func (*Plugin) LogoutBitbucket

func (p *Plugin) LogoutBitbucket() error

func (*Plugin) LogoutBox

func (p *Plugin) LogoutBox() error

func (*Plugin) LogoutDailymotion

func (p *Plugin) LogoutDailymotion() error

func (*Plugin) LogoutDeezer

func (p *Plugin) LogoutDeezer() error

func (*Plugin) LogoutDigitalOcean

func (p *Plugin) LogoutDigitalOcean() error

func (*Plugin) LogoutDiscord

func (p *Plugin) LogoutDiscord() error

func (*Plugin) LogoutDropbox

func (p *Plugin) LogoutDropbox() error

func (*Plugin) LogoutEveOnline

func (p *Plugin) LogoutEveOnline() error

func (*Plugin) LogoutFacebook

func (p *Plugin) LogoutFacebook() error

func (*Plugin) LogoutFitbit

func (p *Plugin) LogoutFitbit() error

func (*Plugin) LogoutGitea

func (p *Plugin) LogoutGitea() error

func (*Plugin) LogoutGithub

func (p *Plugin) LogoutGithub() error

func (*Plugin) LogoutGitlab

func (p *Plugin) LogoutGitlab() error

func (*Plugin) LogoutGoogle

func (p *Plugin) LogoutGoogle() error

func (*Plugin) LogoutGooglePlus

func (p *Plugin) LogoutGooglePlus() error

func (*Plugin) LogoutHeroku

func (p *Plugin) LogoutHeroku() error

func (*Plugin) LogoutInstagram

func (p *Plugin) LogoutInstagram() error

func (*Plugin) LogoutIntercom

func (p *Plugin) LogoutIntercom() error

func (*Plugin) LogoutKakao

func (p *Plugin) LogoutKakao() error

func (*Plugin) LogoutLastFM

func (p *Plugin) LogoutLastFM() error

func (*Plugin) LogoutLine

func (p *Plugin) LogoutLine() error

func (*Plugin) LogoutLinkedIn

func (p *Plugin) LogoutLinkedIn() error

func (*Plugin) LogoutMastodon

func (p *Plugin) LogoutMastodon() error

func (*Plugin) LogoutMeetup

func (p *Plugin) LogoutMeetup() error

func (*Plugin) LogoutMicrosoftOnline

func (p *Plugin) LogoutMicrosoftOnline() error

func (*Plugin) LogoutNaver

func (p *Plugin) LogoutNaver() error

func (*Plugin) LogoutNextCloud

func (p *Plugin) LogoutNextCloud() error

func (*Plugin) LogoutOkta

func (p *Plugin) LogoutOkta() error

func (*Plugin) LogoutOnedrive

func (p *Plugin) LogoutOnedrive() error

func (*Plugin) LogoutOpenIDConnect

func (p *Plugin) LogoutOpenIDConnect() error

func (*Plugin) LogoutPatreon

func (p *Plugin) LogoutPatreon() error

func (*Plugin) LogoutPayPal

func (p *Plugin) LogoutPayPal() error

func (*Plugin) LogoutSalesForce

func (p *Plugin) LogoutSalesForce() error

func (*Plugin) LogoutSeaTalk

func (p *Plugin) LogoutSeaTalk() error

func (*Plugin) LogoutShopify

func (p *Plugin) LogoutShopify() error

func (*Plugin) LogoutSlack

func (p *Plugin) LogoutSlack() error

func (*Plugin) LogoutSoundCloud

func (p *Plugin) LogoutSoundCloud() error

func (*Plugin) LogoutSpotify

func (p *Plugin) LogoutSpotify() error

func (*Plugin) LogoutSteam

func (p *Plugin) LogoutSteam() error

func (*Plugin) LogoutStrava

func (p *Plugin) LogoutStrava() error

func (*Plugin) LogoutStripe

func (p *Plugin) LogoutStripe() error

func (*Plugin) LogoutTikTok

func (p *Plugin) LogoutTikTok() error

func (*Plugin) LogoutTwitch

func (p *Plugin) LogoutTwitch() error

func (*Plugin) LogoutTwitter

func (p *Plugin) LogoutTwitter() error

func (*Plugin) LogoutTwitterV2

func (p *Plugin) LogoutTwitterV2() error

func (*Plugin) LogoutTypetalk

func (p *Plugin) LogoutTypetalk() error

func (*Plugin) LogoutUber

func (p *Plugin) LogoutUber() error

func (*Plugin) LogoutVK

func (p *Plugin) LogoutVK() error

func (*Plugin) LogoutWeCom

func (p *Plugin) LogoutWeCom() error

func (*Plugin) LogoutWepay

func (p *Plugin) LogoutWepay() error

func (*Plugin) LogoutXero

func (p *Plugin) LogoutXero() error

func (*Plugin) LogoutYahoo

func (p *Plugin) LogoutYahoo() error

func (*Plugin) LogoutYammer

func (p *Plugin) LogoutYammer() error

func (*Plugin) LogoutYandex

func (p *Plugin) LogoutYandex() error

func (*Plugin) LogoutZoom

func (p *Plugin) LogoutZoom() error

func (*Plugin) Mastodon

func (p *Plugin) Mastodon() error

func (*Plugin) Meetup

func (p *Plugin) Meetup() error

func (*Plugin) MicrosoftOnline

func (p *Plugin) MicrosoftOnline() error

func (*Plugin) Name

func (p *Plugin) Name() string

func (*Plugin) Naver

func (p *Plugin) Naver() error

func (*Plugin) NextCloud

func (p *Plugin) NextCloud() error

func (*Plugin) Okta

func (p *Plugin) Okta() error

func (*Plugin) Onedrive

func (p *Plugin) Onedrive() error

func (*Plugin) OpenIDConnect

func (p *Plugin) OpenIDConnect() error

func (*Plugin) Patreon

func (p *Plugin) Patreon() error

func (*Plugin) PayPal

func (p *Plugin) PayPal() error

func (*Plugin) SalesForce

func (p *Plugin) SalesForce() error

func (*Plugin) SeaTalk

func (p *Plugin) SeaTalk() error

func (*Plugin) Shopify

func (p *Plugin) Shopify() error

func (*Plugin) Shutdown

func (p *Plugin) Shutdown()

func (*Plugin) Slack

func (p *Plugin) Slack() error

func (*Plugin) SoundCloud

func (p *Plugin) SoundCloud() error

func (*Plugin) Spotify

func (p *Plugin) Spotify() error

func (*Plugin) Steam

func (p *Plugin) Steam() error

func (*Plugin) Strava

func (p *Plugin) Strava() error

func (*Plugin) Stripe

func (p *Plugin) Stripe() error

func (*Plugin) TikTok

func (p *Plugin) TikTok() error

func (*Plugin) Twitch

func (p *Plugin) Twitch() error

func (*Plugin) Twitter

func (p *Plugin) Twitter() error

func (*Plugin) TwitterV2

func (p *Plugin) TwitterV2() error

func (*Plugin) Typetalk

func (p *Plugin) Typetalk() error

func (*Plugin) Uber

func (p *Plugin) Uber() error

func (*Plugin) VK

func (p *Plugin) VK() error

func (*Plugin) WeCom

func (p *Plugin) WeCom() error

func (*Plugin) Wepay

func (p *Plugin) Wepay() error

func (*Plugin) Xero

func (p *Plugin) Xero() error

func (*Plugin) Yahoo

func (p *Plugin) Yahoo() error

func (*Plugin) Yammer

func (p *Plugin) Yammer() error

func (*Plugin) Yandex

func (p *Plugin) Yandex() error

func (*Plugin) Zoom

func (p *Plugin) Zoom() error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL