Tinfoilwebserver

Myster-Tee Myster-Tee
Dépôt créer le : 09/12/2020
Release du : 27/02/2026 v2.1.0
Forks: 31 Watcher: 0 174
Choisir une liste...
FR

TinfoilWebServer

Désignation des marchandises

Construisez votre boutique Nintendo Switch personnalisée.

TinfoilWebServer est une application de serveur web crossplateforme simple et efficace visant à servir vos paquets Nintendo Switch personnels (NSP, NSZ, XCI, etc.) àTinfoil.

Tous les fichiers desservis doivent avoir "[titleid]" dans le nom du fichier pour être reconnus par Tinfoil pour apparaître dans "New Games", "New DLC" et "New Updates".
Documentation officielle Tinfoilhere.

Télécharger

Publication de la pagehere.

** Si vous téléchargez à l'aide de macOS Safari, téléchargez votre paquet souhaité en cliquant avec le bouton droit sur le lien et en sélectionnant "Télécharger le fichier lié", de sorte que Safari ne décompresse pas automatiquement le paquet. Ensuite, vous pouvez le décompresser en utilisant l'utilitaire d'archives intégré de macOS.*

Exigences

Les exigences dépendent de la version que vous choisissez de télécharger.

Cadre de référence

Cette version est légère, mais vous devrez installer leASP.NET Core Runtime 8.X.Xavant de lancer le serveur.

Version indépendante du cadre

Pas d'exigences, mais un poids lourd.

Exécution du serveur

  1. Décompresser la distribution souhaitée à un emplacement de votre choix
  2. Créer unTinfoilWebServer.config.jsonselon vos besoins
  3. Démarrer le serveur selon la distribution choisie

Par défaut, leTinfoilWebServer.config.jsonfichier sera recherché dans le répertoire actuel du programme.
Un modèle deTinfoilWebServer.config.jsonpeut être téléchargé dans les actifs de la page de diffusionhere.

Windows

Exécuter

TinfoilWebServer.exe

Linux et macOS

Exécuter

./TinfoilWebServer

Version portable - Windows, Linux et macOS (Cadre requis)

Exécuter

dotnet TinfoilWebServer.dll

Options de ligne de commande

-c, --config        Custom location of the configuration file.
-d, --currentDir    Change the current directory.
-s, --winService    Run the server as a Windows service.
--sha256            Compute SHA256 passwords interactively.
--help              Display this help screen.
--version           Display version information.

