public void ConvertUserToXML()
        {
            RabbitMQUser rabbitMQUser = new RabbitMQUser();

            rabbitMQUser.Header.Method = XMLMethod.CREATE;
            rabbitMQUser.Header.Source = XMLSource.PLANNING;
            rabbitMQUser.UUID          = new Guid("bf2d8864-c07d-11eb-8529-0242ac130003");
            rabbitMQUser.EntityVersion = 1;
            rabbitMQUser.LastName      = "Doe";
            rabbitMQUser.FirstName     = "John";
            rabbitMQUser.EmailAddress  = "*****@*****.**";
            rabbitMQUser.Role          = "student";
            string xml = xmlController.ConvertObjectToXML(rabbitMQUser);

            Assert.IsTrue(xmlController.XSDValidatie(xml, "User"));
        }
Example #2
0
        /// <summary>
        /// Method posting an incoming delete of a user into the MS Graph API.
        /// </summary>
        /// <param name="rabbitMQUser">Deleted user sent by the RabbitMQ message broker</param>
        public void UserDelete(RabbitMQUser rabbitMQUser)
        {
            //Console.WriteLine("Delete van User nog niet klaar!");
            Master      masterUserId = masterDBService.GetGraphIdFromMUUID(rabbitMQUser.UUID);
            RestClient  restClient   = new RestClient();
            RestRequest restRequest  = new RestRequest();

            BearerToken = services.RefreshAccesToken();

            restRequest.AddHeader("Authorization", BearerToken.Token_type + " " + BearerToken.Access_token);
            Console.WriteLine(rabbitMQUser.UUID);
            restClient.BaseUrl = new Uri($"https://graph.microsoft.com/v1.0/users/{masterUserId.SourceEntityId}");
            var response = restClient.Delete(restRequest);

            Console.WriteLine(response.StatusCode);
        }
