forked from librespeed/speedtest
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Update README.md Added simple manual instructions * Link to docker documentation * Add basic docker compose example * add descriptive alt-text to GIF * Fix some typos and formatting * Updated Docker to use php8.2-apache as the upstream image. * Clean up apt lists after installation in Dockerfile * Update Dockerfile Co-authored-by: Quentame <[email protected]> * fix typo * doc: sqlite db persistance explained * Create docker-publish.yml * Update docker-publish.yml * Update docker-publish.yml * fix action * switch docker image location * without image signing * remove signing * switch units to Mbit/s * move examples to folder * fix ipinfo parsing * fix regression on getIpinfo * removed trailing whitespaces * integrate ios favicon closes librespeed#400 * set single-server-full as index --------- Co-authored-by: Les W <[email protected]> Co-authored-by: bt90 <[email protected]> Co-authored-by: An | Anton Röhm <[email protected]> Co-authored-by: 0kyn <[email protected]> Co-authored-by: Marc Zampetti <[email protected]> Co-authored-by: Peter Dave Hello <[email protected]> Co-authored-by: Quentame <[email protected]> Co-authored-by: Stefan STIDL <[email protected]>
- Loading branch information
1 parent
6a4a05d
commit e5f54fb
Showing
28 changed files
with
332 additions
and
128 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
name: Docker | ||
|
||
# This workflow uses actions that are not certified by GitHub. | ||
# They are provided by a third-party and are governed by | ||
# separate terms of service, privacy policy, and support | ||
# documentation. | ||
|
||
on: | ||
# schedule: | ||
# - cron: '30 20 * * *' | ||
push: | ||
branches: ["*"] | ||
# Publish semver tags as releases. | ||
tags: ["v*.*.*"] | ||
pull_request: | ||
branches: ["{{is_default_branch}}"] | ||
|
||
env: | ||
# Use docker.io for Docker Hub if empty | ||
REGISTRY: ghcr.io | ||
# github.repository as <account>/<repo> | ||
IMAGE_NAME: ${{ github.repository }} | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
permissions: | ||
contents: read | ||
packages: write | ||
# This is used to complete the identity challenge | ||
# with sigstore/fulcio when running outside of PRs. | ||
id-token: write | ||
|
||
steps: | ||
- name: Checkout repository | ||
uses: actions/checkout@v3 | ||
|
||
# Set up BuildKit Docker container builder to be able to build | ||
# multi-platform images and export cache | ||
# https://github.com/docker/setup-buildx-action | ||
- name: Set up Docker Buildx | ||
uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 | ||
|
||
# Login against a Docker registry except on PR | ||
# https://github.com/docker/login-action | ||
- name: Log into registry ${{ env.REGISTRY }} | ||
if: github.event_name != 'pull_request' | ||
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0 | ||
with: | ||
registry: ${{ env.REGISTRY }} | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
# Extract metadata (tags, labels) for Docker | ||
# https://github.com/docker/metadata-action | ||
- name: Extract Docker metadata | ||
id: meta | ||
uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0 | ||
with: | ||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | ||
tags: | | ||
type=ref,event=branch | ||
type=ref,event=pr | ||
# set latest tag for default branch | ||
type=raw,value=latest,enable={{is_default_branch}} | ||
type=semver,pattern={{version}} | ||
type=semver,pattern={{major}}.{{minor}} | ||
# Build and push Docker image with Buildx (don't push on PR) | ||
# https://github.com/docker/build-push-action | ||
- name: Build and push Docker image | ||
id: build-and-push | ||
uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # v5.0.0 | ||
with: | ||
context: . | ||
push: ${{ github.event_name != 'pull_request' }} | ||
tags: ${{ steps.meta.outputs.tags }} | ||
labels: ${{ steps.meta.outputs.labels }} | ||
cache-from: type=gha | ||
cache-to: type=gha,mode=max |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
results/idObfuscation_salt.php | ||
backend/getIP_serverLocation.php | ||
db-dir/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -76,7 +76,7 @@ function getIpInfoTokenString() | |
return ''; | ||
} | ||
|
||
return '?token='.$IPINFO_APIKEY; | ||
return '?token=' . $IPINFO_APIKEY; | ||
} | ||
|
||
/** | ||
|
@@ -86,7 +86,7 @@ function getIpInfoTokenString() | |
*/ | ||
function getIspInfo($ip) | ||
{ | ||
$json = file_get_contents('https://ipinfo.io/'.$ip.'/json'.getIpInfoTokenString()); | ||
$json = file_get_contents('https://ipinfo.io/' . $ip . '/json' . getIpInfoTokenString()); | ||
if (!is_string($json)) { | ||
return null; | ||
} | ||
|
@@ -106,17 +106,91 @@ function getIspInfo($ip) | |
*/ | ||
function getIsp($rawIspInfo) | ||
{ | ||
if ( | ||
!is_array($rawIspInfo) | ||
|| !array_key_exists('org', $rawIspInfo) | ||
|| !is_string($rawIspInfo['org']) | ||
|| empty($rawIspInfo['org']) | ||
) { | ||
return 'Unknown ISP'; | ||
if (is_array($rawIspInfo)) { | ||
/* variant with no token | ||
has json like: | ||
{ | ||
"ip": "xxx.xxx.xxx.xxx", | ||
"hostname": "example.com", | ||
"city": "Vienna", | ||
"region": "Vienna", | ||
"country": "AT", | ||
"loc": "48.2085,16.3721", | ||
"org": "ASxxxx T-Mobile Austria GmbH", | ||
"postal": "nnnn", | ||
"timezone": "Europe/Vienna", | ||
"readme": "https://ipinfo.io/missingauth" | ||
} | ||
*/ | ||
if ( | ||
array_key_exists('org', $rawIspInfo) | ||
&& is_string($rawIspInfo['org']) | ||
&& !empty($rawIspInfo['org']) | ||
) { | ||
// Remove AS##### from ISP name, if present | ||
return preg_replace('/AS\\d+\\s/', '', $rawIspInfo['org']); | ||
} | ||
|
||
/* | ||
variant with valid token has json: | ||
{ | ||
"ip": "xxx.xxx.xxx.xxx", | ||
"hostname": "example.com", | ||
"city": "Vienna", | ||
"region": "Vienna", | ||
"country": "AT", | ||
"loc": "48.2085,16.3721", | ||
"postal": "1010", | ||
"timezone": "Europe/Vienna", | ||
"asn": { | ||
"asn": "ASxxxx", | ||
"name": "T-Mobile Austria GmbH", | ||
"domain": "t-mobile.at", | ||
"route": "xxx.xxx.xxx.xxx/xx", | ||
"type": "isp" | ||
}, | ||
"company": { | ||
"name": "XX", | ||
"domain": "example.com", | ||
"type": "isp" | ||
}, | ||
"privacy": { | ||
"vpn": true, | ||
"proxy": false, | ||
"tor": false, | ||
"relay": false, | ||
"hosting": false, | ||
"service": "" | ||
}, | ||
"abuse": { | ||
"address": "...", | ||
"country": "AT", | ||
"email": "[email protected]", | ||
"name": "XXX", | ||
"network": "xxx.xxx.xxx.xxx-xxx.xxx.xxx.xxx", | ||
"phone": "" | ||
}, | ||
"domains": { | ||
"total": 0, | ||
"domains": [ | ||
] | ||
} | ||
} | ||
*/ | ||
if ( | ||
array_key_exists('asn', $rawIspInfo) | ||
&& is_array($rawIspInfo['asn']) | ||
&& !empty($rawIspInfo['asn']) | ||
&& array_key_exists('name', $rawIspInfo['asn']) | ||
&& is_string($rawIspInfo['asn']['name']) | ||
) { | ||
// Remove AS##### from ISP name, if present | ||
return $rawIspInfo['asn']['name']; | ||
} | ||
} | ||
|
||
// Remove AS##### from ISP name, if present | ||
return preg_replace('/AS\\d+\\s/', '', $rawIspInfo['org']); | ||
return 'Unknown ISP'; | ||
} | ||
|
||
/** | ||
|
@@ -135,7 +209,7 @@ function getServerLocation() | |
return $serverLoc; | ||
} | ||
|
||
$json = file_get_contents('https://ipinfo.io/json'.getIpInfoTokenString()); | ||
$json = file_get_contents('https://ipinfo.io/json' . getIpInfoTokenString()); | ||
if (!is_string($json)) { | ||
return null; | ||
} | ||
|
@@ -151,7 +225,7 @@ function getServerLocation() | |
} | ||
|
||
$serverLoc = $details['loc']; | ||
$cacheData = "<?php\n\n\$serverLoc = '".addslashes($serverLoc)."';\n"; | ||
$cacheData = "<?php\n\n\$serverLoc = '" . addslashes($serverLoc) . "';\n"; | ||
file_put_contents(SERVER_LOCATION_CACHE_FILE, $cacheData); | ||
|
||
return $serverLoc; | ||
|
@@ -240,7 +314,7 @@ function calculateDistance($clientLocation, $serverLocation, $unit) | |
$dist = '<15'; | ||
} | ||
|
||
return $dist.' mi'; | ||
return $dist . ' mi'; | ||
} | ||
|
||
if ('km' === $unit) { | ||
|
@@ -249,7 +323,7 @@ function calculateDistance($clientLocation, $serverLocation, $unit) | |
$dist = '<20'; | ||
} | ||
|
||
return $dist.' km'; | ||
return $dist . ' km'; | ||
} | ||
|
||
return null; | ||
|
@@ -288,17 +362,17 @@ function sendResponse( | |
) { | ||
$processedString = $ip; | ||
if (is_string($ipInfo)) { | ||
$processedString .= ' - '.$ipInfo; | ||
$processedString .= ' - ' . $ipInfo; | ||
} | ||
|
||
if ( | ||
is_array($rawIspInfo) | ||
&& array_key_exists('country', $rawIspInfo) | ||
) { | ||
$processedString .= ', '.$rawIspInfo['country']; | ||
$processedString .= ', ' . $rawIspInfo['country']; | ||
} | ||
if (is_string($distance)) { | ||
$processedString .= ' ('.$distance.')'; | ||
$processedString .= ' (' . $distance . ')'; | ||
} | ||
|
||
sendHeaders(); | ||
|
Oops, something went wrong.