Skip to content

Commit

Permalink
Merge pull request #5 from Andreag00/dev
Browse files Browse the repository at this point in the history
Merge ShorteNB v1.2b2 into main
  • Loading branch information
Andreag00 authored Feb 18, 2024
2 parents cc38ce3 + d322b25 commit 1149abf
Show file tree
Hide file tree
Showing 24 changed files with 316 additions and 108 deletions.
Binary file added README-Images/Autoupdate.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed README-Images/DB.png
Binary file not shown.
Binary file modified README-Images/Example_Notification.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added README-Images/Login.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified README-Images/MNC1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified README-Images/MNC2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed README-Images/Password.png
Binary file not shown.
Binary file modified README-Images/Scriptable.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed README-Images/Username.png
Binary file not shown.
Binary file added README-Images/Welcome.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed README-Images/iCloud_Drive.png
Binary file not shown.
96 changes: 63 additions & 33 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@

A shortcut by @andreag00 on [Telegram](https://t.me/andreag00)/ag23900 on [Fibra Click](https://forum.fibra.click/u/ag23900)

Big thanks to [Abdel](https://github.com/ADeltaX) and [Simone](https://github.com/SimoneBortolin) for help with JavaScript, Marco for creating all the logos in the appropriate dimensions.
Big thanks to [Abdel](https://github.com/ADeltaX) and [Simone](https://github.com/SimoneBortolin) for help with the Shortcut's JavaScript code, MarcoGiaco for creating all the logos in the appropriate dimensions.

## Versione Italiana
Decodifica facilmente i dati dal CellID che si trova nel FieldTest di Apple (FTMInternal-4) mostrando anche dati sulla BTS a cui si è connessi presi da LTE Italy. **Supporta solo MNO italiani**

![Esempio di notifica generata da ShorteNB](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/Example_Notification.png)
![Esempio di notifica generata da ShorteNB](README-Images\Example_Notification.png)

Lo shortcut va eseguito dopo aver copiato il CellID dal FieldTest e decodifica eNB, CID e banda (se disponibile) dal CellID. Oltre a decodificare questi dati, esce un prompt per aprire velocemente la pagina con le info sulla BTS o la mappa centrata sulla posizione dell'utente su [LTE Italy](https://lteitaly.it) e salva i dati decodificati, georeferenziati, in una nota nell'app Note o in un file .txt su iCloud Drive. Inoltre nella notifica vengono mostrati dei dati aggiuntivi: nome, bande 4G e 5G e info sui tipi di 5G attivi della BTS a cui l'utente è collegato.
Lo shortcut va eseguito dopo aver copiato il CellID dal FieldTest e decodifica eNB, CID e banda (se disponibile) dal CellID.
Oltre a decodificare questi dati, all'utente viene presentato un prompt per aprire velocemente la pagina di LTE Italy contenente tutte le informazioni sulla BTS o, in alternativa, per aprire la mappa di LTE Italy centrata sulla posizione GPS dell'utente.
Inoltre, nella notifica vengono mostrati dei dati aggiuntivi sulla BTS a cui l'utente è collegato, quali nome, bande attive (sia in 4G che in 5G) e le caratteristiche del 5G attivo sull'eNB in questione.

L'ideale è usarlo in concomitanza con [questo shortcut](https://github.com/Andreag00/FTM-Opener), che apre il FieldTest **se aggiunto alla Home Screen**.

Expand All @@ -21,83 +23,111 @@ L'ideale è usarlo in concomitanza con [questo shortcut](https://github.com/Andr

**Perché ShorteNB funzioni è necessario installare [Scriptable](https://apps.apple.com/it/app/scriptable/id1405459188).**

Per importare lo shortcut è sufficiente scaricare e aprire il file .shortcut, oppure aprire il link iCloud presente nel file "link".
Per importare lo shortcut è sufficiente scaricare e aprire il [file .shortcut](ShorteNB.shortcut), oppure aprire il link iCloud presente nel [file "link"](link).

### Come effettuare il primo setup di ShorteNB

In concomitanza alla prima esecuzione dello shortcut, ShorteNB richiede l'impostazione di alcuni valori per funzionare correttamente.

Innanzitutto, ShorteNB chiede se Scriptable è stata installata, in quanto è un'app essenziale perché lo shortcut possa funzionare:

![Scriptable](https://raw.githubusercontent.com/Andreag00/ShorteNB/dev/README-Images/Scriptable.png)
![Scriptable](README-Images\Scriptable.png)

I due prompt successivi richiedono l'inserimento di username e password del proprio account di LTE Italy per permettere di mostrare i dati aggiuntivi ottenuti dalle API di LTE Italy:
Se l'app non è ancora stata installata, si apre la pagina dell'App Store per installarla, lasciando ShorteNB in esecuzione in background. Una volta terminata l'installazione e dopo essere tornati sull'app Shortcuts, proseguirà il setup.

![Inserimento username](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/Username.png)
![Inserimento password](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/Password.png)
Dopo il primo passo, si aprirà automaticamente Scriptable, che presenterà un prompt per inserire username e password di LTE Italy al fine di effettuare il login, poichè le loro API richiedono autenticazione:

Il prompt successivo permette di scegliere l'operatore della SIM principale dell'utente:
![Login](README-Images\Login.png)

![Scelta operatore SIM principale](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/MNC1.png)
**DISCLAIMER: Le credenziali vengono salvate all'interno del Keychain di Scriptable e lasciano il dispositivo solo per effettuare il login su LTE Italy, a cui vengono inviate in modo sicuro. Lo sviluppatore declina ogni responsabilità in caso di compromissione di dati personali.**

Il quinto prompt, molto similmente al precedente, permette di scegliere l'operatore della SIM secondaria dell'utente:
Il prompt successivo richiede di indicare l'operatore della SIM principale dell'utente:

![Scelta operatore SIM secondaria](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/MNC2.png)
![Scelta operatore SIM principale](README-Images\MNC1.png)

**WARNING:** Se l'utente sceglie iliad come operatore della SIM principale, l'operatore della SIM secondaria viene automaticamente impostato come WindTre, in modo che lo shortcut funzioni correttamente con il RAN Sharing su WindTre.
**WARNING:** La combinazione di operatori Tim+WindTre non è supportata in quanto entrambi usano eNB a 6 cifre e lo shortcut non può distinguere tra i due operatori, questa incompatibilità si riflette sul menu della scelta dell'operatore della SIM secondaria, che non permette di effettuare questa scelta.
In maniera simile alla richiesta precedente, l'utente deve ora indicare l'operatore della propria SIM secondaria, se presente:

Il quinto, e ultimo, prompt permette di scegliere se e come l'utente vuole che i dati che ShorteNB processa vengano salvati:
![Scelta operatore SIM secondaria](README-Images\MNC2.png)

**WARNING:** La combinazione di operatori Tim+WindTre non è supportata in quanto entrambi usano eNB a 6 cifre e lo shortcut non può distinguere tra i due operatori.
Questa incompatibilità si riflette sul menu della scelta dell'operatore della SIM secondaria, che non permette di selezionare tale combinazione.

![Scelta metodo di salvataggio](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/DB.png)
Dopo il primo setup, anche in caso di aggiornamento, non ci sarà bisogno di effettuare nuovamente il setup, in quanto vengono salvate all'interno del Keychain di Scriptable.

![Esempio di file generati nella cartella 'ShorteNB' su iCloud Drive](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/iCloud_Drive.png)
Per poter effettuare nuovamente il setup, è necessario eseguire il seguente comando all'interno di Scriptable:

Dopo il primo setup, anche in caso di aggiornamento, non ci sarà bisogno di reinserire queste scelte, in quanto vengono salvate su iCloud Drive e non vengono più modificate dopo il primo setup. In caso si volessero cambiare queste scelte è necessario cancellare il file "settings.json" nella cartella di ShorteNB presente su iCloud Drive.
```
Keychain.set("setup","false") # Forza un nuovo primo setup di ShorteNB
```

In alternativa è possibile modificare singolarmente le impostazioni di ShorteNB coi seguenti comandi:

```
Keychain.set("username"."abc123") # Inserire il proprio username al posto di abc123
Keychain.set("password"."abc123") # Inserire la propria password al posto di abc123
Keychain.set("MNC1"."222xx") # Inserire il Mobile Network Code (MNC) della SIM principale al posto di xx
Keychain.set("MNC2"."222yy") # Inserire il Mobile Network Code (MNC) della SIM secondaria al posto di yy
Keychain.remove("cookie") # Elimina i cookie che vengono salvati per forzare un nuovo login
```

## English Version
Easily decode data out of the CellID found in Apple's FTMInternal-4 together with extra data gathered from LTE Italy'APIs. **Italian MNOs only**

![Example notification generated by ShorteNB](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/Example_Notification.png)
![Example notification generated by ShorteNB](README-Images\Example_Notification.png)

Provided with the CellID as input from the clipboard, the shortcut decodes data out of it showing it in an alert together with extra data gathered from [LTE Italy](https://lteitaly.it)'s APIs. It also makes it easy to open [LTE Italy](https://lteitaly.it)'s map or the BTS’s info page on [LTE Italy](https://lteitaly.it) and saves geotagged data to a note or to a .txt file to be uploaded on iCloud Drive.
Provided with the CellID as input from the clipboard, the shortcut decodes data out of it showing it in an alert together with extra data gathered from [LTE Italy](https://lteitaly.it)'s APIs.
It also makes it easy to open [LTE Italy](https://lteitaly.it)'s map or the BTS’s info page.

Works great in conjunction with [this shortcut](https://github.com/Andreag00/FTM-Opener) that opens FTMInternal-4 when added to the Home Screen.
Works great in conjunction with [this shortcut](https://github.com/Andreag00/FTM-Opener), as it opens FTMInternal-4, but only when ran from the Home Screen.

### How to import into Shortcuts

#### Prerequisites

**For ShorteNB to work, [Scriptable](https://apps.apple.com/it/app/scriptable/id1405459188?l=en) is required.**

To import the shortcut, simply download the .shortcut file or open the link in the "link" file.
To import the shortcut, simply download the [.shortcut file](ShorteNB.shortcut) or open the link in the ["link" file](link).

### How to setup the shortcut

When executed for the very first time, the shortcut will prompt the user to input some data required for it to work properly.

First of all, ShorteNB will ask if Scriptable has been installed, as it's a required app for the shortcut to work at all:

![Scriptable](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/Scriptable.png)
![Scriptable](README-Images\Scriptable.png)

If the user has not yet installed the app, the Shortcut will automatically open Scriptable's App Store page so that the user can install it and leave ShorteNB running in the background. Once the app has been installed the user shall return to Shortcuts to finish the setup.

It will then ask to insert the user's LTE Italy username and password:
After this is done, Scriptable will open to present a prompt to insert the user's LTE Italy credentials, to be able to use their APIs which require authentication:

![Username prompt](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/Username.png)
![Password prompt](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/Password.png)
![Login prompt](README-Images\Login.png)

**DISCLAIMER: Credentials are stored in Scriptable's Keychain and leave the device only to login into LTE Italy in a secure way. The developer declines any responsibility in case of any violation of private data.**

The next prompt asks the user to choose their main SIM's operator:

![Main SIM prompt](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/MNC1.png)
![Main SIM prompt](README-Images\MNC1.png)

The fifth prompt, similarly to the previous one, is used to choose the user's secondary SIM's operator:
The fifth prompt, similarly to the previous one, is used to choose the user's secondary SIM's operator, if present:

![Secondary SIM prompt](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/MNC2.png)
![Secondary SIM prompt](README-Images\MNC2.png)

**WARNING:** If iliad is chosen as the main SIM's operator, the shortcut will automatically set the secondary SIM's operator as WindTre to show correct info when the user is connected to WindTre's Radio Access Network via RAN sharing.
**WARNING:** As having Tim and WindTre as operators is not supported (because both user 6-number eNBs and there is no way to distinguish them), if either of them is chosen as the main SIM's operator, the prompt for the secondary SIM will not allow the user to choose the other one.

The sixth, and last, prompt is to choose if and how the user wants the decoded data to be saved:
After the first setup is done, there's never gonna be any need to go through it again, as all settings, just like the user's credentials, are saved in Scriptable's Keychain. This means that they persist even through any update to the Shortcut.

If the user ever needs to go through the first setup again, it can do so by launching the following command in Scriptable:

```
Keychain.set("setup","false") # Forces a new execution of ShorteNB's first setup
```

![Data saving prompt](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/DB.png)
Alternatively, if the user wants to change settings granularly, it can do so by running the following commands:

![Example of the contents of the 'ShorteNB' folder in iCloud Drive](https://raw.githubusercontent.com/Andreag00/ShorteNB/main/README-Images/iCloud_Drive.png)
```
Keychain.set("username"."abc123") # Insert the username in place of abc123
Keychain.set("password"."abc123") # Insert the password in place of abc123
Keychain.set("MNC1"."222xx") # Insert the main SIM's Mobile Network Code (MNC) in place of xx
Keychain.set("MNC2"."222yy") # Insert the secondary SIM's Mobile Network Code (MNC) in place of yy
Keychain.remove("cookie") # Resets the saved cookies to forse a new login
```
52 changes: 29 additions & 23 deletions Scriptable-JS/ShorteNB-Core.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
// Variable Declaration

let CellID = CellID;
let CellID = "CellID";
CellID = parseInt(CellID.split('.').join("")) //Removed dots from any CellID hand-calculated on iOS calculator, kinda useless but still
let MNC1 = MNC1;
let MNC2 = MNC2;
let user = "username";
let password = "password";

var eNB, acteNB, CID, band, actMNC, cookies = "", MNO = "";
var eNB, acteNB, CID, band, actMNC, cookies = "", MNO = "";

// eNB/CID Calculation
Expand All @@ -16,38 +18,42 @@ CID = CellID % 256;

// Band Determination

if (eNB >= 10000 && eNB <= 99999) {
// Vodafone
band = [,20,,3,1,7,28,,,8,,20,,3,1,7][~~(CID / 10)];
switch(eNB.toString().length) {
case(5): {
actMNC = 22210;
band = [,20,,3,1,7,28,,,8,,20,,3,1,7][~~(CID / 10)];
MNO = "Vodafone";
} else if (eNB >= 100000 && eNB <= 999999) {
if (MNC1 == 22288 || MNC2 == 22288) {
actMNC = 22288
MNO = "WindTre";
if (eNB >= 502000 && Math.floor(eNB/1000) % 2 != 0) {
eNB -= 401000
} else if (eNB >= 502000) {
eNB -= 400000
break;
}
case(6): {
if(MNC1 != 2221 && MNC2 != 2221) {
actMNC = 22288;
MNO = "WindTre/ZefiroNet";
band = [3,20,7,1,38,"3+","1+","7+",28][~~(CID / 6)];
if (eNB >= 502000 && Math.floor(eNB/1000) % 2 != 0) {
eNB -= 401000;
} else if (Math.floor(eNB/1000) % 2 != 0) {
eNB -= 1000;
}
// WindTre
band = [3,20,7,1,38][~~(CID / 6)];
}
} else {
actMNC = 2221
MNO = "Tim";
// Tim
band = [,,7,1,3,,20,28,,,,,7,1,3][~~(CID / 10)];
actMNC = 2221;
MNO = "Tim";
band = [,,7,1,3,,20,28,,,,,7,1,3][~~(CID / 10)];
}
} else if(eNB >= 1000000 && eNB <= 1100000) {
break;
}
case(7): {
actMNC = 22250;
MNO = "iliad";
// iliad
band = [,,1,,"7 COVID",,7,28,3][~~(CID / 10)];
break;
}
default: {
Script.complete()
}
}

// Check if login has already been done, if not login
// Check if login has not already been done or if the cookie is malformed. If either of the two conditions is true, login again to fix the issue

if (Keychain.contains("cookie") == false || Keychain.get("cookie").startsWith("undefined")) {
let req = new Request("https://lteitaly.it/api/AV1.php");
Expand All @@ -70,4 +76,4 @@ if (Keychain.contains("cookie") == false || Keychain.get("cookie").startsWith("u

return{eNB, acteNB, CID, band, actMNC, MNO};

Script.complete();
Script.complete();
89 changes: 89 additions & 0 deletions Scriptable-JS/autoupdate.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<title>Nuova versione disponibile!</title>
<style>
* {
margin: 0;
padding: 0;
touch-action: manipulation;
outline: none;
}

body {
padding: 30px 25px 30px 30px;
background: #ffffff;
color: #000;
font-family: system-ui;
font-weight: 700;
letter-spacing: 0.025em;
}

h1 {
font-size: 40px;
font-weight: 800;
line-height: 40px;
margin-top: 10px;
}

h2 {
margin-top: 15px;
font-size: 30px;
font-weight: 700;
}

h3 {
margin-top: 15px;
margin-bottom: 30px;
}

p {
margin-top: 20px;
font-weight: 300;
}

.name {
color: #7c4cb2;
}

.blue {
color: #0a84ff;
font-weight: 800;
}

h1,
h2,
h3,
p,
button {
-webkit-touch-callout: none;
-webkit-user-select: none;
user-select: none;
}

@media (prefers-color-scheme: dark) {
body {
background-color: #000;
color: #f1f1f1;
}

p {
color: #f1f1f1;
}
}
</style>
</head>
<body>

<h2> È disponibile una nuova versione di <span class="name">ShorteNB</span>! </h2>

<p>È stata pubblicata una versione più recente dello Shortcut rispetto a quella installata <strong>(Dictionary (currentVersion) -> Dictionary (latestVersion))</strong> </p>

<h3>Changelog:</h3>
<p>Puoi leggere il changelog della nuova release su GitHub, premendo <span class="blue"><a href="https://www.github.com/Andreag00/ShorteNB/releases/tag/vDictionary (latestVersion)/">qui</a></span>.</p>

<p>Per procedere, premere sul tasto <span class="blue">Fine</span> in alto a destra.</p>
</body>
</html>
33 changes: 15 additions & 18 deletions Scriptable-JS/autoupdate.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
let currentVersion = "Dictionary (currentVersion)";
var bool = "";

let req = new Request("https://raw.githubusercontent.com/Andreag00/ShorteNB/main/version");
let data = await req.load();
latestVersion = data.toRawString();

if (latestVersion == currentVersion) {
bool = 1;
return{bool};
} else {
let req2 = new Request("https://raw.githubusercontent.com/Andreag00/ShorteNB/main/changelog");
let data2 = await req2.load();
changelog = data2.toRawString();
bool = 0;
return{bool,changelog,latestVersion};
}

let currentVersion = "Dictionary (currentVersion)";
var bool = "";

let req = new Request("https://raw.githubusercontent.com/Andreag00/ShorteNB/main/version");
let data = await req.load();
latestVersion = data.toRawString();

if (latestVersion == currentVersion) {
bool = 1;
return{bool};
} else {
bool = 0;
return{bool,latestVersion};
}

Script.complete();
6 changes: 6 additions & 0 deletions Scriptable-JS/checkSetup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
if (Keychain.contains("setup") == false) {
Keychain.set("setup","false")
}
let bool = Keychain.get("setup");
return{bool};
Script.complete();
Loading

0 comments on commit 1149abf

Please sign in to comment.