public IActionResult detonate([FromBody] SecretView timebomb)
        {
            APIMessageView results = new APIMessageView();

            // Retrieves all bombs where DetonationTime is surpassed
            TimeBomb[] hotBombs = _context.TimeBombs.Where(x => x.DetonationTime < DateTime.Now && x.Status == 0).Include(x => x.Message).ToArray();

            if (hotBombs.Length > 0)
            {
                results.Message = $"Found {hotBombs.Length} hot bombs!";
                results.Success = true;
                // Iterates through bombs, detonating each
                foreach (TimeBomb bomb in hotBombs)
                {
                    string message = detonate(bomb);
                    results.Message += " | " + message;
                }
            }
            else
            {
                results.Message = $"No hot bombs found";
                results.Success = false;
            }

            return(Json(ParseAPIResponse(results)));
        }
示例#2
0
        public IActionResult ShowMessageAPI(string messageId)
        {
            APIMessageView secretView = new APIMessageView();

            try
            {
                System.Console.WriteLine(messageId);
                int id = Int32.Parse(messageId);
                System.Console.WriteLine("Returning message with id:" + id);
                secretView.SecretMessage = _context.Messages.FirstOrDefault(x => x.MessageId == id);

                if (secretView.SecretMessage == null)
                {
                    secretView.Success = false;
                    secretView.Message = "Errant input! No message with id: " + id + " exists!";
                    System.Console.WriteLine("Errant input! No message with id: " + id + " exists!");
                    return(Json(secretView));
                }

                secretView.RecentAccesses = _context.Accesses.Where(x => x.MessageId == id).Include(x => x.User).OrderByDescending(x => x.CreatedAt).ToList();

                secretView.Success = true;
                secretView.Message = "Success! Returning message with id: " + id;

                return(Json(secretView));
            }
            catch (Exception e)
            {
                System.Console.WriteLine("Uh oh guys, I think I broke it");
                System.Console.WriteLine(e);
                secretView.Success = false;
                secretView.Message = e.ToString();
            }
            return(Json(secretView));
        }
        public APIMessageView UpdateTimebombStatus(TimeBomb timebomb, int status)
        {
            APIMessageView results = new APIMessageView();

            try
            {
                // Retrieve bomb with id i
                TimeBomb defuseBomb = _context.TimeBombs.FirstOrDefault(x => x.TimeBombId == timebomb.TimeBombId);

                // Examine bomb's status to ensure it is armed
                if (defuseBomb.Status != status)
                {
                    string encryptedMessage = EncryptionMethods.encrypt(EncryptionMethods.crocodile(), timebomb.KillMessage, EncryptionMethods.alphabet());

                    // Hash killmessage and compare it to bomb's message
                    if (encryptedMessage.Equals(defuseBomb.KillMessage))
                    {
                        System.Console.WriteLine("Success! KillMessages match!");

                        // If match, set bomb status to -1
                        defuseBomb.UpdatedAt = DateTime.Now;
                        defuseBomb.Status    = status;
                        _context.SaveChanges();

                        results.TimeBomb = defuseBomb;
                        string stringStatus = getTimebombStatus(status);

                        System.Console.WriteLine($"Success! Timebomb set to: {stringStatus}!");
                        results.Success = true;
                        results.Message = $"Success! Timebomb set to: {stringStatus}!";
                    }
                    else
                    {
                        System.Console.WriteLine("Failure! KillMessages do not match!");
                        results.Success = false;
                        results.Message = "Failure! KillMessages do not match!";
                    }
                }
                else
                {
                    System.Console.WriteLine($"Error! Timebomb cannot set status to {status}! Status already set to {status}");
                    results.Success = false;
                    results.Message = $"Error! Timebomb cannot set status to {status}! Status already set to {status}";
                }
            }
            catch (Exception e)
            {
                System.Console.WriteLine("Something's f****d!");
                System.Console.WriteLine(e);
                results.Success = false;
                results.Message = "An error occured! " + e;
            }

            return(results);
        }
        public static Dictionary <string, object> ParseAPIResponse(APIMessageView message)
        {
            Dictionary <string, object> jsonMessage = new Dictionary <string, object>();

            if (!string.IsNullOrEmpty(message.Message))
            {
                jsonMessage["message"] = message.Message;
            }

            jsonMessage["success"] = message.Success;

            if (message.TimeBomb != null)
            {
                message.TimeBomb.MessageCypher = "";
                message.TimeBomb.KillMessage   = "";
                jsonMessage["TimeBomb"]        = message.TimeBomb;
            }

            return(jsonMessage);
        }
        public IActionResult Defuse([FromBody] SecretView timebomb)
        {
            APIMessageView results = new APIMessageView();

            string valid = validateTimebombDefuse(timebomb.NewTimeBomb);

            if (!string.IsNullOrEmpty(valid))
            {
                System.Console.WriteLine($"Errant Input! You must specify {valid}!");
                results.Success = false;
                results.Message = $"Errant Input! You must specify {valid}!";
                this.HttpContext.Response.StatusCode = 400;
                return(Json(results));
            }

            System.Console.WriteLine("Attempting to defuse bomb");

            results = UpdateTimebombStatus(timebomb.NewTimeBomb, -1);

            return(Json(ParseAPIResponse(results)));
        }