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")); }
/// <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); }
/// <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(); }
/// <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"); } }