remove_duplicate_vmess()   B
last analyzed

Complexity

Conditions 7
Paths 24

Size

Total Lines 28
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 21
nc 24
nop 1
dl 0
loc 28
rs 8.6506
c 0
b 0
f 0
1
<?php
2
function decode_vmess($vmess_config)
3
{
4
    $vmess_data = substr($vmess_config, 8); // remove "vmess://"
5
    $decoded_data = json_decode(base64_decode($vmess_data), true);
6
    return $decoded_data;
7
}
8
9
function encode_vmess($config)
10
{
11
    $encoded_data = base64_encode(json_encode($config));
12
    $vmess_config = "vmess://" . $encoded_data;
13
    return $vmess_config;
14
}
15
16
function remove_duplicate_vmess($input)
17
{
18
    $array = explode("\n", $input);
19
    $result = [];
20
    foreach ($array as $item) {
21
        $parts = decode_vmess($item);
22
        if ($parts !== NULL) {
23
            $part_ps = $parts["ps"];
24
            unset($parts["ps"]);
25
            if (count($parts) >= 3) {
26
                ksort($parts);
27
                $part_serialize = base64_encode(serialize($parts));
28
                $result[$part_serialize][] = $part_ps ?? "";
29
            }
30
        }
31
    }
32
    $finalResult = [];
33
    foreach ($result as $serial => $ps) {
34
        $partAfterHash = $ps[0] ?? "";
35
        $part_serialize = unserialize(base64_decode($serial));
36
        $part_serialize["ps"] = $partAfterHash;
37
        $finalResult[] = encode_vmess($part_serialize);
38
    }
39
    $output = "";
40
    foreach ($finalResult as $config) {
41
        $output .= $output == "" ? $config : "\n" . $config;
42
    }
43
    return $output;
44
}
45