Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions src/Firebase.Auth/Firebase.Auth.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<PackageId>Firebase.Auth.Rest</PackageId>
<PackageVersion>1.1.0-beta</PackageVersion>
<Authors>Chris Paynter</Authors>
<PackageVersion>1.1.1-beta</PackageVersion>
<Authors>Chris Paynter, Florian Kriegl</Authors>
<Description>A .NET API client for Firebase Rest Authentication API that follows Google's API spec as precisely as possible.</Description>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageReleaseNotes>First release</PackageReleaseNotes>
<Copyright></Copyright>
<PackageTags>firebase auth</PackageTags>
<Version>1.1.0-beta</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Expand Down
26 changes: 25 additions & 1 deletion src/Firebase.Auth/FirebaseAuthService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace Firebase.Auth
/// <summary>
/// Service for connecting and communicating with the Firebase Auth REST API
/// </summary>
public class FirebaseAuthService: IFirebaseAuthService, IDisposable
public class FirebaseAuthService : IFirebaseAuthService, IDisposable
{
private FirebaseAuthOptions options;
private readonly HttpClient client;
Expand Down Expand Up @@ -63,6 +63,30 @@ public async Task<VerifyRefreshTokenResponse> VerifyRefreshToken(VerifyRefreshTo
return await Post<VerifyRefreshTokenResponse>(SecureTokenUrl(), request);
}

/// <summary>
/// Sends a password change request to the provided user (id token)
/// </summary>
public async Task<SendVerificationEmailResponse> SendVerification(SendVerificationEmailRequest request)
{
return await Post<SendVerificationEmailResponse>(RelyingPartyUrl("getOobConfirmationCode"), request);
}

/// <summary>
/// Sends a password change request to the provided user (id token)
/// </summary>
public async Task<ChangePasswordResponse> PasswordChange(ChangePasswordRequest request)
{
return await Post<ChangePasswordResponse>(RelyingPartyUrl("setAccountInfo"), request);
}

/// <summary>
/// Gets the data of a specific account
/// </summary>
public async Task<GetUserDataResponse> GetUserData(GetUserDataRequest request)
{
return await Post<GetUserDataResponse>(RelyingPartyUrl("getAccountInfo"), request);
}

private async Task<TResponse> Post<TResponse>(string endpoint, object request) where TResponse : class
{
string responseJson = "";
Expand Down
15 changes: 15 additions & 0 deletions src/Firebase.Auth/IFirebaseAuthService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,20 @@ public interface IFirebaseAuthService
/// Verifies the user via refresh token.
/// </summary>
Task<VerifyRefreshTokenResponse> VerifyRefreshToken(VerifyRefreshTokenRequest request);

/// <summary>
/// Sends a verification email to the provided email address
/// </summary>
Task<SendVerificationEmailResponse> SendVerification(SendVerificationEmailRequest request);

/// <summary>
/// Sends a password change request to the provided user (id token)
/// </summary>
Task<ChangePasswordResponse> PasswordChange(ChangePasswordRequest request);

/// <summary>
/// Gets the data of a specific account
/// </summary>
Task<GetUserDataResponse> GetUserData(GetUserDataRequest request);
}
}
24 changes: 24 additions & 0 deletions src/Firebase.Auth/Payloads/ChangePasswordRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using System;
namespace Firebase.Auth.Payloads
{
/// <summary>
/// You can change a user's password by issuing an HTTP POST request to the Auth setAccountInfo endpoint.
/// </summary>
public class ChangePasswordRequest : BaseRequest
{
/// <summary>
/// A Firebase Auth ID token for the user.
/// </summary>
public string IdToken { get; set; }

/// <summary>
/// User's new password.
/// </summary>
public string Password { get; set; }

/// <summary>
/// Whether or not to return an ID and refresh token.
/// </summary>
public string ReturnSecureToken { get; set; }
}
}
63 changes: 63 additions & 0 deletions src/Firebase.Auth/Payloads/ChangePasswordResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;