Example #3
0
        /// <summary>
        /// Method posting an incoming change of a user into the MS Graph API.
        /// </summary>
        /// <param name="rabbitMQUser">Updated user sent by the RabbitMQ message broker</param>
        public void UserUpdate(RabbitMQUser rabbitMQUser)
        {
            //Console.WriteLine("Update van User nog niet klaar!");
            Master masterUserId = masterDBService.GetGraphIdFromMUUID(rabbitMQUser.UUID);

            if (masterUserId != null && masterDBService.CheckSourceEntityVersionIsHigher(rabbitMQUser.UUID, rabbitMQUser.Header.Source))
            {
                RestClient  restClient  = new RestClient();
                RestRequest restRequest = new RestRequest();

                User user = new User();
                //required
                user.AccountEnabled    = true;
                user.DisplayName       = rabbitMQUser.FirstName + " " + rabbitMQUser.LastName;
                user.MailNickname      = rabbitMQUser.FirstName.Replace(' ', '.') + "." + rabbitMQUser.LastName;
                user.UserPrincipalName = user.MailNickname + "@ipwt3.onmicrosoft.com";
                user.Mail          = user.UserPrincipalName;
                user.UsageLocation = "BE";
                //user.PasswordProfile = new UserPasswordProfile();
                //user.PasswordProfile.ForceChangePasswordNextSignIn = false;
                //user.PasswordProfile.Password = Constant.StandardPassword;

                user.GivenName = rabbitMQUser.FirstName;
                user.SurName   = rabbitMQUser.LastName;
                user.JobTitle  = rabbitMQUser.Role;

                BearerToken = services.RefreshAccesToken();

                var json = JsonConvert.SerializeObject(user);
                restRequest.AddHeader("Authorization", BearerToken.Token_type + " " + BearerToken.Access_token);
                restRequest.AddJsonBody(json);
                Console.WriteLine(json);

                restClient.BaseUrl = new Uri($"https://graph.microsoft.com/v1.0/users/{masterUserId.SourceEntityId}");
                Console.WriteLine(restClient.BaseUrl);
                var response = restClient.Patch(restRequest);

                Console.WriteLine(response.StatusCode);

                if (response.StatusCode == System.Net.HttpStatusCode.NoContent)
                {
                    masterDBService.ChangeEntityVersion(rabbitMQUser.UUID);
                }
            }
        }
        /* --- USER RELATED SERVICES --- */

        /// <summary>
        /// Method to convert MS Graph User data so the message broker RabbitMQ can handle them.
        /// </summary>
        /// <param name="user">a user with attributes of MS Graph API</param>
        /// <returns>user in xml format, ready to send to the RabbitMQ message queue</returns>
        public string ConvertUserToRabbitMQUser(User user)
        {
            /* ---  --- */
            RabbitMQUser rabbitMQUser = new RabbitMQUser();

            //rabbitMQUser.Header = new RabbitMQHeader();

            //rabbitMQUser.Header.Method = XMLMethod.DELETE;
            rabbitMQUser.Header.Method = XMLMethod.CREATE;
            rabbitMQUser.Header.Source = XMLSource.PLANNING;
            //rabbitMQUser.UUID = new Guid("42c5fb9e-a9db-47f9-af38-297cb7b88654");
            rabbitMQUser.UUID          = new Guid(user.Id);
            rabbitMQUser.EntityVersion = 1;
            rabbitMQUser.LastName      = user.SurName;
            rabbitMQUser.FirstName     = user.GivenName;
            rabbitMQUser.EmailAddress  = user.UserPrincipalName;
            rabbitMQUser.Role          = "Student";
            return(xmlController.ConvertObjectToXML(rabbitMQUser));
        }
        //bearer token wordt niet refreshed, kan dus geen verbinding meer maken met api na 1 uur
        //private static Token BearerToken = OfficeService.RefreshAccesToken();
        static void Main(string[] args)
        {
            Uri    rabbitMQUri = new Uri(Constant.RabbitMQConnectionUrl);
            string queueName   = Constant.RabbitMQUserQueueName;

            var factory = new ConnectionFactory
            {
                Uri = rabbitMQUri
            };

            using var connection = factory.CreateConnection();
            using var channel    = connection.CreateModel();
            channel.QueueDeclare(
                queueName,
                durable: true,
                exclusive: false,
                autoDelete: false,
                arguments: null);

            var consumer = new EventingBasicConsumer(channel);

            consumer.Received += (sender, e) =>
            {
                var message = e.Body.ToArray();
                var xml     = Encoding.UTF8.GetString(message);
                Console.WriteLine(xml);
                //events = JsonConvert.DeserializeObject<List<CalendarEvent>>(xml);
                //foreach (var ev in events)
                //{
                //    Console.WriteLine(ev.Email);
                //    Console.WriteLine(ev.Subject);
                //    Console.WriteLine(ev.Start.DateTime);
                //    Console.WriteLine(ev.Start.Zone);
                //    Console.WriteLine(ev.End.DateTime);
                //    Console.WriteLine(ev.End.Zone);
                //}
                //int hulp = xml.IndexOf("<", 1, xml.Length-1);
                //Console.WriteLine(hulp);
                XmlSerializer serializer = new XmlSerializer(typeof(RabbitMQUser));
                //xml = xml.Substring(hulp);
                //if (xml.)
                //if (xml.IndexOf("?", 0, 1) == 0)
                //    xml = xml.Substring(1);
                //Console.WriteLine(xml);
                //string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
                //if (xml.StartsWith(_byteOrderMarkUtf8))
                //    xml = xml.Remove(0, _byteOrderMarkUtf8.Length);
                using (TextReader reader = new StringReader(xml))
                {
                    RabbitMQUser result = (RabbitMQUser)serializer.Deserialize(reader);
                    //result.uuid = "e768646c-eaf9-4f82-99ce-0a49736deef7";
                    Console.WriteLine(result.Header.Method);
                    Console.WriteLine(result.Header.Source);
                    Console.WriteLine(result.UUID);
                    Console.WriteLine(result.EntityVersion);
                    Console.WriteLine(result.LastName);
                    Console.WriteLine(result.FirstName);
                    Console.WriteLine(result.EmailAddress);
                    Console.WriteLine(result.Role);
                    //Console.WriteLine(result.location);
                    if (result.Header.Source != XMLSource.PLANNING)
                    {
                        switch (result.Header.Method)
                        {
                        case XMLMethod.CREATE:
                            userService.UserCreate(result);
                            break;

                        case XMLMethod.UPDATE:
                            userService.UserUpdate(result);
                            break;

                        case XMLMethod.DELETE:
                            userService.UserDelete(result);
                            break;
                        }
                    }
                    //if (result.Header.Method == XMLMethod.CREATE && result.Header.Source != XMLSource.PLANNING)
                    //{
                    //    OfficeService.UserPost(result);
                    //}
                }
            };

            channel.BasicConsume(queueName, true, consumer);
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            /* --- Instatiate the Services --- */
            Services          OfficeService     = new Services();
            UserService       userService       = new UserService();
            EventService      eventService      = new EventService();
            AttendanceService attendanceService = new AttendanceService();
            XmlController     xmlController     = new XmlController();


            /* --- Instatiate timer and trigger sendHeartbeat every second --- */
            HeartBeat heartBeat = new HeartBeat();

            Timer timer = new Timer();

            timer.Elapsed += new ElapsedEventHandler(heartBeat.sendHeartBeat);
            timer.Interval = 1000;
            timer.Start();

            /* --- Instatiate List of CalendarEvents --- */
            List <CalendarEvent> events = new List <CalendarEvent>();

            /* --- Instatiate connection with RabbitMQ --- */
            Uri    rabbitMQUri         = new Uri(Constant.RabbitMQConnectionUrl);
            string queueEventName      = Constant.RabbitMQEventQueueName;
            string queueUserName       = Constant.RabbitMQUserQueueName;
            string queueAttendanceName = Constant.RabbitMQAttendanceQueueName;

            var factory = new ConnectionFactory
            {
                Uri = rabbitMQUri
            };

            using var connection = factory.CreateConnection();
            using var channel    = connection.CreateModel();

            /* --- Instatiate consumer for event, user & attendance queue --- */
            var eventConsumer      = new EventingBasicConsumer(channel);
            var userConsumer       = new EventingBasicConsumer(channel);
            var attendanceConsumer = new EventingBasicConsumer(channel);


            /* --- Execute valid User changes (create, dupdate, delete) from other systems (Canvas, Frontend) )--- */
            // User
            userConsumer.Received += (sender, e) =>
            {
                var message = e.Body.ToArray();
                var xml     = Encoding.UTF8.GetString(message);
                Console.WriteLine(xml);
                if (xmlController.XSDValidatie(xml, "user"))
                {
                    RabbitMQUser result = xmlController.ConvertXMLtoObject <RabbitMQUser>(xml);
                    Console.WriteLine(result.Header.Method);
                    Console.WriteLine(result.Header.Source);
                    Console.WriteLine(result.UUID);
                    Console.WriteLine(result.EntityVersion);
                    Console.WriteLine(result.LastName);
                    Console.WriteLine(result.FirstName);
                    Console.WriteLine(result.EmailAddress);
                    Console.WriteLine(result.Role);
                    if (result.Header.Source != XMLSource.PLANNING)
                    {
                        switch (result.Header.Method)
                        {
                        case XMLMethod.CREATE:
                            userService.UserCreate(result);
                            break;

                        case XMLMethod.UPDATE:
                            userService.UserUpdate(result);
                            break;

                        case XMLMethod.DELETE:
                            userService.UserDelete(result);
                            break;
                        }
                    }
                }
            };

            /* --- Execute valid Event changes (create, dupdate, delete) from other systems (Canvas, Frontend) --- */
            //Event
            eventConsumer.Received += (sender, e) =>
            {
                var message = e.Body.ToArray();
                var xml     = Encoding.UTF8.GetString(message);
                Console.WriteLine(xml);
                if (xmlController.XSDValidatie(xml, "event"))
                {
                    RabbitMQEvent result = xmlController.ConvertXMLtoObject <RabbitMQEvent>(xml);
                    Console.WriteLine(result.Header.Method);
                    Console.WriteLine(result.Header.Source);
                    Console.WriteLine(result.UUID);
                    Console.WriteLine(result.EntityVersion);
                    Console.WriteLine(result.Title);
                    Console.WriteLine(result.OrganiserId);
                    Console.WriteLine(result.Description);
                    Console.WriteLine(result.Start);
                    Console.WriteLine(result.End);
                    if (result.Header.Source != XMLSource.PLANNING)
                    {
                        switch (result.Header.Method)
                        {
                        case XMLMethod.CREATE:
                            eventService.EventCreate(result);
                            break;

                        case XMLMethod.UPDATE:
                            eventService.EventUpdate(result);
                            break;

                        case XMLMethod.DELETE:
                            eventService.EventDelete(result);
                            break;
                        }
                    }
                }
            };

            /* --- Execute valid Attendance changes (create, delete) from other systems (Canvas, Frontend) --- */
            //Attendance
            attendanceConsumer.Received += (sender, e) =>
            {
                var message = e.Body.ToArray();
                var xml     = Encoding.UTF8.GetString(message);
                Console.WriteLine(xml);
                if (xmlController.XSDValidatie(xml, "attendance"))
                {
                    RabbitMQAttendance result = xmlController.ConvertXMLtoObject <RabbitMQAttendance>(xml);
                    Console.WriteLine(result.Header.Method);
                    Console.WriteLine(result.UUID);
                    Console.WriteLine(result.CreatorId);
                    Console.WriteLine(result.AttendeeId);
                    Console.WriteLine(result.EventId);
                    switch (result.Header.Method)
                    {
                    case XMLMethod.CREATE:
                        attendanceService.AttendanceCreate(result);
                        break;

                    case XMLMethod.DELETE:
                        attendanceService.AttendanceDelete(result);
                        break;
                    }
                }
            };


            /* --- Consume the event, user & attendance queues --- */
            channel.BasicConsume(queueUserName, true, userConsumer);
            channel.BasicConsume(queueEventName, true, eventConsumer);
            channel.BasicConsume(queueAttendanceName, true, attendanceConsumer);
            Console.ReadLine();
        }
