Beispiel #1
0
        ChangeNickname(int uid, string name)
        {
            bool success = false;

            Datamodel.User user = null;
            if (Datamodel.User.FetchById(ref user, uid))
            {
                user.name = name;
                if (Datamodel.User.Store(user))
                {
                    logger.Info($"Changed name of user {uid} to {name}");
                    success = true;
                }
                else
                {
                    logger.Error("Failed to update name of user " +
                                 $"{uid} to {name}.");
                }
            }
            else
            {
                logger.Error($"Could not change name: no user with id {uid}.");
            }

            if (uid == GetUser().profile.id)
            {
                GetUser().RefreshProfile();
            }

            return(new ANWI.Messaging.ConfirmUpdate(
                       typeof(ANWI.Messaging.Request), success, uid));
        }
Beispiel #2
0
        SetPrimaryRate(int uid, int rid)
        {
            bool success = false;

            Datamodel.User u = null;
            if (Datamodel.User.FetchById(ref u, uid))
            {
                u.rate = rid;
                if (Datamodel.User.Store(u))
                {
                    logger.Info($"Updated primary rate on user {uid} to {rid}");
                    success = true;
                }
                else
                {
                    logger.Error("Failed to update primary rate on user" +
                                 $" {uid} to {rid}");
                }
            }
            else
            {
                logger.Error("Could not set primary rate: no user with" +
                             $" id {uid} found");
            }

            if (uid == GetUser().profile.id)
            {
                GetUser().RefreshProfile();
            }

            return(new ANWI.Messaging.ConfirmUpdate(
                       typeof(ANWI.Messaging.Request), success, uid));
        }
Beispiel #3
0
        /// <summary>
        /// Changes the rank of a user
        /// </summary>
        /// <param name="p"></param>
        /// <returns></returns>
        private ANWI.Messaging.IMessagePayload ChangeRank(int uid, int rid)
        {
            bool success = false;

            Datamodel.User u = null;
            if (Datamodel.User.FetchById(ref u, uid))
            {
                u.rank = rid;
                if (Datamodel.User.Store(u))
                {
                    logger.Info($"Updated rank of user {uid} to {rid}");
                    success = true;
                }
                else
                {
                    logger.Error($"Failed to update rank of user {uid}");
                }
            }
            else
            {
                logger.Error("Could not set rank: no user with id {uid} found");
            }

            if (uid == GetUser().profile.id)
            {
                GetUser().RefreshProfile();
            }

            return(new ANWI.Messaging.ConfirmUpdate(
                       typeof(ANWI.Messaging.Request), success, uid));
        }
Beispiel #4
0
 private LiteProfile(Datamodel.User u)
 {
     id             = u.id;
     auth0          = u.auth0;
     nickname       = u.name;
     _rankId        = u.rank;
     _primaryRateId = u.rate;
 }
Beispiel #5
0
        private Profile(Datamodel.User user)
        {
            id             = user.id;
            auth0          = user.auth0;
            nickname       = user.name;
            _rankId        = user.rank;
            _primaryRateId = user.rate;

            createdDate
                = DateTimeOffset.FromUnixTimeSeconds(user.created).DateTime;
        }
Beispiel #6
0
 /// <summary>
 /// Gets a user by their Auth0 identifier
 /// </summary>
 /// <param name="auth0"></param>
 /// <returns></returns>
 public static Profile FetchByAuth0(string auth0)
 {
     Datamodel.User u = null;
     if (Datamodel.User.FetchByAuth0(ref u, auth0))
     {
         return(new Profile(u));
     }
     else
     {
         return(null);
     }
 }
Beispiel #7
0
 /// <summary>
 /// Gets a user by ID
 /// </summary>
 /// <param name="id"></param>
 /// <returns></returns>
 public static Profile FetchById(int id)
 {
     Datamodel.User u = null;
     if (Datamodel.User.FetchById(ref u, id))
     {
         return(new Profile(u));
     }
     else
     {
         return(null);
     }
 }
Beispiel #8
0
        private LiteVessel(Datamodel.UserShip s)
        {
            id         = s.id;
            name       = s.name;
            isLTI      = Convert.ToBoolean(s.insurance);
            hullNumber = s.number;
            status     = (VesselStatus)s.status;

            Datamodel.User u = null;
            if (!Datamodel.User.FetchById(ref u, s.user))
            {
                throw new ArgumentException("Ship does not have valid owner ID");
            }
            owner = u.name;

            _hullId = s.hull;
        }
