Beispiel #1
0
        /// <summary>
        /// Logs the user in to the Realm Object Server.
        /// </summary>
        /// <param name="credentials">The credentials to use for authentication.</param>
        /// <param name="serverUri">The URI of the server that the user is authenticated against.</param>
        /// <returns>An awaitable Task, that, upon completion, contains the logged in user.</returns>
        public static async Task <User> LoginAsync(Credentials credentials, Uri serverUri)
        {
            Argument.NotNull(credentials, nameof(credentials));
            Argument.NotNull(serverUri, nameof(serverUri));
            Argument.Ensure(serverUri.Scheme.StartsWith("http"), "Unexpected protocol for login url. Expected http:// or https://.", nameof(serverUri));

            SharedRealmHandleExtensions.DoInitialMetadataConfiguration();

            if (credentials.IdentityProvider == Credentials.Provider.AdminToken)
            {
                return(new User(SyncUserHandle.GetAdminTokenUser(serverUri.AbsoluteUri, credentials.Token)));
            }

            if (credentials.IdentityProvider == Credentials.Provider.CustomRefreshToken)
            {
                var userId  = (string)credentials.UserInfo[Credentials.Keys.Identity];
                var isAdmin = (bool)credentials.UserInfo[Credentials.Keys.IsAdmin];
                return(new User(SyncUserHandle.GetSyncUser(userId, serverUri.AbsoluteUri, credentials.Token, isAdmin)));
            }

            var result = await AuthenticationHelper.LoginAsync(credentials, serverUri);

            var handle = SyncUserHandle.GetSyncUser(result.UserId, serverUri.AbsoluteUri, result.RefreshToken, result.IsAdmin);

            return(new User(handle));
        }
Beispiel #2
0
        public static User GetLoggedInUser(string identity, Uri serverUri)
        {
            Argument.NotNull(identity, nameof(identity));
            Argument.NotNull(serverUri, nameof(serverUri));

            SharedRealmHandleExtensions.DoInitialMetadataConfiguration();

            if (SyncUserHandle.TryGetLoggedInUser(identity, serverUri.AbsoluteUri, out var userHandle))
            {
                return(new User(userHandle));
            }

            return(null);
        }