Exemplo n.º 1
0
        static void Main(string[] args)
        {
            MoodleUser        user  = MoodleDB.getMoodleDB().getUserByID(3);
            List <MoodleUser> users = MoodleDB.getMoodleDB().getUserWithSameModules(user);

            Console.ReadLine();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        protected MoodleUser getUserObject(MySqlDataReader reader)
        {
            MoodleUser user;

            user = new MoodleUser(int.Parse(reader["ID"].ToString()), reader["username"].ToString(), reader["password"].ToString(), reader["firstname"].ToString(), reader["lastname"].ToString(), reader["city"].ToString(), reader["country"].ToString());
            return(user);
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            String token = "7e708f0bf5b3911ace4e4922d220fbb0x";

            string base_url = @"http://moodle.apexnet.it";

            MoodleUser user = new MoodleUser();
            user.username = HttpUtility.UrlEncode("mrossi");
            user.password = HttpUtility.UrlEncode("fakepassword");
            user.firstname = HttpUtility.UrlEncode("Mario");
            user.lastname = HttpUtility.UrlEncode("Rossi");
            user.email = HttpUtility.UrlEncode("*****@*****.**");

            List<MoodleUser> userList = new List<MoodleUser>();
            userList.Add(user);

            Array arrUsers = userList.ToArray();

            String postData = String.Format("users[0][username]={0}&users[0][password]={1}&users[0][firstname]={2}&users[0][lastname]={3}&users[0][email]={4}",  user.username, user.password, user.firstname, user.lastname, user.email);

            string createRequest = string.Format(base_url + "/webservice/rest/server.php?wstoken={0}&wsfunction={1}&moodlewsrestformat=json", token, "core_user_create_users");

            // Call Moodle REST Service
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(createRequest);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";

            // Encode the parameters as form data:
            byte[] formData = UTF8Encoding.UTF8.GetBytes(postData);
            req.ContentLength = formData.Length;

            // Write out the form Data to the request:
            using (Stream post = req.GetRequestStream())
            {
                post.Write(formData, 0, formData.Length);
            }


            // Get the Response
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Stream resStream = resp.GetResponseStream();
            StreamReader reader = new StreamReader(resStream);
            string contents = reader.ReadToEnd();

            // Deserialize
            JsonSerializer serializer = new JsonSerializer();

            if (contents.Contains("exception"))
            {
                // Error
                MoodleException moodleError = JsonConvert.DeserializeObject<MoodleException>(contents);
            }
            else
            {
                // Success
                List<MoodleCreateUserResponse> newUsers = JsonConvert.DeserializeObject<List<MoodleCreateUserResponse>>(contents);
            }
            
        }
        public void GetUserByID()
        {
            int ID = 1;

            MoodleUser user = MoodleDB.getMoodleDB().getUserByID(ID);

            Assert.AreEqual(user.ID, ID);
            Assert.IsNotNull(user.fName);
        }
Exemplo n.º 5
0
        static void bestMatches()
        {
            MoodleUser        user  = MoodleDB.getMoodleDB().getUserByID(4);
            List <MoodleUser> users = System.getSystem().getBestMatches(user);

            foreach (MoodleUser mu in users)
            {
                Console.WriteLine(mu.toString());
            }
        }
Exemplo n.º 6
0
        static void Main(string[] args)
        {
            String token = "ce8c1b87049bf89b62eba1ae87fd9c62";

            MoodleUser user = new MoodleUser();
            user.username = HttpUtility.UrlEncode("*****@*****.**");
            user.password = HttpUtility.UrlEncode("Pass@word1");
            user.firstname = HttpUtility.UrlEncode("Daryl");
            user.lastname = HttpUtility.UrlEncode("Orwin");
            user.email = HttpUtility.UrlEncode("*****@*****.**");

            List<MoodleUser> userList = new List<MoodleUser>();
            userList.Add(user);

            Array arrUsers = userList.ToArray();

            String postData = String.Format("users[0][username]={0}&users[0][password]={1}&users[0][firstname]={2}&users[0][lastname]={3}&users[0][email]={4}", user.username, user.password, user.firstname, user.lastname, user.email);

            string createRequest = string.Format("http://MyMoodleUrl.com/webservice/rest/server.php?wstoken={0}&wsfunction={1}&moodlewsrestformat=json", token, "core_user_create_users");

            // Call Moodle REST Service
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(createRequest);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";

            // Encode the parameters as form data:
            byte[] formData =
                UTF8Encoding.UTF8.GetBytes(postData);
            req.ContentLength = formData.Length;

            // Write out the form Data to the request:
            using (Stream post = req.GetRequestStream())
            {
                post.Write(formData, 0, formData.Length);
            }

            // Get the Response
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Stream resStream = resp.GetResponseStream();
            StreamReader reader = new StreamReader(resStream);
            string contents = reader.ReadToEnd();

            // Deserialize
            JavaScriptSerializer serializer = new JavaScriptSerializer();
            if (contents.Contains("exception"))
            {
                // Error
                MoodleException moodleError = serializer.Deserialize<MoodleException>(contents);
            }
            else
            {
                // Good
                List<MoodleCreateUserResponse> newUsers = serializer.Deserialize<List<MoodleCreateUserResponse>>(contents);
            }
        }
        /// <summary>
        /// Login the user to the locationDB
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public MoodleUser Login(string username, string password)
        {
            MoodleUser user = null;
            int        id   = LocationDB.getLocationDB().login(username, password);

            if (id != -1)
            {
                user = MoodleDB.getMoodleDB().getUserByID(id);
            }
            return(user);
        }
 public string GetCreateData(MoodleUser user)
 {
     //Post data for creation
     return(string.Format(
                "users[0][username]={0}&users[0][password]={1}&users[0][firstname]={2}&users[0][lastname]={3}&users[0][email]={4}",
                user.Username,
                user.Password,
                user.FirstName,
                user.LastName,
                user.Email
                ));
 }
Exemplo n.º 9
0
        public IdentityResult RetrieveIdentity(Dictionary <string, object> context)
        {
            const string logMethodName = ".RetrieveIdentity(Dictionary<string, object> context) - ";

            _log.Debug(logMethodName + "Begin Method");

            // Based on partner name, Populate sso custom attributes from ASAMember Model retrieved by call to SAL
            String         partnerName   = (String)context["partnerName"];
            String         optionalParam = (String)context["optionalParam"];
            IdentityResult result        = new IdentityResult();

            try
            {
                string          memberPath     = UtilityMethods.ReadConfigValue("pathGetMember");
                string          memberResponse = WebServiceRequester.MakeServiceCall(memberPath);
                SiteMemberModel memberModel    = UtilityMethods.DeserializeResponse <SiteMemberModel>(memberResponse);

                bool getsAdditionalValues = true;

                //Connection with Interships.com
                if (partnerName == "SaltIDP/Internships/PSP_OAuthDevConnection_To_Internships" || partnerName == "SaltIDP/Internships/PSP_OAuthProdConnection_To_Internships")
                {
                    getsAdditionalValues = false;
                    result = AddInternshipsAttributes(result, context, optionalParam, memberModel.PrimaryEmailKey);
                }

                //Connection with community Jive Prod
                if (partnerName.Contains("SaltIDP/Jive"))
                {
                    result = AddJiveAttributes(result, memberModel, optionalParam);
                }
                //Connection with remote Learner
                else if (partnerName == "SaltIDP/RemoteLearner/PSP_Dev_ConnectionTo_MoodlePortal" || partnerName == "SaltIDP/RemoteLearner/PSP_Test_ConnectionTo_MoodlePortal" || partnerName == "SaltIDP/RemoteLearner/PSP_Stage_ConnectionTo_MoodlePortal" || partnerName == "SaltIDP/RemoteLearner/PSP_Prod_ConnectionTo_MoodlePortal")
                {
                    result = AddRemoteLearnerAttributes(result, memberModel);

                    //Setup (create/update) user in Courses
                    MoodleUser mu = new MoodleUser(memberModel);
                    mu.SetupUser();
                }

                result = AddSSOCoreAttributes(result, memberModel, partnerName, getsAdditionalValues);
            }
            catch (Exception ex)
            {
                _log.Error(logMethodName + ex);
                throw ex;
            }
            _log.Debug(logMethodName + "End Method");

            return(result);
        }
        /// <summary>
        /// Finds user with the same town as user.
        /// </summary>
        /// <param name="user">User to finds matches for</param>
        /// <returns>List of users</returns>
        public List <MoodleUser> getUsersWithSameTown(MoodleUser user)
        {
            List <MoodleUser> users = new List <MoodleUser>();
            string            query = String.Format("SELECT * FROM Students WHERE City={0} AND ID NOT {1}", user.city, user.ID);

            using (MySqlDataReader reader = this.runQuery(query))
            {
                while (reader.Read())
                {
                    users.Add(getUserObject(reader));
                }
            }
            return(users);
        }
Exemplo n.º 11
0
        /********************
         * GET From Database
         **********************/
        /// <summary>
        /// Get a User from the moodle DB
        /// </summary>
        /// <param name="ID">ID of the User</param>
        /// <returns>Moodle User</returns>
        public MoodleUser getUser(int ID)
        {
            MoodleUser user  = null;
            string     query = String.Format("SELECT * FROM mdl_User WHERE id = {0}", ID);

            using (var reader = this.runQuery(query))
            {
                while (reader.Read())
                {
                    user = this.getUserObject(reader);
                }
            }
            return(user);
        }
Exemplo n.º 12
0
        /// <summary>
        /// gets uses if they have on or more matches and add them once for each match;
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public List <MoodleUser> getUserWithSameModules(MoodleUser user)
        {
            List <MoodleUser> users = new List <MoodleUser>();

            user.courses = this.getUsersCourses(user);
            string query = String.Format("SELECT * FROM mdl_user_enrolments JOIN mdl_enrol on mdl_user_enrolments.enrolid=mdl_enrol.id WHERE mdl_enrol.courseID IN (");

            for (int i = 0; i < user.courses.Count; i++)
            {
                if (i == 0)
                {
                    query = query + user.courses[i].ID;
                }
                else
                {
                    query = query + ", " + user.courses[i].ID;
                }
            }
            query = query + ") AND mdl_user_enrolments.userID !=" + user.ID;
            List <int> userIDs = new List <int>();

            using (var reader = this.runQuery(query))
            {
                while (reader.Read())
                {
                    int ID = int.Parse(reader["userID"].ToString());
                    if (!userIDs.Contains(ID))
                    {
                        userIDs.Add(ID);
                    }
                }
            }
            foreach (int i in userIDs)
            {
                bool found = false;
                foreach (MoodleUser moUser in users)
                {
                    if (i == moUser.ID)
                    {
                        found = true;
                    }
                }
                if (!found)
                {
                    users.Add(this.getUserByID(i));
                }
            }
            return(users);
        }
Exemplo n.º 13
0
        /// <summary>
        /// Gets user by ID
        /// </summary>
        /// <param name="ID">ID of the user</param>
        /// <returns>A Moodle user Object</returns>
        public MoodleUser getUserByID(int ID)
        {
            MoodleUser user  = null;
            string     query = String.Format("SELECT * FROM mdl_user WHERE ID ={0} ", ID);

            using (var reader = this.runQuery(query))
            {
                while (reader.Read())
                {
                    user = getUserObject(reader);
                }
            }
            user.courses = MoodleDB.getMoodleDB().getUsersCourses(user);
            return(user);
        }
Exemplo n.º 14
0
        public static List <MoodleUser> GetUserList()
        {
            List <MoodleUser> userList = new List <MoodleUser>();

            var connection = DBMethods.GetConnection();
            var command    = DBMethods.GetCommand(connection, "Users");
            int i          = 0; // Row index for DataReader

            connection.Open();

            try
            {
                MySqlDataReader dataReader = command.ExecuteReader();
                while (dataReader.Read())
                {
                    MoodleUser user = new MoodleUser();

                    if (dataReader.IsDBNull(i))
                    {
                        Console.WriteLine("Null!");
                        break;
                    }
                    else
                    {
                        //necessary fields to create the user
                        user.Id        = dataReader.GetInt32(0);                         //This will not going to be added in to post data.
                        user.Username  = HttpUtility.UrlEncode(dataReader.GetString(1));
                        user.Password  = HttpUtility.UrlEncode(dataReader.GetString(2)); //Let's assume we've got student's password in db for him/her moodle account
                        user.FirstName = HttpUtility.UrlEncode(dataReader.GetString(3));
                        user.LastName  = HttpUtility.UrlEncode(dataReader.GetString(4));
                        user.Email     = HttpUtility.UrlEncode(dataReader.GetString(5));

                        userList.Add(user);
                    }
                    i++;
                }

                //Close the reader.
                dataReader.Close();
            }
            finally
            {
                //Close the conection
                connection.Close();
            }

            return(userList);
        }
Exemplo n.º 15
0
        public void BuildCoursesFromConfigTest_Should_Return_AllCourses()
        {
            //Arrange
            int        memberId   = 1940;
            var        returnList = new List <CourseModel>();
            MoodleUser mu         = new MoodleUser(memberId.ToString());

            //Act
            List <CourseModel> courses = mu.BuildCoursesFromConfig();

            //Assert
            Assert.IsNotNull(courses);
            Assert.AreEqual(12, courses.Count);
            Assert.AreEqual("Budgeting", courses[0].idnumber);
            Assert.AreEqual("Budgeting", courses[0].shortname);
            Assert.AreEqual(26, courses[0].id);
            Assert.AreEqual("101-25847", courses[0].contentid);
        }
Exemplo n.º 16
0
        public List <MoodleCourse> getUsersCourses(MoodleUser user)
        {
            List <MoodleCourse> courses = new List <MoodleCourse>();
            string     query            = String.Format("SELECT * FROM mdl_user_enrolments JOIN mdl_enrol on mdl_user_enrolments.enrolid=mdl_enrol.id WHERE mdl_user_enrolments.userID != {0}", user.ID);
            List <int> courseIDs        = new List <int>();

            using (var reader = this.runQuery(query))
            {
                while (reader.Read())
                {
                    int ID = int.Parse(reader["courseID"].ToString());
                    if (!courseIDs.Contains(ID))
                    {
                        courseIDs.Add(ID);
                    }
                }
            }
            foreach (int i in courseIDs)
            {
                courses.Add(this.getCourse(i));
            }
            return(courses);
        }
Exemplo n.º 17
0
 /// <summary>
 /// Validates the login.
 /// </summary>
 /// <returns><c>true</c>,if login was validated</returns>
 /// <param name="user">User.</param>
 public Boolean validateLogin(MoodleUser user)
 {
     /*****
      * string hashPassword = this.hashPassword (user.password);
      *          string query = String.Format ("SELECT * FROM mdl_user WHERE username={0} AND Password={1}", user.username, hashPassword);
      *      MySqlCommand cmd = new MySqlCommand (query, this.connection);
      *          MoodleUser returnedUser=null;
      *
      *          using (var reader = cmd.ExecuteReader ())
      *          {
      *                  while (reader.Read())
      *                  {
      *                          returnedUser = MoodleUser.getUserObject(reader);
      *                  }
      *          }
      *
      *          if (returnedUser != null && returnedUser.ID == user.ID)
      *          {
      *                  return true;
      *          }
      *          return false;
      ***/
     return(false);
 }
Exemplo n.º 18
0
        static void Main(string[] args)
        {
            String token = "token-goes-here";

            MoodleUser user = new MoodleUser();

            user.username  = HttpUtility.UrlEncode("*****@*****.**");
            user.password  = HttpUtility.UrlEncode("Pass@Fakew0rd");
            user.firstname = HttpUtility.UrlEncode("Daryl");
            user.lastname  = HttpUtility.UrlEncode("Orwin");
            user.email     = HttpUtility.UrlEncode("*****@*****.**");

            List <MoodleUser> userList = new List <MoodleUser>();

            userList.Add(user);

            Array arrUsers = userList.ToArray();

            String postData = String.Format("users[0][username]={0}&users[0][password]={1}&users[0][firstname]={2}&users[0][lastname]={3}&users[0][email]={4}", user.username, user.password, user.firstname, user.lastname, user.email);



            string createRequest = string.Format("http://moodleurl.com/webservice/rest/server.php?wstoken={0}&wsfunction={1}&moodlewsrestformat=json", token, "core_user_create_users");

            // Call Moodle REST Service
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(createRequest);

            req.Method      = "POST";
            req.ContentType = "application/x-www-form-urlencoded";

            // Encode the parameters as form data:
            byte[] formData =
                UTF8Encoding.UTF8.GetBytes(postData);
            req.ContentLength = formData.Length;

            // Write out the form Data to the request:
            using (Stream post = req.GetRequestStream())
            {
                post.Write(formData, 0, formData.Length);
            }


            // Get the Response
            HttpWebResponse resp      = (HttpWebResponse)req.GetResponse();
            Stream          resStream = resp.GetResponseStream();
            StreamReader    reader    = new StreamReader(resStream);
            string          contents  = reader.ReadToEnd();

            // Deserialize
            JavaScriptSerializer serializer = new JavaScriptSerializer();

            if (contents.Contains("exception"))
            {
                // Error
                MoodleException moodleError = serializer.Deserialize <MoodleException>(contents);
            }
            else
            {
                // Good
                List <MoodleCreateUserResponse> newUsers = serializer.Deserialize <List <MoodleCreateUserResponse> >(contents);
            }
        }
Exemplo n.º 19
0
        public ActionResult RegisterForMoodle(int?eh)
        {
            string moodleURL = string.Concat("http://", Properties.Settings.Default.MoodleBaseURL, "/webservice/rest/server.php");
            string function  = "core_user_create_users";

            string[] nameComponents = User.Identity.Name.Split(new Char[] { ' ' });

            try
            {
                MoodleUser mUser = new MoodleUser()
                {
                    username  = HttpUtility.UrlEncode(User.Identity.Name.Replace(@"'", "").Replace(" ", "").ToLower()),
                    password  = HttpUtility.UrlEncode("r3MuSU53r#"),
                    email     = HttpUtility.UrlEncode(UserManager.FindById(User.Identity.GetUserId()).EmailAddress),
                    firstname = nameComponents[0]
                };
                if (nameComponents.Length == 1)
                {
                    mUser.lastname = "R3man";
                }
                else if (nameComponents.Length == 2)
                {
                    mUser.lastname = nameComponents[1];
                }
                else if (nameComponents.Length == 3)
                {
                    mUser.lastname = string.Concat(nameComponents[1], " ", nameComponents[2]);
                }
                ;
                //List<MoodleUser> userList = new List<MoodleUser>();
                //userList.Add(mUser);
                //Array arrUsers = userList.ToArray();

                String postData      = String.Format("users[0][username]={0}&users[0][password]={1}&users[0][firstname]={2}&users[0][lastname]={3}&users[0][email]={4}", mUser.username, mUser.password, mUser.firstname, mUser.lastname, mUser.email);
                string createRequest = string.Format("{0}?wstoken={1}&wsfunction={2}&moodlewsrestformat=json", moodleURL, Properties.Settings.Default.MoodleToken, function);

                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(createRequest);
                req.Method      = "POST";
                req.ContentType = "application/x-www-form-urlencoded";
                byte[] formData = UTF8Encoding.UTF8.GetBytes(postData);
                req.ContentLength = formData.Length;
                using (Stream post = req.GetRequestStream())
                {
                    post.Write(formData, 0, formData.Length);
                }
                // Get the Response
                HttpWebResponse resp      = (HttpWebResponse)req.GetResponse();
                Stream          resStream = resp.GetResponseStream();
                StreamReader    reader    = new StreamReader(resStream);
                string          contents  = reader.ReadToEnd();

                // Deserialize
                JavaScriptSerializer serializer = new JavaScriptSerializer();
                if (contents.Contains("exception"))
                {
                    // Error
                    MoodleException moodleError = serializer.Deserialize <MoodleException>(contents);

                    TempData.Add("Message", "An error occurred: Please contact Clyde en Marland with this message; ");
                    TempData.Add("ErrorMessage", moodleError.debuginfo);
                }
                else
                {
                    // Good
                    TempData.Add("Message", "Registration Complete!");
                    List <MoodleCreateUserResponse> newUsers = serializer.Deserialize <List <MoodleCreateUserResponse> >(contents);
                }
            }
            catch (Exception ex)
            {
                TempData.Add("Message", "An error occurred: Please contact Clyde en Marland with this message; ");
                TempData.Add("ErrorMessage", ex.Message);
            }
            //return View("Index#MoodleTab");
            return(RedirectToAction("Index"));
        }
Exemplo n.º 20
0
        static void Main(string[] args)
        {
            String token = "7e708f0bf5b3911ace4e4922d220fbb0x";

            string base_url = @"http://moodle.apexnet.it";

            MoodleUser user = new MoodleUser();

            user.username  = HttpUtility.UrlEncode("mrossi");
            user.password  = HttpUtility.UrlEncode("fakepassword");
            user.firstname = HttpUtility.UrlEncode("Mario");
            user.lastname  = HttpUtility.UrlEncode("Rossi");
            user.email     = HttpUtility.UrlEncode("*****@*****.**");

            List <MoodleUser> userList = new List <MoodleUser>();

            userList.Add(user);

            Array arrUsers = userList.ToArray();

            String postData = String.Format("users[0][username]={0}&users[0][password]={1}&users[0][firstname]={2}&users[0][lastname]={3}&users[0][email]={4}", user.username, user.password, user.firstname, user.lastname, user.email);

            string createRequest = string.Format(base_url + "/webservice/rest/server.php?wstoken={0}&wsfunction={1}&moodlewsrestformat=json", token, "core_user_create_users");

            // Call Moodle REST Service
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(createRequest);

            req.Method      = "POST";
            req.ContentType = "application/x-www-form-urlencoded";

            // Encode the parameters as form data:
            byte[] formData = UTF8Encoding.UTF8.GetBytes(postData);
            req.ContentLength = formData.Length;

            // Write out the form Data to the request:
            using (Stream post = req.GetRequestStream())
            {
                post.Write(formData, 0, formData.Length);
            }


            // Get the Response
            HttpWebResponse resp      = (HttpWebResponse)req.GetResponse();
            Stream          resStream = resp.GetResponseStream();
            StreamReader    reader    = new StreamReader(resStream);
            string          contents  = reader.ReadToEnd();

            // Deserialize
            JsonSerializer serializer = new JsonSerializer();

            if (contents.Contains("exception"))
            {
                // Error
                MoodleException moodleError = JsonConvert.DeserializeObject <MoodleException>(contents);
            }
            else
            {
                // Success
                List <MoodleCreateUserResponse> newUsers = JsonConvert.DeserializeObject <List <MoodleCreateUserResponse> >(contents);
            }
        }
Exemplo n.º 21
0
        public ActionResult SSOService()
        {
            // Either an authn request has been received or login has just completed in response to a previous authn request.

            _log.Debug("SSO Service Begin");
            string partnerSP   = null;
            string myCurrentSP = SAMLIdentityProvider.GetPartnerPendingResponse();
            Dictionary <string, object> paramDictionary = new Dictionary <string, object> {
                { "optionalParam", Request.Params["optionalParam"] }
            };

            if (Request.Form.AllKeys.Contains("SAMLRequest") || (Request.QueryString.AllKeys.Contains("SAMLRequest") && (Request.QueryString.AllKeys.Contains("RelayState") || Request.QueryString.AllKeys.Contains("Signature"))))
            {
                // Receive the authn request from the service provider (SP-initiated SSO).
                _log.Debug("Calling ReceiveSSO");
                SAMLIdentityProvider.ReceiveSSO(Request, out partnerSP);
                myCurrentSP = SAMLIdentityProvider.GetPartnerPendingResponse();
                _log.Debug("Received SSO from " + partnerSP);
            }

            // If the user isn't logged in at the identity provider, force the user to login.
            if (!User.Identity.IsAuthenticated)
            {
                _log.Debug("Redirecting to login");
                FormsAuthentication.RedirectToLoginPage();
                return(new EmptyResult());
            }


            // The user is logged in at the identity provider.
            // Respond to the authn request by sending a SAML response containing a SAML assertion to the SP.
            // Use the configured or logged in user name as the user name to send to the service provider (SP).
            // Include some user attributes.
            string userName = WebConfigurationManager.AppSettings[AppSettings.SubjectName];
            IDictionary <string, string> attributes = new Dictionary <string, string>();

            if (string.IsNullOrEmpty(userName))
            {
                try
                {
                    string memberPath = UtilityMethods.ReadConfigValue("pathGetMember");
                    _log.Debug("Calling " + memberPath);
                    string          memberResponse = WebServiceRequester.MakeServiceCall(memberPath);
                    SiteMemberModel memberModel    = UtilityMethods.DeserializeResponse <SiteMemberModel>(memberResponse);
                    userName = memberModel.MembershipId.ToString();
                    bool getsAdditionalValues = true;

                    //determine which SP, and populate the respective member attributes
                    myCurrentSP = SAMLIdentityProvider.GetPartnerPendingResponse();
                    //Connection with remote Learner
                    if (myCurrentSP.Contains("oldmoney.remote-learner.net") || myCurrentSP.Contains("saltcourses.saltmoney.org"))
                    {
                        attributes = AddRemoteLearnerAttributes(attributes, memberModel);

                        //Setup (create/update) user in Courses
                        MoodleUser mu = new MoodleUser(memberModel);
                        mu.SetupUser();
                    }

                    if (myCurrentSP.Contains("sso.online.tableau.com"))
                    {
                        attributes = AddTableauAttributes(attributes, memberModel);
                    }

                    if (myCurrentSP.Contains("community.saltmoney.org"))
                    {
                        String optionalParam = (String)paramDictionary["optionalParam"];
                        attributes = AddJiveAttributes(attributes, memberModel, optionalParam);
                    }

                    _log.Debug("Calling AddSSOCoreAttributes");
                    attributes = AddSSOCoreAttributes(attributes, memberModel, myCurrentSP, getsAdditionalValues);
                    _log.Debug("Returned from  AddSSOCoreAttributes with " + attributes.Count() + " Attributes");
                }
                catch (Exception ex)
                {
                    _log.Error(ex);
                    throw ex;
                }
            }
            try {
                _log.Debug("Calling SendSSO for " + userName);
                SAMLIdentityProvider.SendSSO(Response, userName, attributes);
            }
            catch (Exception ex)
            {
                _log.Error(ex);
                throw ex;
            }
            return(new EmptyResult());
        }
        /// <summary>
        /// Gets a user year and there matches avg
        /// </summary>
        /// <param name="ID"></param>
        /// <returns></returns>
        public Dictionary <MoodleCourse, List <LocationAvg> > getAvgsYear(int ID)
        {
            MoodleUser          user    = MoodleDB.getMoodleDB().getUserByID(ID);
            List <MoodleCourse> courses = MoodleDB.getMoodleDB().getUsersCourses(user);
            List <MoodleUser>   matches = System.getSystem().getBestMatches(user);
            Dictionary <MoodleCourse, List <LocationAvg> > averages = new Dictionary <MoodleCourse, List <LocationAvg> >();
            List <LocationAvg> avgs = LocationDB.getLocationDB().getAveragesYear(matches);

            ///Overall
            //User
            LocationAvg  userAvg = LocationDB.getLocationDB().getUsersAvgYear(ID);
            MoodleCourse global  = new MoodleCourse(-1, "Global", "Global", "");
            //Match Avg
            int totalOn = 0, totalOff = 0;

            foreach (MoodleUser avg in matches)
            {
                LocationAvg matchAvg = LocationDB.getLocationDB().getUsersAvgYear(ID);
                if (matchAvg != null)
                {
                    totalOn  = totalOn + matchAvg.on;
                    totalOff = totalOff + matchAvg.off;
                }
            }
            int avgMatchOn = 0, avgMatchOff = 0;

            //On
            if (matches.Count > 0 && totalOn > 0)
            {
                avgMatchOn = totalOn / matches.Count;
            }
            if (matches.Count > 0 && totalOff > 0)
            {
                avgMatchOff = totalOff / matches.Count;
            }
            LocationAvg        overallAvg = new LocationAvg(-1, DateTime.Now, avgMatchOn, avgMatchOff);
            List <LocationAvg> locationAvgs = new List <LocationAvg>();

            locationAvgs.Add(userAvg);
            locationAvgs.Add(overallAvg);
            averages.Add(global, locationAvgs);

            //Per Course
            //User
            foreach (MoodleCourse course in courses)
            {
                int cTotalOn = 0, cTotalOff = 0;
                //User
                LocationAvg avg = LocationDB.getLocationDB().getUsersAvgYear(course.ID, user.ID);

                int count = 0;
                foreach (MoodleUser mUser in matches)
                {
                    foreach (MoodleCourse c in user.courses)
                    {
                        if (course.ID == c.ID)
                        {
                            LocationAvg tempLA = LocationDB.getLocationDB().getUsersAvgYear(course.ID, mUser.ID);
                            if (tempLA != null)
                            {
                                cTotalOn  = cTotalOn + tempLA.on;
                                cTotalOff = cTotalOff + tempLA.off;
                                count++;
                            }
                        }
                    }
                }

                int cAvgMatchOn = 0, cAvgMatchOff = 0;
                if (matches.Count > 0 && cTotalOn > 0)
                {
                    cAvgMatchOn  = cTotalOn / matches.Count;
                    cAvgMatchOff = cTotalOff / matches.Count;
                }
                List <LocationAvg> cAvgs  = new List <LocationAvg>();
                LocationAvg        locAvg = new LocationAvg(-1, DateTime.Now, cAvgMatchOn, cAvgMatchOff);
                cAvgs.Add(avg);
                cAvgs.Add(locAvg);
                averages.Add(course, cAvgs);
            }
            return(averages);
        }
        /// <summary>
        /// Returns a list of users that are a best
        /// match for user will try to return a min of 5 users
        /// </summary>
        /// <param name="user">The user to find matches for</param>
        /// <returns>List of moodle user</returns>
        public List <MoodleUser> getBestMatches(MoodleUser user)
        {
            List <MoodleUser> users   = new List <MoodleUser>();
            List <MoodleUser> matches = new List <MoodleUser>(); // List to be returned.

            users = MoodleDB.getMoodleDB().getUserWithSameModules(user);

            //Perfect Match. //Main Loop
            foreach (MoodleUser moUser in users)
            {
                moUser.courses = MoodleDB.getMoodleDB().getUsersCourses(moUser);
                int courseMatch = 0;
                if (moUser.city.ToLower() == user.city.ToLower())
                {
                    foreach (MoodleCourse course in moUser.courses)
                    {
                        foreach (MoodleCourse userCourse in user.courses)
                        {
                            if (course.ID == userCourse.ID)
                            {
                                courseMatch++;
                            }
                        }
                    }
                }
                if (user.courses.Count == courseMatch)
                {
                    if (!matches.Contains(moUser))
                    {
                        matches.Add(moUser);
                    }
                }
            }
            foreach (MoodleUser mu in matches) // FY all matches from main list.
            {
                users.Remove(mu);
            }
            ///2 > Modules match
            int matchLevel = user.courses.Count;

            while (matches.Count < 5)
            {
                foreach (MoodleUser moUser in users)
                {
                    int courseMatch = 0;
                    foreach (MoodleCourse course in moUser.courses)
                    {
                        foreach (MoodleCourse c in user.courses)
                        {
                            if (c.ID == course.ID)
                            {
                                courseMatch++;
                            }
                        }
                    }
                    if (courseMatch == matchLevel)
                    {
                        matches.Add(moUser);
                    }
                }
                foreach (MoodleUser moUser in matches)
                {
                    users.Remove(moUser);
                }
                matchLevel--;
                if (users.Count == 0 || matchLevel == 0)
                {
                    break;
                }
            }
            return(matches);
        }