Example #7
0
        /// <summary>
        /// Method posting an incoming new user into the MS Graph API.
        /// </summary>
        /// <param name="rabbitMQUser">New user sent by the RabbitMQ message broker</param>
        public void UserCreate(RabbitMQUser rabbitMQUser)
        {
            //Mock data om nieuw user aan te maken
            //rabbitMQUser = new RabbitMQUser();
            //rabbitMQUser.FirstName = "Steve";
            //rabbitMQUser.LastName = "Herman";
            //rabbitMQUser.Role = "Clown";

            RestClient  restClient  = new RestClient();
            RestRequest restRequest = new RestRequest();

            User user = new User();

            //required
            user.AccountEnabled    = true;
            user.DisplayName       = rabbitMQUser.FirstName + " " + rabbitMQUser.LastName;
            user.MailNickname      = rabbitMQUser.FirstName.Replace(' ', '.') + "." + rabbitMQUser.LastName;
            user.UserPrincipalName = user.MailNickname + "@ipwt3.onmicrosoft.com";
            user.Mail            = user.UserPrincipalName;
            user.PasswordProfile = new UserPasswordProfile();
            user.PasswordProfile.ForceChangePasswordNextSignIn = false;
            user.PasswordProfile.Password = Constant.StandardPassword;
            user.UsageLocation            = "BE";

            user.GivenName = rabbitMQUser.FirstName;
            user.SurName   = rabbitMQUser.LastName;
            user.JobTitle  = rabbitMQUser.Role;

            BearerToken = services.RefreshAccesToken();

            var json = JsonConvert.SerializeObject(user);

            restRequest.AddHeader("Authorization", BearerToken.Token_type + " " + BearerToken.Access_token);
            restRequest.AddJsonBody(json);
            Console.WriteLine(json);

            restClient.BaseUrl = new Uri($"https://graph.microsoft.com/v1.0/users");
            var response = restClient.Post(restRequest);

            Console.WriteLine(response.StatusCode);

            if (response.StatusCode == System.Net.HttpStatusCode.Created)
            {
                GraphLicense           licenses = new GraphLicense();
                GraphLicenseAddLicense license  = new GraphLicenseAddLicense();
                license.SkuId = Constant.M365Lisence;
                licenses.AddLicenses.Add(license);
                var jsonlicense = JsonConvert.SerializeObject(licenses);

                var  responseJson = response.Content;
                User responseUser = JsonConvert.DeserializeObject <User>(responseJson);
                Console.WriteLine(responseUser.Id);
                Console.WriteLine(jsonlicense);

                RestClient  restClientLicense  = new RestClient();
                RestRequest restRequestLicense = new RestRequest();
                restRequestLicense.AddHeader("Authorization", BearerToken.Token_type + " " + BearerToken.Access_token);
                restRequestLicense.AddJsonBody(jsonlicense);
                restClientLicense.BaseUrl = new Uri($"https://graph.microsoft.com/v1.0/users/{responseUser.Id}/assignLicense");
                var responseLicense = restClientLicense.Post(restRequestLicense);
                Console.WriteLine(responseLicense.StatusCode);
                Console.WriteLine(responseLicense.ErrorMessage);

                masterDBService.CreateEntity(rabbitMQUser.UUID, responseUser.Id, "User");
            }
        }