Skip to content
Advertisement

Comparing user submitted data, then sending a response back

newbie here

I apologize for the cryptic title, I’m new to Laravel and PHP.

I’m building a CTF application using Laravel Jetstream with LiveWire as part of a university project.

Users will submit flags they’ve found, and I want that data to be compared with a database entry. If they flag is correct, I want this to be shown:

<span
    class="inline-flex px-2 text-xs font-semibold leading-5 text-green-800 bg-green-100 rounded-full">
    Flag Correct!
</span>

If they got it wrong, I want this to be displayed:

<span
    class="inline-flex px-2 text-xs font-semibold leading-5 text-red-800 bg-red-100 rounded-full">
    Flag Incorrect
</span>

I have most of this code in place, but I’m not sure how to get the logic or routes to work with LiveWire. I have a controller, FlagVerification that has some of the logic, but I’m mainly stuck on how to move this information between the controller and the view, and how to use LiveWire to update what the user sees

Here’s my controller so far:

<?php

namespace AppHttpControllers;

use AppModelsFlag;

class FlagVerification extends Controller
{
    function VerifyFlags()
    {
        // Get first flag from db
        $flag1 = Flag::where('id', 1)->value('flags');

        // Compare User input with $flag1
        // TODO: Pass whatever user entered from table to controller?
        if ($flag1 == 'OBR{1FA528F41E8945C}') {
            return $flag1;
        // If User entered wrong flag, update view.
        } else {
            // Manipulate table to show "incorrect flag"
            return 'Incorrect Flag';
        }
    }
}

This is what the frontend looks like, it might help give a better idea of the goal imgur[.]com/a/U8ItJuT

I realise this is a lot to ask, so any pointers or tips would be really appreciated

Thank you!

Advertisement

Answer

first of all, if you want to get data by id, use: Flag::find($id);

And in your code, you check not user data, you check data from the database with this: OBR{1FA528F41E8945C}

If you want to check data from user with your database data, your code should be something like that:

class FlagVerification extends Controller
{
    public function VerifyFlags(IlluminateHttpRequest $request)
    {
        $flag = Flag::find(1);

        // use $flag->name or property name from your model
        if ($flag->name === $request->flag) {
            return view('path_to_your_response_blade', ['flag' => $flag]);
        } else {
            // return to view flag false or smth else
            return view('path_to_your_response_blade', ['flag' => false]);
        }
    }
}

And this is your html:

<input type="radio" name="flag" value="test" placeholder="flag1">

Hope I`ve answered on your question 🙂

User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement