first commit with client and server
This commit is contained in:
commit
b8595cdca8
5 changed files with 180 additions and 0 deletions
17
server/params.php
Normal file
17
server/params.php
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?php
|
||||||
|
// generate random params like ["param1", "param2", "param3"] with random values
|
||||||
|
$params = [
|
||||||
|
"cl1",
|
||||||
|
"cl2",
|
||||||
|
"Kiran",
|
||||||
|
"Kir2n",
|
||||||
|
"stam",
|
||||||
|
"stam2",
|
||||||
|
"stam3",
|
||||||
|
"stam4",
|
||||||
|
"stam5",
|
||||||
|
"stam6",
|
||||||
|
"stam7",
|
||||||
|
]
|
||||||
|
|
||||||
|
?>
|
79
server/process.php
Normal file
79
server/process.php
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
class UrlManipulator
|
||||||
|
{
|
||||||
|
private $paramsArray = ['param1', 'param2', 'param3', 'param4'];
|
||||||
|
|
||||||
|
public function manipulateUrl($url)
|
||||||
|
{
|
||||||
|
if (!filter_var($url, FILTER_VALIDATE_URL)) {
|
||||||
|
return ['error' => 'Invalid URL', 'input' => $url];
|
||||||
|
}
|
||||||
|
|
||||||
|
$parsedUrl = parse_url($url);
|
||||||
|
$existingParams = [];
|
||||||
|
if (isset($parsedUrl['query'])) {
|
||||||
|
parse_str($parsedUrl['query'], $existingParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (empty($this->paramsArray)) {
|
||||||
|
return ['error' => 'Params array is full', 'input' => $url];
|
||||||
|
}
|
||||||
|
|
||||||
|
$newParam = $this->getNewParam($existingParams);
|
||||||
|
|
||||||
|
if (!$newParam) {
|
||||||
|
return ['error' => 'Unable to find a unique parameter to add', 'input' => $url];
|
||||||
|
}
|
||||||
|
|
||||||
|
$randomValue = $this->generateRandomValue();
|
||||||
|
|
||||||
|
$modifiedUrl = $this->addParamToUrl($url, $newParam, $randomValue);
|
||||||
|
|
||||||
|
return [
|
||||||
|
'before' => $url,
|
||||||
|
'after' => $modifiedUrl,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
private function addParamToUrl($url, $param, $value)
|
||||||
|
{
|
||||||
|
$separator = (parse_url($url, PHP_URL_QUERY) == null) ? '?' : '&';
|
||||||
|
|
||||||
|
if (strpos($url, $param . '=') !== false) {
|
||||||
|
$modifiedUrl = preg_replace('/(' . $param . '=)[^&]+/', '$1' . urlencode($value), $url);
|
||||||
|
} else {
|
||||||
|
$modifiedUrl = $url . $separator . urlencode($param) . '=' . urlencode($value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $modifiedUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function generateRandomValue()
|
||||||
|
{
|
||||||
|
return uniqid();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getNewParam($existingParams){
|
||||||
|
while (!empty($this->paramsArray)) {
|
||||||
|
$newParam = array_pop($this->paramsArray);
|
||||||
|
|
||||||
|
if (!array_key_exists($newParam, $existingParams)) {
|
||||||
|
return $newParam;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||||
|
$urlManipulator = new UrlManipulator();
|
||||||
|
$url = $_POST['url'];
|
||||||
|
$result = $urlManipulator->manipulateUrl($url);
|
||||||
|
|
||||||
|
header('Content-Type: application/json');
|
||||||
|
echo json_encode($result);
|
||||||
|
}
|
24
web-client/index.html
Normal file
24
web-client/index.html
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
<title>URL Manipulator</title>
|
||||||
|
<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
|
||||||
|
<script src="script.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<h2>URL Manipulator</h2>
|
||||||
|
<div id="result-container">
|
||||||
|
<!-- Results or errors will be displayed here -->
|
||||||
|
</div>
|
||||||
|
<form id="url-form">
|
||||||
|
<label for="url">Enter a valid URL:</label>
|
||||||
|
<textarea id="url" name="url" rows="4" cols="50" required></textarea>
|
||||||
|
<button type="button" onclick="manipulateUrl()">Manipulate URL</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
35
web-client/script.js
Normal file
35
web-client/script.js
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
function manipulateUrl() {
|
||||||
|
var url = $('#url').val();
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: 'POST',
|
||||||
|
url: '../server/process.php',
|
||||||
|
data: { url: url },
|
||||||
|
dataType: 'json',
|
||||||
|
success: function (result) {
|
||||||
|
displayResult(result);
|
||||||
|
},
|
||||||
|
error: function (xhr, status, error) {
|
||||||
|
displayError(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function displayResult(result) {
|
||||||
|
console.log(result);
|
||||||
|
var resultContainer = $('#result-container');
|
||||||
|
resultContainer.empty();
|
||||||
|
|
||||||
|
if (result.hasOwnProperty('error')) {
|
||||||
|
resultContainer.append('<p class="error">' + result.error + '</p>');
|
||||||
|
} else {
|
||||||
|
// Update the text area with the modified URL
|
||||||
|
$('#url').val(result.after.replace(/&/g, '&'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function displayError(error) {
|
||||||
|
var resultContainer = $('#result-container');
|
||||||
|
resultContainer.empty();
|
||||||
|
resultContainer.append('<p class="error">Error: ' + error + '</p>');
|
||||||
|
}
|
25
web-client/style.css
Normal file
25
web-client/style.css
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
margin: 0;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 20px;
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
background-color: #4caf50;
|
||||||
|
color: #fff;
|
||||||
|
padding: 10px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
Loading…
Reference in a new issue