├── app.zip ├── www ├── README.md ├── index.html ├── script.js └── style.css ├── resources ├── README.md ├── icon.png └── splash.png ├── README.md ├── LICENSE └── config.xml /app.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kourva/Crocsy/HEAD/app.zip -------------------------------------------------------------------------------- /www/README.md: -------------------------------------------------------------------------------- 1 | App main source 2 | + HTML 3 | + Css 4 | + Javascript 5 | -------------------------------------------------------------------------------- /resources/README.md: -------------------------------------------------------------------------------- 1 | App resources 2 | + app icon image 3 | + app presplash image 4 | -------------------------------------------------------------------------------- /resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kourva/Crocsy/HEAD/resources/icon.png -------------------------------------------------------------------------------- /resources/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Kourva/Crocsy/HEAD/resources/splash.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 |

Crocsy

4 |

Simple proxy app made with HTML, Css, Javascript. Get random free Http/Https proxies

5 | 6 | 7 | # Preview 8 | You can see preview of app [here](https://Kourva.github.io/Crocsy) 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Kourva 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /www/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 26 | 30 |
31 | 38 | 39 |
40 | 41 | 42 | -------------------------------------------------------------------------------- /config.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | Crocsy 12 | Simple proxy app made with HTML, Css, Javascript. Get random free Http/Https proxies. 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /www/script.js: -------------------------------------------------------------------------------- 1 | // Github: Kourva 2 | 3 | $(document).ready(async function() { 4 | const response = await fetch("https://api.ipify.org?format=json"); 5 | const data = await response.json(); 6 | $("#current-ip-area").attr("placeholder", "Your IP: " + data.ip); 7 | }); 8 | 9 | async function getProxies() { 10 | const settings = { 11 | async: true, 12 | crossDomain: true, 13 | url: 'https://proxyspider-proxy-spider-proxies-v1.p.rapidapi.com/proxies.example.json', 14 | method: 'GET', 15 | headers: { 16 | 'X-RapidAPI-Key': 'b99fbf92bamsh8f425725f1304e9p119c55jsn98dd1febc9d8', 17 | 'X-RapidAPI-Host': 'proxyspider-proxy-spider-proxies-v1.p.rapidapi.com' 18 | } 19 | }; 20 | 21 | // Remove existing cards 22 | const cards = document.querySelectorAll(".card"); 23 | if (cards.length > 0) { 24 | for (let i = 0; i < cards.length; i++) { 25 | document.body.removeChild(cards[i]); 26 | } 27 | } 28 | 29 | // Add loader 30 | let loader = document.querySelector(".loader"); 31 | if (!loader) { 32 | loader = document.createElement("div"); 33 | loader.classList.add("loader"); 34 | const span = document.createElement("span"); 35 | loader.appendChild(span); 36 | document.body.appendChild(loader); 37 | } 38 | 39 | // Fetch new proxies from the API 40 | $.ajax(settings).done(function(response) { 41 | const proxies = response.data.proxies; 42 | 43 | // Sort proxies by response time 44 | proxies.sort((a, b) => { 45 | if (a.response_time === "fast" && b.response_time === "fast") { 46 | return 0; 47 | } else if (a.response_time === "fast") { 48 | return -1; 49 | } else if (b.response_time === "fast") { 50 | return 1; 51 | } else if (a.response_time === "mediumms" && b.response_time === "mediumms") { 52 | return 0; 53 | } else if (a.response_time === "mediumms") { 54 | return -1; 55 | } else if (b.response_time === "mediumms") { 56 | return 1; 57 | } else { 58 | return a.response_time - b.response_time; 59 | } 60 | }); 61 | 62 | for (let i = 0; i < proxies.length; i++) { 63 | const proxy = proxies[i]; 64 | const pingTime = proxy.response_time === "fast" ? "fast" : `${proxy.response_time}ms`; 65 | const card = createCard(proxy.ip, proxy.port, proxy.protocols.join('/'), `response time: ${pingTime}`, proxy.country_code); 66 | document.body.appendChild(card); 67 | 68 | // Add copy-to-clipboard functionality to the button on each card 69 | const button = card.querySelector('.card-button'); 70 | button.addEventListener("click", function() { 71 | copyToClipboard(`${proxy.ip}:${proxy.port}`); 72 | }); 73 | } 74 | 75 | // Remove loader 76 | document.body.removeChild(loader); 77 | }); 78 | } 79 | 80 | 81 | function createCard(ip, port, protocol, responseTime, countryCode) { 82 | const card = document.createElement("div"); 83 | card.classList.add("card"); 84 | 85 | const cardImg = document.createElement("div"); 86 | cardImg.classList.add("card-img"); 87 | 88 | const button = document.createElement("button"); 89 | button.classList.add("card-button"); 90 | button.textContent = "Copy"; 91 | button.addEventListener("click", function() { 92 | copyToClipboard(`${ip}:${port}`); 93 | }); 94 | cardImg.appendChild(button); 95 | 96 | // Add image flag 97 | const imageFlag = document.createElement("div"); 98 | imageFlag.classList.add("image-flag"); 99 | const img = document.createElement("img"); 100 | img.src = `https://flagcdn.com/36x27/${countryCode.toLowerCase()}.png`; 101 | imageFlag.appendChild(img); 102 | cardImg.appendChild(imageFlag); 103 | 104 | card.appendChild(cardImg); 105 | 106 | const textBox = document.createElement("div"); 107 | textBox.classList.add("card-textBox"); 108 | card.appendChild(textBox); 109 | 110 | const textContent = document.createElement("div"); 111 | textContent.classList.add("card-textContent"); 112 | textBox.appendChild(textContent); 113 | 114 | const h1 = document.createElement("p"); 115 | h1.classList.add("card-h1"); 116 | h1.textContent = `${ip}:${port}`; 117 | textContent.appendChild(h1); 118 | 119 | const span = document.createElement("span"); 120 | span.classList.add("card-span"); 121 | span.textContent = protocol; 122 | textBox.appendChild(span); 123 | 124 | const p = document.createElement("p"); 125 | p.classList.add("card-p"); 126 | p.textContent = responseTime; 127 | 128 | let response_color = ""; 129 | if (responseTime === "response time: fast") { 130 | response_color = "#00ff00"; 131 | } else if (responseTime === "response time: mediumms") { 132 | response_color = "#ffff00"; 133 | } else { 134 | response_color = "#ff0000"; 135 | } 136 | p.style.color = response_color; 137 | textBox.appendChild(p); 138 | 139 | return card; 140 | } 141 | 142 | function copyToClipboard(text) { 143 | const input = document.createElement("input"); 144 | input.setAttribute("type", "text"); 145 | input.setAttribute("value", text); 146 | document.body.appendChild(input); 147 | input.select(); 148 | document.execCommand("copy"); 149 | document.body.removeChild(input); 150 | } -------------------------------------------------------------------------------- /www/style.css: -------------------------------------------------------------------------------- 1 | /* Github: Kourva */ 2 | html, body { 3 | width: 100%; 4 | height: 100%; 5 | } 6 | 7 | body { 8 | margin: 0; 9 | background-color: #f39bc3; 10 | padding-top: 80px; 11 | user-select: none; 12 | } 13 | 14 | * { 15 | box-sizing: border-box; 16 | scrollbar-color: #ffffff11 17 | } 18 | 19 | input { 20 | touch-action: manipulation 21 | } 22 | 23 | /* Navigation Bar */ 24 | .nav-bar { 25 | position: fixed; 26 | top: 0; 27 | width: 100%; 28 | height: 50px; 29 | padding: 0 30px; 30 | display: flex; 31 | align-items: center; 32 | justify-content: space-between; 33 | background: #f39bc3dd; 34 | backdrop-filter: blur(5px); 35 | backface-visibility: hidden; 36 | transform: translateZ(0px); 37 | z-index: 10; 38 | box-shadow: #f39bc3 0px 30px 15px -15px inset, #f39bc3 0px 18px 36px -15px inset; 39 | } 40 | 41 | .nav-bar h1 { 42 | background-image: linear-gradient(90deg, #880088 0px, #ee00ee 40px, #880088 80px); 43 | -webkit-background-clip: text; 44 | -webkit-text-fill-color: transparent; 45 | font-size: 24px; 46 | } 47 | 48 | .nav-bar2 { 49 | position: fixed; 50 | top: 50px; 51 | width: 100%; 52 | height: 30px; 53 | padding: 0 30px; 54 | margin-bottom: 5px; 55 | display: flex; 56 | align-items: center; 57 | background: #f39bc3dd; 58 | backdrop-filter: blur(5px); 59 | backface-visibility: hidden; 60 | transform: translateZ(0px); 61 | box-shadow: rgba(0, 0, 0, 0.07) 0px 1px 1px, rgba(0, 0, 0, 0.07) 0px 2px 2px, rgba(0, 0, 0, 0.07) 0px 4px 4px, rgba(0, 0, 0, 0.07) 0px 8px 8px, rgba(0, 0, 0, 0.07) 0px 16px 16px; 62 | z-index: 10; 63 | animation: shimmer 4s infinite; 64 | } 65 | 66 | .nav-bar2 p { 67 | color: #212121; 68 | font-size: 16px; 69 | font-family: monospace; 70 | } 71 | 72 | /* Animation Cube */ 73 | .cube { 74 | -webkit-transform-style: preserve-3d; 75 | -webkit-animation: spin 6s infinite linear; 76 | position: fixed; 77 | width: 20px; 78 | height: 20px; 79 | top: 28%; 80 | left: 90%; 81 | right: 0 82 | } 83 | 84 | .cube div { 85 | width: 20px; 86 | height: 20px; 87 | line-height: 20px; 88 | text-align: center; 89 | border: 2px solid #aa00aa; 90 | background-color: #29324111; 91 | font-size: 42px; 92 | display: block; 93 | position: absolute; 94 | mix-blend-mode: contrast 95 | } 96 | 97 | .cube div.top { 98 | -webkit-transform: rotateX(90deg); 99 | margin-top: -5px 100 | } 101 | 102 | .cube div.right { 103 | -webkit-transform: rotateY(90deg); 104 | margin-left: 5px 105 | } 106 | 107 | .cube div.bottom { 108 | -webkit-transform: rotateX(-90deg); 109 | margin-top: 5px 110 | } 111 | 112 | .cube div.left { 113 | -webkit-transform: rotateY(-90deg); 114 | margin-left: -5px 115 | } 116 | 117 | .cube div.front { 118 | -webkit-transform: translateZ(5px) 119 | } 120 | 121 | .cube div.back { 122 | -webkit-transform: translateZ(-5px) rotateX(180deg) 123 | } 124 | 125 | .cube div.back span { 126 | transform: rotate(-180deg) 127 | } 128 | 129 | @-webkit-keyframes spin { 130 | 0% { 131 | -webkit-transform: rotateX(-20deg) rotateY(20deg) 132 | } 133 | 134 | 100% { 135 | -webkit-transform: rotateX(-20deg) rotateY(380deg) 136 | } 137 | 138 | } 139 | 140 | .cube:hover { 141 | -webkit-animation: spin 2s infinite linear; 142 | box-shadow: rgba(0, 0, 0, 0.1) 0px 2px 7px 4px 143 | } 144 | 145 | /* Proxy Card */ 146 | .card { 147 | position: revert-layer; 148 | width: 90%; 149 | max-width: 90%; 150 | height: 100px; 151 | border-radius: 10px; 152 | margin: auto; 153 | background-color: #231f20; 154 | display: flex; 155 | align-items: center; 156 | justify-content: left; 157 | transition: 0.5s ease-in-out; 158 | background-image: linear-gradient(90deg, #ffffff11 0px, #f39bc322 40px, #ffffff11 80px); 159 | background-size: 300%; 160 | background-position: 100% 0; 161 | animation: shimmer 4s infinite; 162 | box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px; 163 | margin-bottom: 10px; 164 | z-index: 20; 165 | } 166 | 167 | .card:hover { 168 | transform: scale(1.05); 169 | position: revert-layer; 170 | } 171 | 172 | .card-button { 173 | position: revert-layer; 174 | width: 90%; 175 | margin: 3px; 176 | padding: 8px 8px; 177 | border: none; 178 | background-color: #313131; 179 | color: #fff; 180 | cursor: pointer; 181 | outline: none; 182 | transition: 1s ease-in-out; 183 | border-top-left-radius: 10px; 184 | } 185 | 186 | .card-button:hover { 187 | position: revert-layer; 188 | transition: .5s ease-in-out; 189 | box-shadow: rgba(50, 50, 93, 0.25) -10px 30px 60px -12px inset, rgba(0, 0, 0, 0.3) -10px 18px 36px -18px inset; 190 | color: #000000; 191 | background-color: #bc7a9f 192 | } 193 | 194 | .image-flag { 195 | display: inline-block; 196 | width: 90%; 197 | padding: 8px; 198 | margin: 3px; 199 | border: none; 200 | color: #fff; 201 | font-size: 16px; 202 | text-align: center; 203 | cursor: pointer; 204 | outline: none; 205 | border-top-left-radius: 10px; 206 | border-bottom-right-radius: 10px; 207 | } 208 | 209 | /* To round the corners of the image */ 210 | .image-flag img { 211 | border-top-left-radius: 10px; 212 | border-bottom-right-radius: 10px; 213 | } 214 | 215 | .card-img { 216 | width: 20%; 217 | height: 100%; 218 | margin-left: 0px; 219 | border-top-left-radius: 10px; 220 | border-bottom-left-radius: 10px; 221 | background: #212121; 222 | } 223 | 224 | .card-textBox { 225 | width: calc(100% - 90px); 226 | margin-left: 10px; 227 | color: white; 228 | align-items: center; 229 | justify-content: space-between; 230 | font-family: 'Poppins' sans-serif; 231 | } 232 | 233 | .card-textContent { 234 | display: flex; 235 | align-items: center; 236 | justify-content: space-between; 237 | } 238 | 239 | .card-span { 240 | font-size: 16px; 241 | font-family: monospace; 242 | color: #aaaaaa; 243 | } 244 | 245 | .card-h1 { 246 | font-size: 14px; 247 | font-weight: bold; 248 | font-family: monospace; 249 | } 250 | 251 | .card-p { 252 | font-size: 12px; 253 | font-family: monospace; 254 | color: #ffffff; 255 | } 256 | 257 | @keyframes shimmer { 258 | to { 259 | background-position: -100% 0 260 | } 261 | 262 | } 263 | 264 | /* Input Area */ 265 | .current-ip { 266 | position: revert-layer; 267 | display: inline-flex; 268 | width: 90%; 269 | height: 40px; 270 | background-color: #211b1d; 271 | left: 0; 272 | right: 0; 273 | margin: 5%; 274 | border-radius: 10px; 275 | background-image: linear-gradient(90deg, #ffffff11 0px, #ea80fc55 40px, #ffffff11 80px); 276 | background-size: 300%; 277 | background-position: 100% 0; 278 | animation: shimmer 4s infinite; 279 | box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px 280 | } 281 | 282 | .input-field { 283 | width: 350%; 284 | height: 100%; 285 | padding: 10px; 286 | border-top-left-radius: 10px; 287 | border-bottom-left-radius: 10px; 288 | background-color: #00000044; 289 | border: none; 290 | outline: none; 291 | font-family: monospace; 292 | color: #ffffff; 293 | font-weight: bold; 294 | } 295 | 296 | .submit-btn { 297 | position: revert-layer; 298 | right: 0; 299 | left: 0; 300 | width: 100%; 301 | height: 100%; 302 | border-top-right-radius: 10px; 303 | border-bottom-right-radius: 10px; 304 | border: none; 305 | background-color: #ee98bf; 306 | outline: none; 307 | font-family: monospace; 308 | box-shadow: rgba(50, 50, 93, 0.25) -10px 30px 60px -12px inset, rgba(0, 0, 0, 0.3) -10px 18px 36px -18px inset; 309 | transition: 0.3s; 310 | overflow: hidden; 311 | align-items: center; 312 | justify-content: center; 313 | box-sizing: border-box 314 | } 315 | 316 | .submit-btn span { 317 | letter-spacing: .1rem; 318 | transition: 0.3s; 319 | box-sizing: border-box; 320 | position: revert-layer; 321 | background: none 322 | } 323 | 324 | .submit-btn span::before { 325 | box-sizing: border-box; 326 | position: revert-layer; 327 | content: "Search"; 328 | background: none 329 | } 330 | 331 | .submit-btn:hover, .submit-btn:focus { 332 | background: #231f20 333 | } 334 | 335 | .submit-btn:hover span, .submit-btn:focus span { 336 | color: #ffffff 337 | } 338 | 339 | .submit-btn:hover span::before, .submit-btn:focus span::before { 340 | animation: chitchat linear both 3s 341 | } 342 | 343 | @keyframes chitchat { 344 | 0% { 345 | content: "Searc#" 346 | } 347 | 348 | 5% { 349 | content: "Sear.#" 350 | } 351 | 352 | 10% { 353 | content: "Se^{.#" 354 | } 355 | 356 | 15% { 357 | content: "-!^{.#" 358 | } 359 | 360 | 20% { 361 | content: "S!^{.#" 362 | } 363 | 364 | 25% { 365 | content: "Se^{.#" 366 | } 367 | 368 | 30% { 369 | content: "Sea{.#" 370 | } 371 | 372 | 35% { 373 | content: "Sear.#" 374 | } 375 | 376 | 40% { 377 | content: "Searh#" 378 | } 379 | 380 | 45% { 381 | content: "Search" 382 | } 383 | 384 | 50% { 385 | content: "?2@%" 386 | } 387 | 388 | 55% { 389 | content: "\;1}]" 390 | } 391 | 392 | 60% { 393 | content: "?{%:%" 394 | } 395 | 396 | 65% { 397 | content: "|{f[4" 398 | } 399 | 400 | 70% { 401 | content: "{4%0%" 402 | } 403 | 404 | 75% { 405 | content: "'1_0<" 406 | } 407 | 408 | 80% { 409 | content: "{0%" 410 | } 411 | 412 | 85% { 413 | content: "]>'" 414 | } 415 | 416 | 90% { 417 | content: "4#$" 418 | } 419 | 420 | 95% { 421 | content: "2@#^@" 422 | } 423 | 424 | 100% { 425 | content: "Search" 426 | } 427 | 428 | } 429 | 430 | .loader { 431 | position: relative; 432 | top: 25%; 433 | width: 150px; 434 | height: 150px; 435 | margin: auto; 436 | background: transparent; 437 | border-radius: 50%; 438 | box-shadow: 25px 25px 75px rgba(0, 0, 0, 0.55); 439 | border: 1px solid #232323; 440 | display: flex; 441 | align-items: center; 442 | justify-content: center; 443 | overflow: hidden; 444 | } 445 | 446 | .loader::before { 447 | content: ''; 448 | position: absolute; 449 | inset: 20px; 450 | background: transparent; 451 | border: 1px dashed #212121; 452 | border-radius: 50%; 453 | box-shadow: inset -5px -5px 25px rgba(0, 0, 0, 0.25), inset 5px 5px 35px rgba(0, 0, 0, 0.25); 454 | } 455 | 456 | .loader::after { 457 | content: ''; 458 | position: absolute; 459 | width: 50px; 460 | height: 50px; 461 | border-radius: 50%; 462 | border: 1px dashed #212121; 463 | box-shadow: inset -5px -5px 25px rgba(0, 0, 0, 0.25), inset 5px 5px 35px rgba(0, 0, 0, 0.25); 464 | } 465 | 466 | .loader span { 467 | position: absolute; 468 | top: 50%; 469 | left: 50%; 470 | width: 50%; 471 | height: 100%; 472 | background: transparent; 473 | transform-origin: top left; 474 | animation: radar81 2s linear infinite; 475 | border-top: 1px solid #000000; 476 | } 477 | 478 | .loader span::before { 479 | content: ''; 480 | position: absolute; 481 | top: 0; 482 | left: 0; 483 | width: 100%; 484 | height: 100%; 485 | background: #212121; 486 | transform-origin: top left; 487 | transform: rotate(-55deg); 488 | filter: blur(30px) drop-shadow(20px 20px 20px seagreen); 489 | } 490 | 491 | @keyframes radar81 { 492 | 0% { 493 | transform: rotate(0deg); 494 | } 495 | 496 | 100% { 497 | transform: rotate(360deg); 498 | } 499 | 500 | } 501 | --------------------------------------------------------------------------------