1 | <?php |
||
2 | |||
3 | function parseTuic ($config_str) { |
||
4 | $parsedUrl = parse_url($config_str); |
||
5 | |||
6 | // Extract the parameters from the query string |
||
7 | $params = []; |
||
8 | if (isset($parsedUrl["query"])) { |
||
9 | parse_str($parsedUrl["query"], $params); |
||
10 | } |
||
11 | |||
12 | // Construct the output object |
||
13 | $output = [ |
||
14 | "protocol" => "tuic", |
||
15 | "username" => isset($parsedUrl["user"]) ? $parsedUrl["user"] : "", |
||
16 | "pass" => isset($parsedUrl["pass"]) ? $parsedUrl["pass"] : "", |
||
17 | "hostname" => isset($parsedUrl["host"]) ? $parsedUrl["host"] : "", |
||
18 | "port" => isset($parsedUrl["port"]) ? $parsedUrl["port"] : "", |
||
19 | "params" => $params, |
||
20 | "hash" => isset($parsedUrl["fragment"]) ? $parsedUrl["fragment"] : "", |
||
21 | ]; |
||
22 | |||
23 | return $output; |
||
24 | |||
25 | } |
||
26 | |||
27 | function buildTuic($obj) |
||
28 | { |
||
29 | $url = "tuic://"; |
||
30 | $url .= addUsernameAndPassword($obj); |
||
31 | $url .= $obj["hostname"]; |
||
32 | $url .= addPort($obj); |
||
33 | $url .= addParams($obj); |
||
34 | $url .= addHash($obj); |
||
35 | return $url; |
||
36 | } |
||
37 | |||
38 | function remove_duplicate_tuic($input) |
||
39 | { |
||
40 | $array = explode("\n", $input); |
||
41 | |||
42 | foreach ($array as $item) { |
||
43 | $parts = parseTuic($item); |
||
44 | $part_hash = $parts["hash"]; |
||
45 | unset($parts["hash"]); |
||
46 | ksort($parts["params"]); |
||
47 | $part_serialize = base64_encode(serialize($parts)); |
||
48 | $result[$part_serialize][] = $part_hash ?? ""; |
||
49 | } |
||
50 | |||
51 | $finalResult = []; |
||
52 | foreach ($result as $url => $parts) { |
||
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
![]() |
|||
53 | $partAfterHash = $parts[0] ?? ""; |
||
54 | $part_serialize = unserialize(base64_decode($url)); |
||
55 | $part_serialize["hash"] = $partAfterHash; |
||
56 | $finalResult[] = buildTuic($part_serialize); |
||
57 | } |
||
58 | |||
59 | $output = ""; |
||
60 | foreach ($finalResult as $config) { |
||
61 | $output .= $output == "" ? $config : "\n" . $config; |
||
62 | } |
||
63 | return $output; |
||
64 | } |
||
65 |