Yesod.Auth.GoogleEmail2

yesod-auth-1.4.13.5: Authentication for Yesod.

Safe Haskell | None
Language | Haskell98

Yesod.Auth.GoogleEmail2

Contents

- Authentication handlers
- User authentication token
- Person

Description

Use an email address as an identifier via Google's login system.

Note that this is a replacement for Yesod.Auth.GoogleEmail, which depends on Google's now deprecated OpenID system. For more information, see https://developers.google.com/+/api/auth-migration.

By using this plugin, you are trusting Google to validate an email address, and requiring users to have a Google account. On the plus side, you get to use email addresses as the identifier, many users have existing Google accounts, the login system has been long tested (as opposed to BrowserID), and it requires no credential managing or setup (as opposed to Email).

In order to use this plugin:

- Create an application on the Google Developer Console https://console.developers.google.com/
- Create OAuth credentials. The redirect URI will be http://yourdomain/auth/page/googleemail2/complete. (If you have your authentication subsite at a different root than /auth/, please adjust accordingly.)
- Enable the Google+ API.

Since 1.3.1

Synopsis

- authGoogleEmail :: YesodAuth m => Text -> Text -> AuthPlugin m
- authGoogleEmailSaveToken :: YesodAuth m => Text -> Text -> AuthPlugin m
- forwardUrl :: AuthRoute
- data Token = Token {
  - accessToken :: Text
  - tokenType :: Text
  }
- getUserAccessToken :: MonadHandler m => m (Maybe Token)
- getPerson :: Manager -> Token -> HandlerT site IO (Maybe Person)
- data Person = Person {
  - personId :: Text
  - personDisplayName :: Maybe Text
  - personName :: Maybe Name
  - personNickname :: Maybe Text
  - personBirthday :: Maybe Text
  - personGender :: Maybe Gender
  - personProfileUri :: Maybe Text
  - personImage :: Maybe PersonImage
  - personAboutMe :: Maybe Text
  - personRelationshipStatus :: Maybe RelationshipStatus
  - personUris :: [PersonURI]
  - personOrganizations :: [Organization]
  - personPlacesLived :: [Place]
  - personTagline :: Maybe Text
  - personIsPlusUser :: Maybe Bool
  - personBraggingRights :: Maybe Text
  - personPlusOneCount :: Maybe Int
  - personCircledByCount :: Maybe Int
  - personVerified :: Maybe Bool
  - personLanguage :: Maybe Text
  - personEmails :: [Email]
  - personDomain :: Maybe Text
  - personOccupation :: Maybe Text
  - personSkills :: Maybe Text
  }
- data Name = Name {
  - nameFormatted :: Maybe Text
  - nameFamily :: Maybe Text
  - nameGiven :: Maybe Text
  - nameMiddle :: Maybe Text
  - nameHonorificPrefix :: Maybe Text
  - nameHonorificSuffix :: Maybe Text
  }
- data Gender
  - = Male
  - | Female
  - | OtherGender
- newtype PersonImage = PersonImage {
  - imageUri :: Text
  }
- resizePersonImage :: PersonImage -> Int -> PersonImage
- data RelationshipStatus
  - = Single
  - | InRelationship
  - | Engaged
  - | Married
  - | Complicated
  - | OpenRelationship
  - | Widowed
  - | DomesticPartnership
  - | CivilUnion
  - | RelationshipStatus Text
- data PersonURI = PersonURI {
  - uriLabel :: Maybe Text
  - uriValue :: Maybe Text
  - uriType :: Maybe PersonURIType
  }
- data PersonURIType
  - = OtherProfile
  - | Contributor
  - | Website
  - | OtherURI
  - | PersonURIType Text
- data Organization = Organization {
  - orgName :: Maybe Text
  - orgTitle :: Maybe Text
  - orgType :: Maybe OrganizationType
  - orgStartDate :: Maybe Text
  - orgEndDate :: Maybe Text
  - orgPrimary :: Maybe Bool
  }
- data OrganizationType
  - = Work
  - | School
  - | OrganizationType Text
- data Place = Place {
  - placeValue :: Maybe Text
  - placePrimary :: Maybe Bool
  }
- data Email = Email {
  - emailValue :: Text
  - emailType :: EmailType
  }
- data EmailType
  - = EmailAccount
  - | EmailHome
  - | EmailWork
  - | EmailOther
  - | EmailType Text

# Authentication handlers

authGoogleEmail #

Arguments

:: YesodAuth m |
=> Text | client ID
-> Text | client secret
-> AuthPlugin m |

authGoogleEmailSaveToken #

Arguments

:: YesodAuth m |
=> Text | client ID
-> Text | client secret
-> AuthPlugin m |

An alternative version which stores user access token in the session variable. Use it if you want to request user's profile from your app.

Since 1.4.3

forwardUrl :: AuthRoute #

# User authentication token

data Token #

An authentication token which was acquired from OAuth callback. The token gets saved into the session storage only if you use `authGoogleEmailSaveToken`. You can acquire saved token with `getUserAccessToken`.

Since 1.4.3

Constructors

Token |
Fields accessToken :: Text tokenType :: Text