Configuration de Tinfoil sur votre commutateur

  1. LancementInformations
  2. Allez àNavigateur de fichiers
  3. Appuyez sur[-]bouton pour ajouter un nouveau serveur
  4. JeuProtocolevers HTTP ou HTTPS selon la configuration du serveur
  5. JeuHébergementà tout hôte pointant vers votre serveur (ou vers l'adresse IP du serveur)
    L'adresse IP du serveur est enregistrée au démarrage du serveur.
  6. Si l'authentification est activée, définissezNom d'utilisateuretMot de passeà l'un des utilisateurs autorisés
  7. JeuTitreà un nom de votre choix

Télécharger la note de vitesse: avoir une vitesse de téléchargement/installation de ~10 Mo de Tinfoil est normal.
Cette faible vitesse est uniquement due à la limitation matérielle de Nintendo Switch, et n'est pas du tout liée à une limitation de serveur.

Format TinfoilWebServer.config.json

{
  "ServedDirectories": string[],        // ex: ["C:\\SomeDir\\WindowsDirWithPackages", "/dev/sda1/LinuxDirWithPackages", ".", "/Users/yourname/Documents/macOSDirWithPackages"] !!! Don't forget to escape backslashes with another one !!! No need to escape spaces
  "StripDirectoryNames": boolean,       // «true» to remove directories names in URLs of served files, «false» otherwise
  "ServeEmptyDirectories": boolean,     // «true» to serve empty directories, «false» otherwise (has no effect when "StripDirectoryNames" is «true»)
  "AllowedExt": string[],               // List of file extensions to serve (default is ["xci", "nsz", "nsp", "xcz", "zip"])
  "MessageOfTheDay": string,            // The default welcome message displayed when Tinfoil successfully contacts the server
  "ExpirationMessage": string,          // The default displayed message when a user account has expired
  "CustomIndexPath": string,            // The path to a custom JSON file to be merged with the served index
  "Cache": {
    "AutoDetectChanges": boolean,       // «true» to auto-refresh the list of served files when a file system change is detected in the served directories, «false» otherwise
    "PeriodicRefreshDelay": string      // Periodic delay for forcing the refresh of served files, format is «[d'.']hh':'mm':'ss['.'fffffff]», ex: "01:30:15" for 1h30m15s, set «null» to disable
  },
  "Authentication": {
    "Enabled": boolean,                 // «true» to enable authentication, «false» otherwise
    "WebBrowserAuthEnabled": boolean,   // «true» to enable the native Web Browser login prompt when not authenticated (has no effect when "Authentication.Enabled" is «false»)
    "PwdType": string,                  // Defines the format of user passwords. Can be either "Sha256" or "Plaintext". Default is "Sha256".
    "Users": [                          // List of allowed users (use a comma as separator for declaring multiple users)
      {
        "Name": string,                 // The user name
        "Pwd": string,                  // The password
        "MaxFingerprints": number,      // The maximum number of fingerprints allowed for this user (default is 1)
        "MessageOfTheDay": string,      // Custom message for the user
        "ExpirationDate" : string,      // Expiration date in ISO 8601 format, ex: "2022-12-31T23:59:59Z". Set to «null» to disable expiration date.
        "ExpirationMessage" : string,   // Custom message for the user when account has expired
        "CustomIndexPath": string       // The path to a custom JSON file for this user to be merged with the served index
      }
    ]
  },
  "FingerprintsFilter": {
    "Enabled" : boolean,                // «true» to enable fingerprints validation filter, «false» otherwise (default is true)
    "FingerprintsFilePath": string      // The path to the file where to save allowed fingerprints
    "MaxFingerprints" : number          // The maximum number of global fingerprints allowed
  },
  "Blacklist": {
    "Enabled": boolean,                 // Enable or disable the IP blacklisting feature
    "FilePath": string,                 // The path of the file where to save blacklisted IPs
    "MaxConsecutiveFailedAuth": number, // The maximum number of consecutive unauthenticated requests to reach for blacklisting an IP
    "IsBehindProxy": boolean            // When set to true, incoming IP address will be taken fromFo "X-Forwarded-For" header otherwise it will be taken from TCP/IP protocol
  },
  "Kestrel": {                          // Web server configuration, see https://learn.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel/endpoints?view=aspnetcore-6.0 for more information
    "Endpoints": {
      "Http": {
        "Url": string                   // The HTTP host (or IP address) and port that the server should listen to (ex: "http://0.0.0.0:80", "http://*:80/", "http://somedomain.com")
      },
      "HttpsInlineCertAndKeyFile": {    // See https://learn.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel/endpoints?view=aspnetcore-6.0 for more examples and possibilities
        "Url": string,                  // The HTTPS host (or IP address) and port that the server should listen to (ex: "https://somedomain.com", "https://somedomain.com:8081")
        "Certificate": {
          "Path": string,               // The path to the certificate file (ex: "MyCertificate.cer")
          "KeyPath": string             // The path to the private key file (ex: "MyPrivateKey.key")
        }
      }
    },
    "Limits": {
      "MaxConcurrentConnections": number, // Sets the maximum number of open connection
    }
  },
  "Logging": {                          // See https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-6.0 for more information
    "LogLevel": {
      "Default": string                 // The global log level, can be one of "Trace", "Debug", "Information", "Warning", "Error", "Critical", or "None"
    },
    "Console": {                        // See https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-6.0 for more information
      "LogLevel": {
        "Default": string
      },
      "FormatterOptions": {
        "Format": string,               // The custom log format (see below for more information)
        "ExceptionFormat": string       // The custom exception format (see below for more information)
	  }	
    },
    "File": {                           // See https://github.com/nreco/logging#how-to-use for more information
      "Path": string,
      "Append": boolean,
      "MinLevel": string,
      "FileSizeLimitBytes": number,
      "MaxRollingFiles": number,
      "FormatterOptions": {
        "Format": string,               // The custom log format (see below for more information)
        "ExceptionFormat": string       // The custom exception format (see below for more information)
	  }	
    }
  }
}

Lorsque"Kestrel"la configuration est omise, le serveur écoute par défauthttp://localhost:5000/ethttps://localhost:5001.

Index personnalisé

Spécifier un index personnalisé dans le fichier de configuration permet de définir (ou combiner) toute propriété supplémentaire décrite dansTinfoil Custom Index documentation.
Par exemple, en utilisant le JSON ci-dessous, il est possible d'enrichir les fichiers servis avec des fichiers personnaliséshors des répertoires desservis.

{
  "files": ["https://some/other/url1", "https://some/gdrive/folder"] // Will be combined with served files
}

Liste noire IP

Le format de fichier est texte, une ligne par IP sur liste noire. Les lignes vides seront ignorées. Utilisez # pour écrire des commentaires.

Empreintes digitales

Une empreinte digitale se compose d'un identifiant unique Nintendo Switch. Tinfoil émet une empreinte digitale seulement lorsque vous demandez l'index, mais pas lorsque vous demandez des fichiers. Spécifier ainsi les empreintes digitales en configurationn'empêche pas un utilisateur de télécharger des fichiers.

Lorsque les empreintes digitales sont autorisées à la fois à l'échelle mondiale et au niveau de l'utilisateur, le serveur vérifie la validité d'une empreinte digitale parmi les empreintes digitales autorisées et les empreintes digitales autorisées à l'échelle mondiale.

Format de journal personnalisé

Vous pouvez spécifier un format de journal personnalisé en utilisant des mots-clés entre les appareils.
Certains mots clés acceptent les options dans le format de{Quelques mots clés:Quelques options}.

Exemple :

"Format" : "> {Date:yyyy-MM-dd@HH:mm:ss}-{LogLevel:U}-{Category}: {Message}{NewLine}{Exception}"

Mots clés supportés pourPrésentationchamp:

  • {Date:<Option>}: la date du journal, option optionnelle:a valid date format
  • {NewLine} : ajoute une nouvelle ligne selon le système actuel (\r, \n ou \r\n)
  • {Message} : le message journal
  • {Catégorie}: la catégorie log (.NET Namespace)
  • {EventId} : l'identifiant de l'événement journal
  • {LogLevel:<Option>}: le niveau du journal. Options optionnelles:
    • SU: classe supérieure de niveau log court
    • SL: court log niveau minuscule
    • U: niveau log case supérieure
    • L: log niveau cas inférieur
  • {Exception}: l'exception formatée selon laExceptionFormatchamp

Mots clés supportés pourExceptionFormatchamp:

  • {Date:<Option>}: même que{Date}mot-clé dePrésentationchamp
  • {NewLine} : même{Nouvelle ligne}mot-clé dePrésentationchamp
  • {Message} : le message d'exception
  • {Type} : nom du type d'exception
  • {StackTrace}: trace de la pile d'exception

Fonctionnant comme un service Windows

Le serveur peut être exécuté comme un service Windows. Pour cela, le service doit d'abord être enregistré en utilisantsc.exe, PowerShellNew-Servicecmdlet ou toute autre méthode.
N'oubliez pas de spécifier le--winServiceparamètre de ligne de commande lors de l'enregistrement du service.

Remarque : par défaut, les services Windows sont exécutés dans%WinDir%\System32, vous pouvez modifier le répertoire actuel en utilisant--courantDirparamètre de ligne de commande.

# PowerShell service registration example
New-Service TinfoilWebServer -BinaryPathName "<FullPathToExe> --winService --config ""<SomePathToConfigJson>"" --currentDir ""<SomePathToCurrentDir>"""

Partage des sauvegardes de jeu

TinfoilWebServer peut servir les sauvegardes de jeu en permettant l'extension de fichier "zip" (par défaut).
Pour partager vos propres sauvegardes, copiez les sauvegardes de TinfoilSDCard/switch/tinfoil/saves/**/*.zipà l'un des répertoires desservis, en conservant le nom du fichier original.

Considérations et recommandations en matière de sécurité

Si vous envisagez d'ouvrir votre serveur sur le réseau Internet (WAN) plutôt que sur le réseau local (LAN), je vous recommanderais fortement de:

  1. Configuration HTTPS seulement
  2. Permettre l'authentification pour restreindre l'accès à certains utilisateurs spécifiques
  3. Servez des répertoires contenant uniquement des fichiers Nintendo Switch (sans données personnelles)
  4. Restriction des extensions de fichiers desservis aux fichiers Nintendo Switch
  5. ConfigurationStripDirectoryNomsréglagevraipour cacher votre organisation d'arborescence de dossiers personnels
  6. Activer la fonctionnalité de blacklistng IP
  7. Activer la fonction de filtrage des empreintes digitales
  8. JeuAuthentification. Type Pwdà "Sha256" pour éviter de stocker les mots de passe de l'utilisateur dans votre fichier de configuration

Coq

Prérequis: installerDocker.

Construire l'image

Par défautDockerfileest fourni pour construire l'image.

Pour construire l'image, à partir de la racine du dépôt, exécutez la commande suivante :

docker build -t tinfoilwebserver:latest .

Dans cette image, TinfoilWebServer est installé dans/appet le répertoire de travail est défini à/working_dir.
TinfoilWebServer recherchera le fichier de configuration dans/working_dir/TinfoilWebServer.config.json.

Exécuter l'image

Pour exécuter cette image avec succès, vous devrez :

  1. Carte un volume du système de fichiers hôte vers/working_dir(exemple:-v C:\TinfoilWebServer:/working_dir).
  2. Placez votreTinfoilWebServer.config.jsondans le répertoire cartographié (exemple:C:\TinfoilWebServer\TinfoilWebServer.config.json).
  3. ModifierTinfoilWebServer.config.jsonet définirKestrel.Endpoints.Http.Urlsection vers un hôte HTTP* et un port écoutés (exemple:http://*:5000/).
  4. Carter le port HTTP choisi sur un port exposé du conteneur (exemple:-p 80:5000).

* Ne pas utiliserhôte localhôte, sinon le serveur ne sera accessible que depuis le conteneur lui-même.

Exemple de commande :

docker run -d --name=TinfoilWebServer -p 80:5000 -v C:\TinfoilWebServer:/working_dir tinfoilwebserver:latest

Projets similaires

Si vous voulez créer votre NSP Shop personnel, consultez ces autres projets similaires :

Contributeurs GitHub

danifunker
danifunker
1 contributions
Myster-Tee
Myster-Tee
153 contributions
Darkangeel-hd
Darkangeel-hd
1 contributions
rogerluan
rogerluan
1 contributions