Beispiel #9
0
        private Vessel(Datamodel.UserShip s)
        {
            id         = s.id;
            name       = s.name;
            isLTI      = Convert.ToBoolean(s.insurance);
            hullNumber = s.number;
            status     = (VesselStatus)s.status;
            statusDate =
                DateTimeOffset.FromUnixTimeSeconds(s.statusDate).DateTime;
            final   = s.final;
            _hullId = s.hull;

            Datamodel.User u = null;
            if (!Datamodel.User.FetchById(ref u, s.user))
            {
                throw new ArgumentException(
                          "Ship does not have valid owner ID");
            }
            ownerId   = u.id;
            ownerName = u.name;
        }
Beispiel #10
0
        private bool CreateDatabaseUser(string nickname, string auth0_id)
        {
            // Create a basic profile
            Datamodel.User dbUser = null;
            bool           res    = Datamodel.User.Create(ref dbUser,
                                                          nickname,
                                                          auth0_id,
                                                          1);

            if (res)
            {
                logger.Info(
                    $"Created user {nickname} ({auth0_id}) in database");
            }
            else
            {
                logger.Error(
                    $"Failed to create user {nickname} ({auth0_id}) in database"
                    );
            }

            return(res);
        }
Beispiel #11
0
        private async void LoginUser(ANWI.Messaging.LoginRequest cred)
        {
            // Authenticate the user with Auth0
            try {
                // Check version
                if (minimumVersion.CompareTo(cred.clientVer) > 0)
                {
                    logger.Info(
                        $"User {cred.username} has invalid version. " +
                        $"Client: {cred.clientVer} Minimum: {minimumVersion}");
                    DenyLogin(ANWI.Messaging.LoginResponse.Code.FAILED_VERSION);
                    return;
                }

                ResourceOwnerTokenRequest req
                    = new ResourceOwnerTokenRequest()
                    {
                    ClientId     = Configuration.auth0Settings.client,
                    ClientSecret = Configuration.auth0Settings.secret,
                    Realm        = Configuration.auth0Settings.connection,
                    Username     = cred.username,
                    Password     = cred.password
                    };


                AccessTokenResponse token = null;
                try {
                    token = await auth0Client.GetTokenAsync(req);
                } catch (Auth0.Core.Exceptions.ApiException e) {
                    logger.Error(
                        $"Failed to log in user {cred.username}: {e.Message}");
                    DenyLogin(
                        ANWI.Messaging.LoginResponse.Code.FAILED_CREDENTIALS);
                    return;
                }

                UserInfo user
                    = await auth0Client.GetUserInfoAsync(token.AccessToken);

                logger.Info("Successfully authenticated user.  Token: " +
                            token.AccessToken);

                ANWI.AuthenticatedAccount account = new AuthenticatedAccount();
                account.authToken = token.AccessToken;
                account.auth0_id  = user.UserId;
                account.nickname  = user.NickName;

                // Get the main user profile
                Datamodel.User dbUser = null;
                if (!Datamodel.User.FetchByAuth0(ref dbUser, account.auth0_id))
                {
                    logger.Info("Profile not found for user " +
                                account.auth0_id + ". It will be created.");

                    // Create a basic profile
                    if (!CreateDatabaseUser(user.NickName, user.UserId))
                    {
                        DenyLogin(ANWI.Messaging.LoginResponse.
                                  Code.FAILED_SERVER_ERROR);
                        return;
                    }
                }

                account.profile = Profile.FetchByAuth0(account.auth0_id);

                ANWI.Messaging.Message resp = new ANWI.Messaging.Message(
                    0,
                    new ANWI.Messaging.LoginResponse(
                        ANWI.Messaging.LoginResponse.Code.OK,
                        account)
                    );

                SendMessage(resp);
            } catch (System.Net.Http.HttpRequestException e) {
                logger.Info("HTTP error when connecting to Auth0:\n"
                            + e);
                DenyLogin(
                    ANWI.Messaging.LoginResponse.Code.FAILED_SERVER_ERROR);
                return;
            }
        }