namespace Firebase.Auth.Payloads
{
/// <summary>
/// You can change a user's password by issuing an HTTP POST request to the Auth setAccountInfo endpoint.
/// </summary>
public class ChangePasswordResponse : BaseRequest
{
/// <summary>
/// The request type, always "identitytoolkit#SetAccountInfoResponse".
/// </summary>
public string kind { get; set; }

/// <summary>
/// The uid of the current user.
/// </summary>
public string localId { get; set; }

/// <summary>
/// User's email address.
/// </summary>
public string email { get; set; }

/// <summary>
/// Hash version of password.
/// </summary>
public string passwordHash { get; set; }

/// <summary>
/// List of all linked provider objects which contain "providerId" and "federatedId".
/// </summary>
public IList<ProviderUserInfo> providerUserInfo { get; set; }

/// <summary>
/// New Firebase Auth ID token for user.
/// </summary>
public string idToken { get; set; }

/// <summary>
/// A Firebase Auth refresh token.
/// </summary>
public string refreshToken { get; set; }

/// <summary>
/// The number of seconds in which the ID token expires.
/// </summary>
public string expiresIn { get; set; }
}

public class ProviderUserInfo
{
/// <summary>
///
/// </summary>
public string providerId { get; set; }
/// <summary>
///
/// </summary>
public string federatedId { get; set; }
}
}
14 changes: 14 additions & 0 deletions src/Firebase.Auth/Payloads/GetUserDataRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using System;
namespace Firebase.Auth.Payloads
{
/// <summary>
/// You can get a user's data by issuing an HTTP POST request to the Auth getAccountInfo endpoint.
/// </summary>
public class GetUserDataRequest : BaseRequest
{
/// <summary>
/// The Firebase ID token of the account.
/// </summary>
public string IdToken { get; set; }
}
}
97 changes: 97 additions & 0 deletions src/Firebase.Auth/Payloads/GetUserDataResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
using System;
using System.Collections.Generic;

namespace Firebase.Auth.Payloads
{
public class GetUserDataResponse : BaseResponse
{
/// <summary>
/// The request type, always "identitytoolkit#GetAccountInfoResponse".
/// </summary>
public string kind { get; set; }

/// <summary>
/// The account associated with the given Firebase ID token. Check below for more details.
/// </summary>
public IList<User> users { get; set; }
}

public class ProviderUserData
{
public string providerId { get; set; }
public string displayName { get; set; }
public string photoUrl { get; set; }
public string federatedId { get; set; }
public string email { get; set; }
public string rawId { get; set; }
public string screenName { get; set; }
}

public class User
{
/// <summary>
/// The uid of the current user.
/// </summary>
public string localId { get; set; }

/// <summary>
/// The email of the account.
/// </summary>
public string email { get; set; }

/// <summary>
/// Whether or not the account's email has been verified.
/// </summary>
public bool emailVerified { get; set; }

/// <summary>
/// The display name for the account.
/// </summary>
public string displayName { get; set; }

/// <summary>
/// List of all linked provider objects which contain "providerId" and "federatedId".
/// </summary>
public IList<ProviderUserData> providerUserInfo { get; set; }

/// <summary>
/// The photo Url for the account.
/// </summary>
public string photoUrl { get; set; }

/// <summary>
/// Hash version of password.
/// </summary>
public string passwordHash { get; set; }

/// <summary>
/// The timestamp, in milliseconds, that the account password was last changed.
/// </summary>
public double passwordUpdatedAt { get; set; }

/// <summary>
/// The timestamp, in seconds, which marks a boundary, before which Firebase ID token are considered revoked.
/// </summary>
public string validSince { get; set; }

/// <summary>
/// Whether the account is disabled or not.
/// </summary>
public bool disabled { get; set; }

/// <summary>
/// The timestamp, in milliseconds, that the account last logged in at.
/// </summary>
public string lastLoginAt { get; set; }

/// <summary>
/// The timestamp, in milliseconds, that the account was created at.
/// </summary>
public string createdAt { get; set; }

/// <summary>
/// Whether the account is authenticated by the developer.
/// </summary>
public bool customAuth { get; set; }
}
}
16 changes: 16 additions & 0 deletions src/Firebase.Auth/Payloads/SendVerificationEmailRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using System;
namespace Firebase.Auth.Payloads
{
public class SendVerificationEmailRequest : BaseRequest
{
/// <summary>
/// The type of confirmation code to send. Should always be "VERIFY_EMAIL".
/// </summary>
public string RequestType { get; set; }

/// <summary>
/// The Firebase ID token of the user to verify.
/// </summary>
public string IdToken { get; set; }
}
}
15 changes: 15 additions & 0 deletions src/Firebase.Auth/Payloads/SendVerificationEmailResponse.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace Firebase.Auth.Payloads
{
public class SendVerificationEmailResponse : BaseResponse
{
/// <summary>
/// The request type, always "identitytoolkit#GetOobConfirmationCodeResponse".
/// </summary>
public string Kind { get; set; }

/// <summary>
/// The email of the account.
/// </summary>
public string Email { get; set; }
}
}