public bool RevokeReservation(string serviceBrokerGuid, string userName, string groupName, string labServerGuid, string labClientGuid, DateTime startTime, DateTime endTime, string message) { TicketIssuerDB ticketIssuer = new TicketIssuerDB(); bool status = false; if (ticketIssuer.AuthenticateAgentHeader(agentAuthHeader)) { if (agentAuthHeader.coupon.issuerGuid == ProcessAgentDB.ServiceGuid) { try { int userId = AdministrativeAPI.GetUserID(userName); if (userId > 0) { User[] users = AdministrativeAPI.GetUsers(new int[] { userId }); if (users != null && users.Length > 0) { //SmtpMail.SmtpServer = "127.0.0.1"; if (users[0].email != null) { //MailMessage uMail = new MailMessage(); //uMail.To = users[0].email; //uMail.From = ConfigurationManager.AppSettings["supportMailAddress"]; //uMail.Subject = "[iLabs] A Reservation has been revoked!"; StringBuilder buf = new StringBuilder(); buf.Append("Your scheduled reservation for "); buf.Append(AdministrativeAPI.GetLabClientName(AdministrativeAPI.GetLabClientID(labClientGuid))); buf.Append(", from " + DateUtil.ToUtcString(startTime) + " to " + DateUtil.ToUtcString(endTime)); buf.AppendLine(" has been removed by an external service for the following reason: "); buf.AppendLine(message); buf.AppendLine("Please make a new reservation."); //uMail.Body = buf.ToString(); ; //SmtpMail.Send(uMail); string subject = "[iLabs] A Reservation has been revoked!"; string body = buf.ToString(); string from = ConfigurationManager.AppSettings["supportMailAddress"]; string to = users[0].email; MailMessage mailMessage = new MailMessage(from, to, subject, body); SmtpClient smtpClient = new SmtpClient(Consts.STR_LocalhostIP); smtpClient.Send(mailMessage); } } } } catch (Exception ex) { // Report detailed SMTP Errors StringBuilder smtpErrorMsg = new StringBuilder(); smtpErrorMsg.Append("Exception: SMTP in InterativeSB:" + ex.Message); //check the InnerException if (ex.InnerException != null) smtpErrorMsg.Append("<br>Inner Exceptions:"); while (ex.InnerException != null) { smtpErrorMsg.Append("<br>" + ex.InnerException.Message); ex = ex.InnerException; } Utilities.WriteLog(smtpErrorMsg.ToString()); } status = true; } } else { ProcessAgentInfo paInfo = ticketIssuer.GetProcessAgentInfo(agentAuthHeader.coupon.issuerGuid); if (paInfo != null) { if (paInfo.retired) { throw new Exception("The ProcessAgent is retired"); } InteractiveSBProxy proxy = new InteractiveSBProxy(); AgentAuthHeader authHeader = new AgentAuthHeader(); authHeader.coupon = paInfo.identOut; authHeader.agentGuid = ProcessAgentDB.ServiceGuid; proxy.AgentAuthHeaderValue = authHeader; proxy.Url = paInfo.webServiceUrl; status = proxy.RevokeReservation(serviceBrokerGuid, userName, groupName, labServerGuid, labClientGuid, startTime, endTime, message); } else { throw new Exception("Unknown TicketIssuerDB in RedeemTicket Request"); } } return status; }
public StorageStatus OpenExperiment(long experimentId, long duration) { TicketIssuerDB ticketIssuer = new TicketIssuerDB(); StorageStatus status = null; if (ticketIssuer.AuthenticateAgentHeader(agentAuthHeader)) { Ticket essTicket = ticketIssuer.RetrieveTicket(opHeader.coupon, TicketTypes.ADMINISTER_EXPERIMENT); // Check for ESS use if (essTicket != null) { XmlDocument payload = new XmlDocument(); payload.LoadXml(essTicket.payload); string essURL = payload.GetElementsByTagName("essURL")[0].InnerText; long sbExperimentId = Int64.Parse(payload.GetElementsByTagName("experimentID")[0].InnerText); // ExperimentSummary summary = InternalDataDB.SelectExperimentSummary(experimentId); if (summary.HasEss) { // Retrieve the ESS Status info and update as needed ProcessAgentInfo ess = ticketIssuer.GetProcessAgentInfo(summary.essGuid); if (ess.retired) { throw new Exception("The ESS is retired"); } ExperimentStorageProxy essProxy = new ExperimentStorageProxy(); essProxy.AgentAuthHeaderValue = new AgentAuthHeader(); essProxy.AgentAuthHeaderValue.coupon = ess.identOut; essProxy.AgentAuthHeaderValue.agentGuid = ProcessAgentDB.ServiceGuid; essProxy.Url = essURL; status = essProxy.OpenExperiment(sbExperimentId, duration); } // Note: store and retrieve tickets are not cancelled. } } if (status != null) { DataStorageAPI.UpdateExperimentStatus(status); } return status; }
public bool RequestTicketCancellation(Coupon coupon, string type, string redeemerGuid) { TicketIssuerDB ticketIssuer = new TicketIssuerDB(); bool status = false; if (ticketIssuer.AuthenticateAgentHeader(agentAuthHeader)) { if (coupon.issuerGuid == ProcessAgentDB.ServiceGuid) { return ticketIssuer.RequestTicketCancellation(coupon, type, redeemerGuid); } else { ProcessAgentInfo paInfo = ticketIssuer.GetProcessAgentInfo(coupon.issuerGuid); if (paInfo != null) { if (paInfo.retired) { throw new Exception("The ProcessAgent is retired"); } TicketIssuerProxy ticketProxy = new TicketIssuerProxy(); AgentAuthHeader authHeader = new AgentAuthHeader(); authHeader.coupon = paInfo.identOut; authHeader.agentGuid = ProcessAgentDB.ServiceGuid; ticketProxy.AgentAuthHeaderValue = authHeader; ticketProxy.Url = paInfo.webServiceUrl; status = ticketProxy.RequestTicketCancellation(coupon, type, redeemerGuid); } else { throw new Exception("Unknown TicketIssuerDB in RedeemTicket Request"); } } } return status; }
public Coupon CreateTicket(string type, string redeemerGuid, long duration, string payload) { TicketIssuerDB ticketIssuer = new TicketIssuerDB(); Coupon coupon = null; if (ticketIssuer.AuthenticateAgentHeader(agentAuthHeader)) { if (agentAuthHeader.coupon.issuerGuid == ProcessAgentDB.ServiceGuid) { // Note: may need to find requesting service for sponsor. coupon = ticketIssuer.CreateTicket(type, redeemerGuid, agentAuthHeader.agentGuid, duration, payload); } } return coupon; }