Ejemplo n.º 1
0
        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);
        }