Instances

Eq Token # |
Methods (==) :: Token -> Token -> Bool # (/=) :: Token -> Token -> Bool #
Show Token # |
Methods showsPrec :: Int -> Token -> ShowS # show :: Token -> String # showList :: [Token] -> ShowS #
FromJSON Token # |
Methods parseJSON :: Value -> Parser Token #

getUserAccessToken :: MonadHandler m => m (Maybe Token) #

Get user's access token from the session. Returns Nothing if it's not found (probably because the user is not logged in via `GoogleEmail2` or you are not using `authGoogleEmailSaveToken`)

# Person

getPerson :: Manager -> Token -> HandlerT site IO (Maybe Person) #

Allows to fetch information about a user from Google's API. In case of parsing error returns `Nothing`. Will throw `HttpException` in case of network problems or error response code.

Since 1.4.3

data Person #

Information about the user Full description of the resource https://developers.google.com/+/api/latest/people

Since 1.4.3

Constructors

Person |
Fields personId :: Text personDisplayName :: Maybe Text The name of this person, which is suitable for display personName :: Maybe Name personNickname :: Maybe Text personBirthday :: Maybe Text Birthday formatted as YYYY-MM-DD personGender :: Maybe Gender personProfileUri :: Maybe Text The URI of this person's profile personImage :: Maybe PersonImage personAboutMe :: Maybe Text A short biography for this person personRelationshipStatus :: Maybe RelationshipStatus personUris :: [PersonURI] personOrganizations :: [Organization] personPlacesLived :: [Place] personTagline :: Maybe Text The brief description of this person personIsPlusUser :: Maybe Bool Whether this user has signed up for Google+ personBraggingRights :: Maybe Text The "bragging rights" line of this person personPlusOneCount :: Maybe Int if a Google+ page, the number of people who have +1'd this page personCircledByCount :: Maybe Int For followers who are visible, the number of people who have added this person or page to a circle. personVerified :: Maybe Bool Whether the person or Google+ Page has been verified. This is used only for pages with a higher risk of being impersonated or similar. This flag will not be present on most profiles. personLanguage :: Maybe Text The user's preferred language for rendering. personEmails :: [Email] personDomain :: Maybe Text personOccupation :: Maybe Text The occupation of this person personSkills :: Maybe Text The person's skills

Instances

Eq Person # |
Methods (==) :: Person -> Person -> Bool # (/=) :: Person -> Person -> Bool #
Show Person # |
Methods showsPrec :: Int -> Person -> ShowS # show :: Person -> String # showList :: [Person] -> ShowS #
FromJSON Person # |
Methods parseJSON :: Value -> Parser Person #

data Name #

Individual components of a name

Since 1.4.3

Constructors

Name |
Fields nameFormatted :: Maybe Text The full name of this person, including middle names, suffixes, etc nameFamily :: Maybe Text The family name (last name) of this person nameGiven :: Maybe Text The given name (first name) of this person nameMiddle :: Maybe Text The middle name of this person. nameHonorificPrefix :: Maybe Text The honorific prefixes (such as "Dr." or "Mrs.") for this person nameHonorificSuffix :: Maybe Text The honorific suffixes (such as "Jr.") for this person

Instances

Eq Name # |
Methods (==) :: Name -> Name -> Bool # (/=) :: Name -> Name -> Bool #
Show Name # |
Methods showsPrec :: Int -> Name -> ShowS # show :: Name -> String # showList :: [Name] -> ShowS #
FromJSON Name # |
Methods parseJSON :: Value -> Parser Name #

data Gender #

Gender of the person

Since 1.4.3

Constructors

Male |
Female |
OtherGender |

Instances

Eq Gender # |
Methods (==) :: Gender -> Gender -> Bool # (/=) :: Gender -> Gender -> Bool #
Show Gender # |
Methods showsPrec :: Int -> Gender -> ShowS # show :: Gender -> String # showList :: [Gender] -> ShowS #
FromJSON Gender # |
Methods parseJSON :: Value -> Parser Gender #

newtype PersonImage #

The URI of the person's profile photo.

Since 1.4.3

Constructors

PersonImage |
Fields imageUri :: Text

Instances

Eq PersonImage # |
Methods (==) :: PersonImage -> PersonImage -> Bool # (/=) :: PersonImage -> PersonImage -> Bool #
Show PersonImage # |
Methods showsPrec :: Int -> PersonImage -> ShowS # show :: PersonImage -> String # showList :: [PersonImage] -> ShowS #
FromJSON PersonImage # |
Methods parseJSON :: Value -> Parser PersonImage #

resizePersonImage :: PersonImage -> Int -> PersonImage #

`resizePersonImage img 30` would set query part to `?sz=30` which would resize the image under the URI. If for some reason you need to modify the query part, you should do it after resizing.

Since 1.4.3

data RelationshipStatus #

The person's relationship status.

Since 1.4.3

Constructors

Single | Person is single
InRelationship | Person is in a relationship
Engaged | Person is engaged
Married | Person is married
Complicated | The relationship is complicated
OpenRelationship | Person is in an open relationship
Widowed | Person is widowed
DomesticPartnership | Person is in a domestic partnership
CivilUnion | Person is in a civil union
RelationshipStatus Text | Something else

