public IPostResponse LoanCamera([FromContent] LoanRequest LoanRequest) { var Loan = new DeviceLoan { Mac = LoanRequest.SerialNumber, Email = LoanRequest.Email, LoanReason = LoanRequest.Reason }; if ((LoanRequest.LoanDays == 1 || LoanRequest.LoanDays == 7 || LoanRequest.LoanDays == 14) == false) { return(new PostResponse(PostResponse.ResponseStatus.Conflict, null, new ResponseData { Code = 4, Message = "Loan days can only be set to 1,7 or 14", Status = "Failed" })); } var db = new SqliteDB(); Loan.ExpireDate = DateTime.Now.AddDays(LoanRequest.LoanDays).Ticks; var dbres = db.GetLastLoanInfo(Loan); if (dbres == null) { var username = "******" + new Random().Next(1000, 9999).ToString(); var password = RandomString(16); Loan.GeneratedPassword = password; Loan.GeneratedUsername = username; DeviceList loandevice = new DeviceList { SerialNumber = Loan.Mac }; var loanres = db.GetDevice(loandevice); if (loanres == null) { return(new PostResponse(PostResponse.ResponseStatus.Conflict, null, new ResponseData { Code = 2, Message = "Device not found", Status = "Failed" })); } var device = new AxisVapixLib.Device(); device.Host = loanres.Host; device.Username = loanres.Username; device.Password = loanres.Password; var userres = Task.Run(async() => await device.AddUser(username, password, AxisVapixLib.Device.UserGroups.Admin)); while (!userres.IsCompleted) { Task.Delay(100); } if (!userres.Result) { return(new PostResponse(PostResponse.ResponseStatus.Conflict, null, new ResponseData { Code = 3, Message = "Failed to create username", Status = "Failed" })); } var overlay = new AxisVapixLib.Overlay.Overlay(device); Task.Run(() => overlay.SetTextOverlayAsync(0, AxisVapixLib.Overlay.Overlay.TextOverlayBackgroundColor.White, false, false, AxisVapixLib.Overlay.Overlay.TextColor.Black, AxisVapixLib.Overlay.Overlay.TextOverlayPosition.Top, "Reserved to " + Loan.Email)); Loan.LoanDate = DateTime.Now.Ticks; db.SaveLoanInfo(Loan); EmailController e = new EmailController(); Task.Run(async() => await e.SendEmail(Loan.Email, "Device Loaned", string.Format("You have successfully loaned\nUrl: {0}\nUsername: {1}\nPassword: {2}, Expires: {3}", device.Host, Loan.GeneratedUsername, Loan.GeneratedPassword, DateTime.FromBinary(Loan.ExpireDate).ToString()))); LoanResponse lr = new LoanResponse(); lr.DateExpire = DateTime.FromBinary(Loan.ExpireDate).ToString(); lr.DateExpireTick = Loan.ExpireDate; lr.SerialNumber = Loan.Mac; lr.Username = username; lr.Password = password; lr.Host = device.Host; return(new PostResponse(PostResponse.ResponseStatus.Created, null, lr)); } var d = new PostResponse(PostResponse.ResponseStatus.Conflict, null, new ResponseData() { Code = 1, Message = "Already loaned", Status = "Failed" }); return(d); }