Merge branch 'general-devel' into sql_improve

This commit is contained in:
Lucas Nicodemus 2017-12-15 18:38:25 -07:00 committed by GitHub
commit 81db59d864
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 290 additions and 164 deletions

3
.github/CODE_OF_CONDUCT.md vendored Normal file
View file

@ -0,0 +1,3 @@
> By participating in the TShock for Terraria community, all members will adhere to maintaining decorum with respect to all humans, in and out of the community. Members will not engage in discussion that inappropriately disparages or marginalizes any group of people or any individual. Members will not attempt to further or advance an agenda to the point of being overbearing or close minded (such as through spreading FUD). Members will not abuse services provided to them and will follow the guidance of community leaders on a situational basis about what abuse consists of. Members will adhere to United States and international law. If members notice a violation of this code of conduct, they will not engage but will instead contact the leadership team on either the forums or Discord.
> Do not attempt to circumvent or bypass the code of conduct by using clever logic or reasoning (e.g., insulting Facepunch members, because they weren't directly mentioned here).

View file

@ -8,18 +8,6 @@ Please follow these simple requirements before posting a bug report:
- How to reproduce the issue
- Screenshots of the issue (if applicable)
### To build the source
Note: This includes the API by default. If you need only the API, you need to cd into that folder and do the following with the .sln file for the API. For those new to C#, the .sln and .csproj files contain the necessary definitions to do a complete source build using Microsoft or Mono build tools.
- Checkout the source.
- Initialize the submodules: ```git submodule update --init```
- Open the source in your favorite text editor that supports .NET building and press the build button OR
- Run ```msbuild TShock.sln``` in the root of the cloned folder on Windows in a 'Developer Command Prompt' OR
- Run ```xbuild TShock.sln``` in the root of the cloned folder on Unix.
Need help? Drop by Discord and we'll be happy to explain it with more words, step by step.
### TShock Additions
If something is better suited to be a plugin for TShock, rather than a TShock core feature, it should not be added! Project scope is at times questionable, though, so create an issue on Github for discussion first. If an issue is completely outside of the scope of TShock, it will be made clear in that issue what it is.
@ -33,13 +21,13 @@ _If a person makes a suggestion in Discord, capture the suggestion as a Github i
These guidelines are for all contributors.
* Create an issue first to suggest an improvement or feature addition to TShock.
* Active developers will then give a go/no go for implementation. This is scope related: if an issue is within the scope of TShock, it will be tagged 'pr-wanted.'
* After 'pr-wanted' has been added, an issue should be considered workable in a pull request fashion.
* If you, as a developer, want to claim an issue for a PR, as soon as possible start work and note that in both the original issue and the new PR. The 'pr-wanted' tag will remain but the active PR will become the center for discussion for your implementation.
* Active developers will then give a go/no go for implementation. This is scope related: if an issue is within the scope of TShock, it will be tagged 'Contribution Wanted.'
* After 'Contribution Wanted' has been added, an issue should be considered workable in a pull request fashion.
* If you, as a developer, want to claim an issue for a PR, as soon as possible start work and note that in both the original issue and the new PR. The 'Contribution Wanted' tag will remain but the active PR will become the center for discussion for your implementation.
* If a TShock core developer takes an issue, they'll be assigned to the issue. If your issue was taken by a TShock developer and you were actively developing it in a PR, you should _make it clear as soon as possible that a process error has been made_ so that the your development resources and our development resources aren't wasted.
* Please send a pull request with at least a sentence description and something meaningful as the title, not just the issue number you're fixing.
_The pr-wanted tag indicates an issue should be implemented. If an issue has a developer assigned, it indicates that they're working on it. When in doubt, ask where an issue is before starting work (so you don't waste time)!_
_The tag indicates an issue should be implemented. If an issue has a developer assigned, it indicates that they're working on it. When in doubt, ask where an issue is before starting work (so you don't waste time)!_
Even if you have write access to the repository, follow [Github flow](https://guides.github.com/introduction/flow/) when sending commits. Don't send commits directly to either ```master``` or ```general-devel``` unless those commits modify either the deploy scripts or non-code components. If it compiles, follow Github Flow.
@ -56,6 +44,7 @@ Required:
- When using static methods on primitives, use the CLR type. E.g. ```String.Format``` instead of ```string.Format```.
- Always use properties, not public fields.
- Document deprecations and fail compilation if they're included with ```[Obsolete("Use blah instead of blahx...", true)]```.
- Update the `CHANGELOG.md` file.
### Dev Team Guidelines

View file

@ -1,11 +1,23 @@
!!!!!! PLEASE FILL IN THE TEMPLATE BELOW THANK YOU VERY MUCH !!!!!!
## TShock version
If you don't need help, delete this template and just post an issue (feature requests and discussions and the like).
* TShock version:
* TShock build number (if known):
## Any stack traces that may have happened when the issue occurred
#### Reproduction steps (if applicable)?
1. Some step
2. Some other step
3. Some bigger step
4. This is the problem
## Steps to reproduce
#### Any stack traces or error messages (if known)?
```
PUT SUPER LONG ERROR MESSAGES IN THE TICK MARKS
```
## Screenshots of the problem, if applicable
#### Any screenshots?
!!!!!! PLEASE FILL IN THE TEMPLATE ABOVE THANK YOU VERY MUCH !!!!!!

View file

@ -1 +1,19 @@
<!-- Warning: If you create a pull request and wish to remain anonymous, you are highly advised to use Tails (https://tails.boum.org/) or a fresh git environment. We will *not* be able to help with anonymization after your pull request has been created. -->
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????
?????? HAVE YOU UPDATED THE CHANGELOG? ??????

View file

@ -33,6 +33,7 @@ This is the rolling changelog for TShock for Terraria. Use past tense when addin
* Removed `/restart` command. (@hakusaro)
* Removed `Permissions.updateplugins` permission. (@hakusaro)
* Removed REST `/v3/server/restart/` route and `/server/restart/` route. (@hakusaro)
* The "auth system" is now referred to as the initial setup system (what it actually is). This is better verbiage for basically all situations. Who really wants to turn off the "authentication system?" In addition, the system now makes it more clear what the point of it is, rather than that it grants permissions. (@hakusaro)
## TShock 4.3.25
* Fixed a critical exploit in the Terraria protocol that could cause massive unpreventable world corruption as well as a number of other problems. Thanks to @bartico6 for reporting. Fixed by the efforts of @QuiCM, @hakusaro, and tips in the right directioon from @bartico6.

309
README.md
View file

@ -1,119 +1,222 @@
<p align="center">
<img src="https://tshock.co/newlogo.png" alt="TShock for Terraria"><br />
<a href="https://travis-ci.org/Pryaxis/TShock"><img src="https://travis-ci.org/Pryaxis/TShock.png?branch=general-devel" alt="Build Status"></a><a href="https://ci.appveyor.com/project/hakusaro/tshock"><img src="https://ci.appveyor.com/api/projects/status/chhe61q227lqdlg1?svg=true" alt="AppVeyor Build Status"></a><br />
<hr />
<a href="https://travis-ci.org/Pryaxis/TShock"><img src="https://travis-ci.org/Pryaxis/TShock.svg?branch=general-devel" alt="Build Status"></a><a href="https://ci.appveyor.com/project/hakusaro/tshock"><img src="https://ci.appveyor.com/api/projects/status/chhe61q227lqdlg1?svg=true" alt="AppVeyor Build Status"></a><br />
</p>
[![OpenCollective](https://opencollective.com/tshock/backers/badge.svg)](#backers)
[![OpenCollective](https://opencollective.com/tshock/sponsors/badge.svg)](#sponsors)
TShock is a toolbox for Terraria servers and communities. That toolbox is jam packed with anti-cheat tools, server-side characters, groups, permissions, item bans, tons of commands, and limitless potential. It's one of a kind.
TShock is a server modification for Terraria, written in C#, and based upon the [Terraria Server API](https://github.com/NyxStudios/TerrariaAPI-Server). It uses JSON for configuration management, and offers several features not present in the Terraria Server normally.
* Download: [Stable](https://github.com/TShock/TShock/releases) or [Experimental](https://travis.tshock.co/).
* Read [the documentation](https://tshock.readme.io/) to quickly get up to speed.
* Join [Discord](https://discord.gg/XUJdH58) to get help, chat, and enjoy some swell Australian company.
* Download [other plugins](https://tshock.co/xf/index.php?resources/) to supercharge your server.
## :star: Quick Start
----
https://tshock.readme.io/docs/getting-started
## Table of Contents
## Features
* [New to TShock?](#new-to-tshock)
* [Developer's Guide](#developers-guide)
* [Background](#background)
* [Building](#building)
* [On Windows](#on-windows)
* [The Terraria Server API](#the-terraria-server-api)
* [TShock](#tshock)
* [On macOS](#on-macos)
* [On Linux](#on-linux)
* [On Unix](#on-unix)
* [The Terraria Server API](#the-terraria-server-api-1)
* [TShock](#tshock-1)
* [Working with Terraria](#working-with-terraria)
* [Code of Conduct](#code-of-conduct)
* MySQL support
* Permissions
* Multiple administrators
* Anti-cheat
* User registration
* Reserved slots
* User punishment (kicking, banning, muting)
* Server side characters
* JSON based configuration management
## New to TShock?
## Community
_These instructions assume Windows. If you're setting up on Linux or macOS, please refer to [the in-depth guide](https://tshock.readme.io/docs/getting-started) (and don't forget to install the *latest version* of `mono-complete` on Linux)._
Feeling like helping out? Want to find an awesome server? Some awesome plugins?
1. Download [the latest stable version](https://github.com/TShock/TShock/releases) and `unzip` the folder using your favorite unzip tool. Make sure that all of the files in the zip get into one folder. This is where your server will be stored. The file structure looks like this:
* [Website & Forums](https://tshock.co/xf/)
* [Contribute to our docs on readme.io](https://tshock.readme.io/)
* [Join our Discord chat (supports Android, iOS, Web, Mac, and Windows)](https://discord.gg/XUJdH58)
GeoIP.dat
Newtonsoft.Json.dll
OTAPI.dll
ServerPlugins\
|------BCrypt.Net.dll
|------HttpServer.dll
|------Mono.Data.Sqlite.dll
|------MySql.Data.dll
|------TShockAPI.dll
TerrariaServer.exe
sqlite3.dll
### Code of Conduct
1. Start `TerrariaServer.exe` and TShock will boot. Answer the startup questions, and you should be ready to roll. In the background, TShock made some folders for you. We'll come back to those later.
1. Startup Terraria. Connect to a `multiplayer` server via IP and enter `localhost` if you're doing this on your local computer. If you're doing it on another computer, you need its IP address.
1. Look at the server console for the _setup code_. Type `/setup [code]` (example: `/setup 12345`), then a space, then the code you see in the console in your game chat. Instead of chatting, you'll run a command on the server. This one makes you temporary admin. All commands are prefixed with `/` or `!` (to make them silent).
1. Use the in-game command `/register [password]` (example: `/register lovely-ashes`) to create an account. This gives you owner rights on your server, which you can configure more to your liking later. Your `character name` is your `account name`.
1. Login to your newly created account with `/login [account name] [password]` (example: `/login shank lovely-ashes`). You should see a login success message.
1. Turn off the setup system with `/setup` and your server is setup for initial use. TShock also created several files inside a new `tshock` folder. These files include `config.json` (our big configuration file), `sscconfig.json` (the server side characters configuration file), and `tshock.sqlite`. Don't lose your `tshock.sqlite` or you'll have to re-setup TShock.
1. You can now [customize your configuration](https://tshock.readme.io/docs/config-settings), build groups, ban items, and install more plugins.
## Developer's Guide
Whether you want to contribute to TShock by sending a pull request, customize it to suit your own elvish desires, or want to build your own plugin, this is the best starting point. By the end of this, you'll be able to build TShock from source, start to finish. More than that, though, you'll know how to start on the path of becoming an expert TShock developer.
But first, you need some background.
### Background
Terraria is a C# application written on the .NET framework using the XNA game framework. TShock is a mod for Terraria's server, which is also written in C# on the .NET framework. Some might compare TShock to hMod in the Minecraft world (the precursor to Bukkit and its server, CraftBukkit). This is a good comparison to make in how the underlying build process works. When the project started, TShock was injected directly into the decompiled source code for Terraria. Unlike Minecraft, Terraria is not obfuscated, which means that many variable names and inner workings are sanely-named out of the box. Now, TShock uses advanced techniques to operate.
TShock is, first and foremost, a plugin written for the server variant of the Terraria API, an unofficial construct originally built by `bladecoding`. `TShock` has been colloquially used to refer to both the plugin as well as the server and plugin together. Similarly, the Terraria API's client version was abandoned long ago, and development of the `Server` API led to the abbreviation `TSAPI`, for `Terraria Server API`. The plugin `TShock` is executed by the [Terraria Server API](https://github.com/Pryaxis/TerrariaAPI-Server), which is in turn bound to the `Open Terraria API`, more commonly `OTAPI`. The [Open Terraria API](https://github.com/DeathCradle/Open-Terraria-API) is maintained by [DeathCradle](https://github.com/DeathCradle).
Now, the way that `TShock` runs on `TSAPI` through `OTAPI` can be summarized as the following:
1. The Open Terraria API deeply integrates with Terraria by modifying the official server's binary directly. This is done through rewriting the Terraria bytecode, the [CIL code](https://en.wikipedia.org/wiki/Common_Intermediate_Language), using a patching tool designed by DeathCradle and tools from the Mono project. For `TSAPI`, additional modifications are done to support TSAPI specific features. This done through the `TShock Mintaka Patcher`.
2. The `Terraria Server API` uses hooks provided by `OTAPI` to provide higher level hooks as well as legacy hooks for existing TSAPI applications.
3. `TShock` is executed by `TSAPI`, uses hooks provided by both `TSAPI` and `OTAPI`, and provides even higher level hooks and support tools to other `TSAPI` plugins.
With all of this in mind, the primary goal when compiling TShock is to remember that only the second and third layers are required to be interacted with. The first layer, `OTAPI`, is provided pre-compiled through NuGet. The second layer, `TSAPI`, is provided in the `TShock` repository through a git submodule. Its primary home is the [Terraria Server API repository](https://github.com/Pryaxis/TerrariaAPI-Server).
Let's get started.
### Building
You need to get the source code. Using git, [clone this repository](https://help.github.com/articles/cloning-a-repository/).
The next set of instructions are the technical details to setup both the Terraria Server API and TShock. More importantly, the Terraria API steps here are written under the assumption that you are building TShock primarily. Before you start, you need to **initialize the git submodules** and then **update them**. You need to use the following commands to do this.
$ git submodule init
$ git submodule update
If you're using [GitHub Desktop](https://desktop.github.com), you need to perform additional steps. After cloning the TShock repository, go to the `Repository` menu and select `Open in Command Prompt`. If you don't have Git (not GitHub Desktop) installed, you can follow the prompts to to install Git for your command line. Once Git is installed, use this same process to get to the command prompt. Then, run the above commands.
#### On Windows
On Windows, you need to install [Visual Studio Community Edition](https://www.visualstudio.com/downloads/) or a better (more expensive) version of Visual Studio.
##### The Terraria Server API
1. Open the `TShock.4.OTAPI.sln` solution in the `TerrariaServerAPI` folder.
1. Set the `TShock.Modifications.Bootstrapper` project as the StartUp project.
1. Build the solution in either debug or release mode, depending on your preference. NuGet will automatically fetch the appropriate packages as a result of its magical powers.
1. Hit the "Start" button in Visual Studio to run the `TShock Mintaka Bootstrapper`.
1. Watch the output window and make sure that a non-zero number of modifications ran. When it completes, you have successfully bootstrapped `TShock Mintaka`.
1. Set the `TerrariaServerAPI` project as the StartUp project.
1. Build the solution in either debug or release mode, depending on your preference.
1. Close `TShock.4.OTAPI.sln` in Visual Studio.
You need to re-run the patcher any time `OTAPI` updates. You need to rebuild `TerrariaServerAPI` any time that the submodule in `TShock` gets changed, if you're doing this from inside the TShock repo. You also need to update the submodules (`git submodule update`) if they're out of date on a pull too.
##### TShock
1. Open the `TShockAPI.sln` solution in the root of the repository.
1. Build the solution. It should correctly download NuGet packages automatically and build against the aforementioned `TerrariaServerAPI` project you just built.
#### On macOS
1. Install [Homebrew](https://brew.sh) if you haven't already.
1. Install mono:
$ brew install mono
1. Verify that mono is available:
$ mono --version
Mono JIT compiler version 5.0.1.1 (2017-02/5077205 Sun Sep 17 18:29:46 BST 2017)
...
1. Proceed to the [unix build steps](#unix-build-steps) to continue.
#### On Linux
1. **DO NOT** just install mono from your package manager unless told to do so. If you do and it's out of date, you probably won't be able to successfully develop for TShock.
1. Follow the [official install instructions for mono](http://www.mono-project.com/download/). **DO** install `mono-complete` or you're missing components.
1. Proceed to the [unix build steps](#unix-build-steps) to continue.
#### On Unix
1. You need to get NuGet. Download the latest `nuget.exe` from [NuGet](https://www.nuget.org/downloads).
1. Make a `~/bin` folder if you don't have one.
$ mkdir ~/bin/
1. Set an environment variable to store if you plan to build in debug or release.
$ export BUILD_MODE=Debug
or
$ export BUILD_MODE=Release
##### The Terraria Server API
1. Perform a NuGet restore in the directory above `TerrariaServerAPI`.
$ mono ~/bin/nuget.exe restore ./TerrariaServerAPI/
1. Build the `TShock.4.OTAPI.sln` solution the configuration you chose:
$ xbuild ./TerrariaServerAPI/TShock.4.OTAPI.sln /p:Configuration=$BUILD_MODE
1. Run the `TShock Mintaka Bootstrapper` with the TShock modifications. If you don't use `/bin/bash` as your primary shell, you might want to temporarily switch to it, or the bootstrapper may fail.
$ cd ./TerrariaServerAPI/TShock.Modifications.Bootstrapper/bin/$BUILD_MODE/
$ mono TShock.Modifications.Bootstrapper.exe -in=OTAPI.dll \
-mod=../../../TShock.Modifications.**/bin/$BUILD_MODE/TShock.Modifications.*.dll \
-o=Output/OTAPI.dll
1. Verify that non-zero modifications ran successfully. Then, build the Terraria Server API executable.
$ cd ./../../../
$ xbuild ./TerrariaServerAPI/TerrariaServerAPI/TerrariaServerAPI.csproj \
/p:Configuration=$BUILD_MODE
You need to re-run the patcher any time `OTAPI` updates. You need to rebuild `TerrariaServerAPI` any time that the submodule in `TShock` gets changed, if you're doing this from inside the TShock repo. You also need to update the submodules (`git submodule update`) if they're out of date on a pull too.
##### TShock
1. Perform a NuGet restore in `TShockAPI` folder that contains `TShockAPI.sln`.
$ mono ~/bin/nuget.exe restore
1. Build TShock in the `BUILD_MODE` you set earlier.
$ xbuild ./TShockAPI.sln /p:Configuration=$BUILD_MODE
You're done!
### Working with Terraria
Working with Terraria in TShock and in other Terraria Server API plugins is different from most other APIs. Due to the nature of how OTAPI works, you have direct access to all public fields in the `Terraria` namespace. This means that you can access Terraria member methods directly. TShock and other plugins do this quite often, mostly to modify the game world, send data, and receive data. Calls to `Main` are one such example of direct access to Terraria. This is the equivalent to `net.minecraft.server` (NMS) calls in CraftBukkit.
You might find yourself wondering where these fields are. Pryaxis provides the decompiled [Sources](https://github.com/pryaxis/Sources) to Terraria's server, updated with each release. Note that these decompiled servers do not re-compile. The process of fixing the decompiles has proven to be nearly impossible in a reasonable timeframe with the modern Terraria Server.
Finally, you may be interested in developing other Terraria Server API plugins. The [TShockResources](https://github.com/TShockResources) organization has several plugins you can look at and build on. TShock is itself a plugin, and most plugins are open source. This gives you ample room to figure out where to go next.
Need help? Join us on [#tshock-programming in Discord](https://discord.gg/ABtrBaY).
## Code of Conduct
> By participating in the TShock for Terraria community, all members will adhere to maintaining decorum with respect to all humans, in and out of the community. Members will not engage in discussion that inappropriately disparages or marginalizes any group of people or any individual. Members will not attempt to further or advance an agenda to the point of being overbearing or close minded (such as through spreading FUD). Members will not abuse services provided to them and will follow the guidance of community leaders on a situational basis about what abuse consists of. Members will adhere to United States and international law. If members notice a violation of this code of conduct, they will not engage but will instead contact the leadership team on either the forums or Discord.
> Do not attempt to circumvent or bypass the code of conduct by using clever logic or reasoning (e.g., insulting Facepunch members, because they weren't directly mentioned here).
Please see the contributing file before sending pull requests.
## Download
* [Github Releases](https://github.com/TShock/TShock/releases)
* [Development Builds](https://travis.tshock.co/)
* [Plugins](https://tshock.co/xf/index.php?resources/)
* [Very, very old versions of TShock](https://github.com/TShock/TShock/downloads)
## Backers
Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/tshock#backer)]
<a href="https://opencollective.com/tshock/backer/0/website" target="_blank"><img src="https://opencollective.com/tshock/backer/0/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/1/website" target="_blank"><img src="https://opencollective.com/tshock/backer/1/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/2/website" target="_blank"><img src="https://opencollective.com/tshock/backer/2/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/3/website" target="_blank"><img src="https://opencollective.com/tshock/backer/3/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/4/website" target="_blank"><img src="https://opencollective.com/tshock/backer/4/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/5/website" target="_blank"><img src="https://opencollective.com/tshock/backer/5/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/6/website" target="_blank"><img src="https://opencollective.com/tshock/backer/6/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/7/website" target="_blank"><img src="https://opencollective.com/tshock/backer/7/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/8/website" target="_blank"><img src="https://opencollective.com/tshock/backer/8/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/9/website" target="_blank"><img src="https://opencollective.com/tshock/backer/9/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/10/website" target="_blank"><img src="https://opencollective.com/tshock/backer/10/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/11/website" target="_blank"><img src="https://opencollective.com/tshock/backer/11/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/12/website" target="_blank"><img src="https://opencollective.com/tshock/backer/12/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/13/website" target="_blank"><img src="https://opencollective.com/tshock/backer/13/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/14/website" target="_blank"><img src="https://opencollective.com/tshock/backer/14/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/15/website" target="_blank"><img src="https://opencollective.com/tshock/backer/15/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/16/website" target="_blank"><img src="https://opencollective.com/tshock/backer/16/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/17/website" target="_blank"><img src="https://opencollective.com/tshock/backer/17/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/18/website" target="_blank"><img src="https://opencollective.com/tshock/backer/18/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/19/website" target="_blank"><img src="https://opencollective.com/tshock/backer/19/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/20/website" target="_blank"><img src="https://opencollective.com/tshock/backer/20/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/21/website" target="_blank"><img src="https://opencollective.com/tshock/backer/21/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/22/website" target="_blank"><img src="https://opencollective.com/tshock/backer/22/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/23/website" target="_blank"><img src="https://opencollective.com/tshock/backer/23/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/24/website" target="_blank"><img src="https://opencollective.com/tshock/backer/24/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/25/website" target="_blank"><img src="https://opencollective.com/tshock/backer/25/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/26/website" target="_blank"><img src="https://opencollective.com/tshock/backer/26/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/27/website" target="_blank"><img src="https://opencollective.com/tshock/backer/27/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/28/website" target="_blank"><img src="https://opencollective.com/tshock/backer/28/avatar.svg"></a>
<a href="https://opencollective.com/tshock/backer/29/website" target="_blank"><img src="https://opencollective.com/tshock/backer/29/avatar.svg"></a>
## Sponsors
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/tshock#sponsor)]
<a href="https://opencollective.com/tshock/sponsor/0/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/1/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/2/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/3/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/4/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/5/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/6/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/7/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/8/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/9/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/9/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/10/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/10/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/11/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/11/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/12/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/12/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/13/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/13/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/14/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/14/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/15/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/15/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/16/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/16/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/17/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/17/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/18/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/18/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/19/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/19/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/20/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/20/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/21/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/21/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/22/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/22/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/23/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/23/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/24/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/24/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/25/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/25/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/26/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/26/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/27/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/27/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/28/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/28/avatar.svg"></a>
<a href="https://opencollective.com/tshock/sponsor/29/website" target="_blank"><img src="https://opencollective.com/tshock/sponsor/29/avatar.svg"></a>
> Do not attempt to circumvent or bypass the code of conduct by using clever logic or reasoning (e.g., insulting Facepunch members, because they weren't directly mentioned here).

View file

@ -220,7 +220,7 @@ namespace TShockAPI
ChatCommands.Add(cmd);
};
add(new Command(AuthToken, "auth")
add(new Command(SetupToken, "setup")
{
AllowServer = false,
HelpText = "Used to authenticate as superadmin when first setting up TShock."
@ -4736,7 +4736,7 @@ namespace TShockAPI
}
IEnumerable<string> cmdNames = from cmd in ChatCommands
where cmd.CanRun(args.Player) && (cmd.Name != "auth" || TShock.AuthToken != 0)
where cmd.CanRun(args.Player) && (cmd.Name != "auth" || TShock.SetupToken != 0)
select Specifier + cmd.Name;
PaginationTools.SendPage(args.Player, pageNumber, PaginationTools.BuildLinesFromTerms(cmdNames),
@ -4829,17 +4829,17 @@ namespace TShockAPI
);
}
private static void AuthToken(CommandArgs args)
private static void SetupToken(CommandArgs args)
{
if (TShock.AuthToken == 0)
if (TShock.SetupToken == 0)
{
if (args.Player.Group.Name == new SuperAdminGroup().Name)
args.Player.SendInfoMessage("The auth system is already disabled.");
args.Player.SendInfoMessage("The initial setup system is already disabled.");
else
{
args.Player.SendWarningMessage("The auth system is disabled. This incident has been logged.");
TShock.Utils.ForceKick(args.Player, "Auth system is disabled.", true, true);
TShock.Log.Warn("{0} attempted to use {1}auth even though it's disabled.", args.Player.IP, Specifier);
args.Player.SendWarningMessage("The initial setup system is disabled. This incident has been logged.");
TShock.Utils.ForceKick(args.Player, "The initial setup system is disabled.", true, true);
TShock.Log.Warn("{0} attempted to use the initial setup system even though it's disabled.", args.Player.IP);
return;
}
}
@ -4847,28 +4847,28 @@ namespace TShockAPI
// If the user account is already a superadmin (permanent), disable the system
if (args.Player.IsLoggedIn && args.Player.tempGroup == null && args.Player.Group.Name == new SuperAdminGroup().Name)
{
args.Player.SendSuccessMessage("Your new account has been verified, and the {0}auth system has been turned off.", Specifier);
args.Player.SendSuccessMessage("Your new account has been verified, and the {0}setup system has been turned off.", Specifier);
args.Player.SendSuccessMessage("You can always use the {0}user command to manage players.", Specifier);
args.Player.SendSuccessMessage("The auth system will remain disabled as long as a superadmin exists (even if you delete auth.lck).");
args.Player.SendSuccessMessage("The setup system will remain disabled as long as a superadmin exists (even if you delete setup.lock).");
args.Player.SendSuccessMessage("Share your server, talk with other admins, and more on our forums -- https://tshock.co/");
args.Player.SendSuccessMessage("Thank you for using TShock for Terraria!");
FileTools.CreateFile(Path.Combine(TShock.SavePath, "auth.lck"));
File.Delete(Path.Combine(TShock.SavePath, "authcode.txt"));
TShock.AuthToken = 0;
FileTools.CreateFile(Path.Combine(TShock.SavePath, "setup.lock"));
File.Delete(Path.Combine(TShock.SavePath, "setup-code.txt"));
TShock.SetupToken = 0;
return;
}
if (args.Parameters.Count == 0)
{
args.Player.SendErrorMessage("You must provide an auth code!");
args.Player.SendErrorMessage("You must provide a setup code!");
return;
}
int givenCode;
if (!Int32.TryParse(args.Parameters[0], out givenCode) || givenCode != TShock.AuthToken)
if (!Int32.TryParse(args.Parameters[0], out givenCode) || givenCode != TShock.SetupToken)
{
args.Player.SendErrorMessage("Incorrect auth code. This incident has been logged.");
TShock.Log.Warn(args.Player.IP + " attempted to use an incorrect auth code.");
args.Player.SendErrorMessage("Incorrect setup code. This incident has been logged.");
TShock.Log.Warn(args.Player.IP + " attempted to use an incorrect setup code.");
return;
}
@ -4880,7 +4880,7 @@ namespace TShockAPI
args.Player.SendInfoMessage("{0}user add <username> <password> owner", Specifier);
args.Player.SendInfoMessage("Creates: <username> with the password <password> as part of the owner group.");
args.Player.SendInfoMessage("Please use {0}login <username> <password> after this process.", Specifier);
args.Player.SendInfoMessage("If you understand, please {0}login <username> <password> now, and then type {0}auth.", Specifier);
args.Player.SendInfoMessage("If you understand, please {0}login <username> <password> now, and then type {0}setup.", Specifier);
return;
}

View file

@ -1230,7 +1230,7 @@ namespace TShockAPI
{ PacketTypes.ProjectileNew, HandleProjectileNew },
{ PacketTypes.TogglePvp, HandleTogglePvp },
{ PacketTypes.PlayerTeam, HandlePlayerTeam },
{ PacketTypes.TileKill, HandleTileKill },
{ PacketTypes.PlaceChest, HandleTileKill },
{ PacketTypes.PlayerKillMe, HandlePlayerKillMe },
{ PacketTypes.LiquidSet, HandleLiquidSet },
{ PacketTypes.PlayerSpawn, HandleSpawn },

View file

@ -57,7 +57,7 @@ namespace TShockAPI
/// <summary>VersionNum - The version number the TerrariaAPI will return back to the API. We just use the Assembly info.</summary>
public static readonly Version VersionNum = Assembly.GetExecutingAssembly().GetName().Version;
/// <summary>VersionCodename - The version codename is displayed when the server starts. Inspired by software codenames conventions.</summary>
public static readonly string VersionCodename = "Mintaka";
public static readonly string VersionCodename = "Alnitak";
/// <summary>SavePath - This is the path TShock saves its data in. This path is relative to the TerrariaServer.exe (not in ServerPlugins).</summary>
public static string SavePath = "tshock";
@ -841,8 +841,8 @@ namespace TShockAPI
CliParser.ParseFromSource(parms);
}
/// <summary>AuthToken - The auth token used by the /auth system to grant temporary superadmin access to new admins.</summary>
public static int AuthToken = -1;
/// <summary>SetupToken - The auth token used by the setup system to grant temporary superadmin access to new admins.</summary>
public static int SetupToken = -1;
private string _cliPassword = null;
/// <summary>OnPostInit - Fired when the server loads a map, to perform world specific operations.</summary>
@ -861,41 +861,41 @@ namespace TShockAPI
Config.ServerPassword = _cliPassword;
}
// Disable the auth system if "auth.lck" is present or a superadmin exists
if (File.Exists(Path.Combine(SavePath, "auth.lck")) || UserAccounts.GetUserAccounts().Exists(u => u.Group == new SuperAdminGroup().Name))
// Disable the auth system if "setup.lock" is present or a user account already exists
if (File.Exists(Path.Combine(SavePath, "setup.lock")) || (UserAccounts.GetUserAccounts().Count() > 0))
{
AuthToken = 0;
SetupToken = 0;
if (File.Exists(Path.Combine(SavePath, "authcode.txt")))
if (File.Exists(Path.Combine(SavePath, "setup-code.txt")))
{
Log.ConsoleInfo("A superadmin account has been detected in the user database, but authcode.txt is still present.");
Log.ConsoleInfo("TShock will now disable the auth system and remove authcode.txt as it is no longer needed.");
File.Delete(Path.Combine(SavePath, "authcode.txt"));
Log.ConsoleInfo("A superadmin account has been detected in the user database, but setup-code.txt is still present.");
Log.ConsoleInfo("TShock will now disable the initial setup system and remove setup-code.txt as it is no longer needed.");
File.Delete(Path.Combine(SavePath, "setup-code.txt"));
}
if (!File.Exists(Path.Combine(SavePath, "auth.lck")))
if (!File.Exists(Path.Combine(SavePath, "setup.lock")))
{
// This avoids unnecessary database work, which can get ridiculously high on old servers as all users need to be fetched
File.Create(Path.Combine(SavePath, "auth.lck"));
File.Create(Path.Combine(SavePath, "setup.lock"));
}
}
else if (!File.Exists(Path.Combine(SavePath, "authcode.txt")))
else if (!File.Exists(Path.Combine(SavePath, "setup-code.txt")))
{
var r = new Random((int)DateTime.Now.ToBinary());
AuthToken = r.Next(100000, 10000000);
SetupToken = r.Next(100000, 10000000);
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("TShock Notice: To become SuperAdmin, join the game and type {0}auth {1}", Commands.Specifier, AuthToken);
Console.WriteLine("This token will display until disabled by verification. ({0}auth)", Commands.Specifier);
Console.WriteLine("To setup the server, join the game and type {0}setup {1}", Commands.Specifier, SetupToken);
Console.WriteLine("This token will display until disabled by verification. ({0}setup)", Commands.Specifier);
Console.ResetColor();
File.WriteAllText(Path.Combine(SavePath, "authcode.txt"), AuthToken.ToString());
File.WriteAllText(Path.Combine(SavePath, "setup-code.txt"), SetupToken.ToString());
}
else
{
AuthToken = Convert.ToInt32(File.ReadAllText(Path.Combine(SavePath, "authcode.txt")));
SetupToken = Convert.ToInt32(File.ReadAllText(Path.Combine(SavePath, "setup-code.txt")));
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("TShock Notice: authcode.txt is still present, and the AuthToken located in that file will be used.");
Console.WriteLine("To become superadmin, join the game and type {0}auth {1}", Commands.Specifier, AuthToken);
Console.WriteLine("This token will display until disabled by verification. ({0}auth)", Commands.Specifier);
Console.WriteLine("TShock Notice: setup-code.txt is still present, and the code located in that file will be used.");
Console.WriteLine("To setup the server, join the game and type {0}setup {1}", Commands.Specifier, SetupToken);
Console.WriteLine("This token will display until disabled by verification. ({0}setup)", Commands.Specifier);
Console.ResetColor();
}

@ -1 +1 @@
Subproject commit 2c25bb68fde0e2c40a32d639ff79d614d3fb1580
Subproject commit 28200f7d4447ee275e85856f97eee58fa156ffc4