[#3617] added expiry field to the OAuth2 user
This commit is contained in:
		
							parent
							
								
									3b79535dc7
								
							
						
					
					
						commit
						99bdb4e701
					
				| 
						 | 
					@ -31,6 +31,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Updated links formatting in the autogenerated html->text mail body.
 | 
					- Updated links formatting in the autogenerated html->text mail body.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Added `expiry` field to the OAuth2 user response containing the _optional_ expiration time of the OAuth2 access token ([#3617](https://github.com/pocketbase/pocketbase/discussions/3617)).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## v0.20.0-rc3
 | 
					## v0.20.0-rc3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,6 +13,7 @@ import (
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/golang-jwt/jwt/v4"
 | 
						"github.com/golang-jwt/jwt/v4"
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"github.com/spf13/cast"
 | 
						"github.com/spf13/cast"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -74,6 +75,8 @@ func (p *Apple) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if cast.ToBool(extracted.EmailVerified) {
 | 
						if cast.ToBool(extracted.EmailVerified) {
 | 
				
			||||||
		user.Email = extracted.Email
 | 
							user.Email = extracted.Email
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@ import (
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +19,7 @@ type AuthUser struct {
 | 
				
			||||||
	RawUser      map[string]any `json:"rawUser"`
 | 
						RawUser      map[string]any `json:"rawUser"`
 | 
				
			||||||
	AccessToken  string         `json:"accessToken"`
 | 
						AccessToken  string         `json:"accessToken"`
 | 
				
			||||||
	RefreshToken string         `json:"refreshToken"`
 | 
						RefreshToken string         `json:"refreshToken"`
 | 
				
			||||||
 | 
						Expiry       types.DateTime `json:"expiry"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Provider defines a common interface for an OAuth2 client.
 | 
					// Provider defines a common interface for an OAuth2 client.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@ import (
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -73,6 +74,9 @@ func (p *Discord) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		AccessToken:  token.AccessToken,
 | 
							AccessToken:  token.AccessToken,
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if extracted.Verified {
 | 
						if extracted.Verified {
 | 
				
			||||||
		user.Email = extracted.Email
 | 
							user.Email = extracted.Email
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
	"golang.org/x/oauth2/facebook"
 | 
						"golang.org/x/oauth2/facebook"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -65,5 +66,7 @@ func (p *Facebook) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return user, nil
 | 
						return user, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@ import (
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,5 +66,7 @@ func (p *Gitea) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return user, nil
 | 
						return user, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,6 +7,7 @@ import (
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/go-ozzo/ozzo-validation/v4/is"
 | 
						"github.com/go-ozzo/ozzo-validation/v4/is"
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,6 +67,8 @@ func (p *Gitee) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if extracted.Email != "" && is.EmailFormat.Validate(extracted.Email) == nil {
 | 
						if extracted.Email != "" && is.EmailFormat.Validate(extracted.Email) == nil {
 | 
				
			||||||
		// valid public primary email
 | 
							// valid public primary email
 | 
				
			||||||
		user.Email = extracted.Email
 | 
							user.Email = extracted.Email
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@ import (
 | 
				
			||||||
	"io"
 | 
						"io"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
	"golang.org/x/oauth2/github"
 | 
						"golang.org/x/oauth2/github"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -67,6 +68,8 @@ func (p *Github) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// in case user has set "Keep my email address private", send an
 | 
						// in case user has set "Keep my email address private", send an
 | 
				
			||||||
	// **optional** API request to retrieve the verified primary email
 | 
						// **optional** API request to retrieve the verified primary email
 | 
				
			||||||
	if user.Email == "" {
 | 
						if user.Email == "" {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@ import (
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,5 +66,7 @@ func (p *Gitlab) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return user, nil
 | 
						return user, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -63,6 +64,8 @@ func (p *Google) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if extracted.VerifiedEmail {
 | 
						if extracted.VerifiedEmail {
 | 
				
			||||||
		user.Email = extracted.Email
 | 
							user.Email = extracted.Email
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
	"golang.org/x/oauth2/instagram"
 | 
						"golang.org/x/oauth2/instagram"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -59,5 +60,7 @@ func (p *Instagram) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return user, nil
 | 
						return user, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@ import (
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
	"golang.org/x/oauth2/kakao"
 | 
						"golang.org/x/oauth2/kakao"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -68,6 +69,9 @@ func (p *Kakao) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		AccessToken:  token.AccessToken,
 | 
							AccessToken:  token.AccessToken,
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if extracted.KakaoAccount.IsEmailValid && extracted.KakaoAccount.IsEmailVerified {
 | 
						if extracted.KakaoAccount.IsEmailValid && extracted.KakaoAccount.IsEmailVerified {
 | 
				
			||||||
		user.Email = extracted.KakaoAccount.Email
 | 
							user.Email = extracted.KakaoAccount.Email
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,6 +63,8 @@ func (p *Livechat) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if extracted.EmailVerified {
 | 
						if extracted.EmailVerified {
 | 
				
			||||||
		user.Email = extracted.Email
 | 
							user.Email = extracted.Email
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@ import (
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,6 +67,8 @@ func (p *Mailcow) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// mailcow usernames are usually just the email adresses, so we just take the part in front of the @
 | 
						// mailcow usernames are usually just the email adresses, so we just take the part in front of the @
 | 
				
			||||||
	if strings.Contains(user.Username, "@") {
 | 
						if strings.Contains(user.Username, "@") {
 | 
				
			||||||
		user.Username = strings.Split(user.Username, "@")[0]
 | 
							user.Username = strings.Split(user.Username, "@")[0]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
	"golang.org/x/oauth2/microsoft"
 | 
						"golang.org/x/oauth2/microsoft"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -63,5 +64,7 @@ func (p *Microsoft) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return user, nil
 | 
						return user, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,6 +66,8 @@ func (p *OIDC) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if extracted.EmailVerified {
 | 
						if extracted.EmailVerified {
 | 
				
			||||||
		user.Email = extracted.Email
 | 
							user.Email = extracted.Email
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -70,6 +71,8 @@ func (p *Patreon) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if extracted.Data.Attributes.IsEmailVerified {
 | 
						if extracted.Data.Attributes.IsEmailVerified {
 | 
				
			||||||
		user.Email = extracted.Data.Attributes.Email
 | 
							user.Email = extracted.Data.Attributes.Email
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
	"golang.org/x/oauth2/spotify"
 | 
						"golang.org/x/oauth2/spotify"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -69,6 +70,9 @@ func (p *Spotify) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		AccessToken:  token.AccessToken,
 | 
							AccessToken:  token.AccessToken,
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(extracted.Images) > 0 {
 | 
						if len(extracted.Images) > 0 {
 | 
				
			||||||
		user.AvatarUrl = extracted.Images[0].Url
 | 
							user.AvatarUrl = extracted.Images[0].Url
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,6 +5,7 @@ import (
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -68,6 +69,8 @@ func (p *Strava) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if extracted.Id != 0 {
 | 
						if extracted.Id != 0 {
 | 
				
			||||||
		user.Id = strconv.Itoa(extracted.Id)
 | 
							user.Id = strconv.Itoa(extracted.Id)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,7 @@ import (
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
	"golang.org/x/oauth2/twitch"
 | 
						"golang.org/x/oauth2/twitch"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -73,6 +74,8 @@ func (p *Twitch) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return user, nil
 | 
						return user, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -74,5 +75,7 @@ func (p *Twitter) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return user, nil
 | 
						return user, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,6 +8,7 @@ import (
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
	"golang.org/x/oauth2/vk"
 | 
						"golang.org/x/oauth2/vk"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -77,6 +78,8 @@ func (p *VK) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if email := token.Extra("email"); email != nil {
 | 
						if email := token.Extra("email"); email != nil {
 | 
				
			||||||
		user.Email = fmt.Sprint(email)
 | 
							user.Email = fmt.Sprint(email)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,6 +4,7 @@ import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/pocketbase/pocketbase/tools/types"
 | 
				
			||||||
	"golang.org/x/oauth2"
 | 
						"golang.org/x/oauth2"
 | 
				
			||||||
	"golang.org/x/oauth2/yandex"
 | 
						"golang.org/x/oauth2/yandex"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					@ -67,6 +68,8 @@ func (p *Yandex) FetchAuthUser(token *oauth2.Token) (*AuthUser, error) {
 | 
				
			||||||
		RefreshToken: token.RefreshToken,
 | 
							RefreshToken: token.RefreshToken,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						user.Expiry, _ = types.ParseDateTime(token.Expiry)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !extracted.IsAvatarEmpty {
 | 
						if !extracted.IsAvatarEmpty {
 | 
				
			||||||
		user.AvatarUrl = "https://avatars.yandex.net/get-yapic/" + extracted.AvatarId + "/islands-200"
 | 
							user.AvatarUrl = "https://avatars.yandex.net/get-yapic/" + extracted.AvatarId + "/islands-200"
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue