Exemplo n.º 1
0
        /// <summary>
        /// Registers a user and returns his ID.
        /// <para>Returns -1 if the email is already taken.</para>
        /// </summary>
        /// <param name="email"></param>
        /// <param name="password"></param>
        /// <param name="fullName"></param>
        /// <param name="role"></param>
        /// <param name="credits"></param>
        /// <returns></returns>
        public static async Task <long> RegisterUser(string email, string password, string fullName,
                                                     int role, string address = "", int credits = 0)
        {
            Monitor.Enter(coherenceLock);

            if (await EmailTaken(email))
            {
                Monitor.Exit(coherenceLock);
                return(-1);
            }

            string salt         = GenerateSalt();
            string passwordHash = GetPasswordHash(password, salt);

            InsertQuery query = new InsertQuery("users");

            query.Value("email", email)
            .Value("password", passwordHash)
            .Value("salt", salt)
            .Value("full_name", fullName)
            .Value("role", role)
            .Value("address", address)
            .Value("credits", credits);

            NonQueryResult result = await Program.MySql().ExecuteNonQuery(query);

            if (result.RowsAffected != 1)
            {
                Console.WriteLine("Tried to register user and got rows affected: " + result.RowsAffected);
                Console.WriteLine(query.QueryString());
            }

            Monitor.Exit(coherenceLock);

            return(result.LastInsertedId);
        }