Instances

Eq RelationshipStatus # |
Methods (==) :: RelationshipStatus -> RelationshipStatus -> Bool # (/=) :: RelationshipStatus -> RelationshipStatus -> Bool #
Show RelationshipStatus # |
Methods showsPrec :: Int -> RelationshipStatus -> ShowS # show :: RelationshipStatus -> String # showList :: [RelationshipStatus] -> ShowS #
FromJSON RelationshipStatus # |
Methods parseJSON :: Value -> Parser RelationshipStatus #

data PersonURI #

URIs specified in the person's profile

Since 1.4.3

Constructors

PersonURI |
Fields uriLabel :: Maybe Text uriValue :: Maybe Text uriType :: Maybe PersonURIType

Instances

Eq PersonURI # |
Methods (==) :: PersonURI -> PersonURI -> Bool # (/=) :: PersonURI -> PersonURI -> Bool #
Show PersonURI # |
Methods showsPrec :: Int -> PersonURI -> ShowS # show :: PersonURI -> String # showList :: [PersonURI] -> ShowS #
FromJSON PersonURI # |
Methods parseJSON :: Value -> Parser PersonURI #

data PersonURIType #

The type of URI

Since 1.4.3

Constructors

OtherProfile | URI for another profile
Contributor | URI to a site for which this person is a contributor
Website | URI for this Google+ Page's primary website
OtherURI | Other URL
PersonURIType Text | Something else

Instances

Eq PersonURIType # |
Methods (==) :: PersonURIType -> PersonURIType -> Bool # (/=) :: PersonURIType -> PersonURIType -> Bool #
Show PersonURIType # |
Methods showsPrec :: Int -> PersonURIType -> ShowS # show :: PersonURIType -> String # showList :: [PersonURIType] -> ShowS #
FromJSON PersonURIType # |
Methods parseJSON :: Value -> Parser PersonURIType #

data Organization #

Current or past organizations with which this person is associated

Since 1.4.3

Constructors

Organization |
Fields orgName :: Maybe Text The person's job title or role within the organization orgTitle :: Maybe Text orgType :: Maybe OrganizationType The date that the person joined this organization. orgStartDate :: Maybe Text The date that the person left this organization. orgEndDate :: Maybe Text If `True`, indicates this organization is the person's ^ primary one, which is typically interpreted as the current one. orgPrimary :: Maybe Bool

Instances

Eq Organization # |
Methods (==) :: Organization -> Organization -> Bool # (/=) :: Organization -> Organization -> Bool #
Show Organization # |
Methods showsPrec :: Int -> Organization -> ShowS # show :: Organization -> String # showList :: [Organization] -> ShowS #
FromJSON Organization # |
Methods parseJSON :: Value -> Parser Organization #

data OrganizationType #

The type of an organization

Since 1.4.3

Constructors

Work |
School |
OrganizationType Text | Something else

Instances

Eq OrganizationType # |
Methods (==) :: OrganizationType -> OrganizationType -> Bool # (/=) :: OrganizationType -> OrganizationType -> Bool #
Show OrganizationType # |
Methods showsPrec :: Int -> OrganizationType -> ShowS # show :: OrganizationType -> String # showList :: [OrganizationType] -> ShowS #
FromJSON OrganizationType # |
Methods parseJSON :: Value -> Parser OrganizationType #

data Place #

A place where the person has lived or is living at the moment.

Since 1.4.3

Constructors

Place |
Fields placeValue :: Maybe Text A place where this person has lived. For example: "Seattle, WA", "Near Toronto". placePrimary :: Maybe Bool If `True`, this place of residence is this person's primary residence.

Instances

Eq Place # |
Methods (==) :: Place -> Place -> Bool # (/=) :: Place -> Place -> Bool #
Show Place # |
Methods showsPrec :: Int -> Place -> ShowS # show :: Place -> String # showList :: [Place] -> ShowS #
FromJSON Place # |
Methods parseJSON :: Value -> Parser Place #

data Email #

Person's email

Since 1.4.3

Constructors

Email |
Fields emailValue :: Text emailType :: EmailType

Instances

Eq Email # |
Methods (==) :: Email -> Email -> Bool # (/=) :: Email -> Email -> Bool #
Show Email # |
Methods showsPrec :: Int -> Email -> ShowS # show :: Email -> String # showList :: [Email] -> ShowS #
FromJSON Email # |
Methods parseJSON :: Value -> Parser Email #

data EmailType #

Type of email

Since 1.4.3

Constructors

EmailAccount | Google account email address
EmailHome | Home email address
EmailWork | Work email adress
EmailOther | Other email address
EmailType Text | Something else

Instances

Eq EmailType # |
Methods (==) :: EmailType -> EmailType -> Bool # (/=) :: EmailType -> EmailType -> Bool #
Show EmailType # |
Methods showsPrec :: Int -> EmailType -> ShowS # show :: EmailType -> String # showList :: [EmailType] -> ShowS #
FromJSON EmailType # |
Methods parseJSON :: Value -> Parser EmailType #