devinspitz / pavlovrconwebserver Goto Github PK
View Code? Open in Web Editor NEWPavlov rcon server administration over ssh tunnel
Pavlov rcon server administration over ssh tunnel
Switching the Map is not working (SwitchMap).
Only Rotate Map is working.
And great work man!
(Using Windows Build v0.0.2)
Just replace the update when its finished. May every 2 mins or something?
Add servers to users so they can only send commands to server who are in there list.
Like the maps Gui but with actual changes on the pavlovserver.
Filter and show the ๐ of the maps
By far the most useful feature of pavlov-bot is the SND ;matchsetup command. This requires your system to know about players and in particular teams. That is you need to have way to pre-define all of the players on a team regardless if they are currently playing. Once you have defined a pair of teams, the ;matchsetup command pushes the two teams to the correct sides requested using SwitchTeam then runs ResetSnd. There is no problem with issuing SwtichTeam for players who are already on the right team or aren't actually playing in that match.
Your team setup system needs to be able to quickly accommodate adding Ringers to a team. These are players who are only playing for a match and don't become permanent team members.
Again feel free to steal from pavlov-bot
Impossible right now
Add a feature to parse the itemlist for any custom weapons and add them to a seperate tab in the giveitem menu each time a new map is loaded.
Add the functionality to restart /stop / start the server over SSH.
Single and multi server command to update pavlov server
just remove the errors after 24 h so it don't overflow over time
if not i will buy u a game or something it would be very helpful to me and i dont think it would be that involved but i could be wrong
Need caching of the players etc.
The new list of maps are like this:
datacenter
sand
bridge
containeryard
prisonbreak (Siberia)
hospital (Zombies map)
killhouse
range
tutorial
stalingrad (PC only)
santorini
ogcontainers
station (PC BETA only)
industry (PC BETA only)
haguenau (Shack RC only)
so i know if i am to set a DNS , A Record for a IP you would typically use a default port like :80 or :443 so i was going to set my DNS on my domain with an A Record with the name of cloud but i get **bad request** i think there used to be more in the instructions about this and i cant seem to find them now so i just change 5001 to 80 ? the older version i used before that used nginx said it used 80 and 443 for something
Show a public player list.
For that cache the players.
Add a new button to execute multiple commands in succession. It would generate a .txt file with all of the commands u want to run then save it and add it to a list so the user can select it and run it.
Add a function to host a pavlov server on a specific server with SSH.
Or even to host a Tournament?
Thats not sure and here for the future
Just ignore the part with and after the hashtag when reading files
In case the server don't get the last ones
May let the user decide with a zoom button on the top etc. So its easy handling.
Also make all dropdowns and lists bigger so they are easier to choose from etc.
As for community server which are not have admins online all the time :)
Add swagger so we have a API documentation.
To make unbane usfull i need to know which players are banned.
Also if i just save the banned from the gui i dont have the ones directly done on the server.
Add the default pavlov maps to the modal
So i ran into this shortly after install and and i tried adjusting the perms to no luck
https://cloud.jtwp.org/index.php/s/ExKjTXy9neXKzjt
so placed into development mode and got a more detailed error report
SftpPathNotFoundException: No such file
Renci.SshNet.Sftp.SftpSession.RequestOpen(string path, Flags flags, bool nullOnError)
Renci.SshNet.Sftp.SftpFileStream..ctor(ISftpSession session, string path, FileMode mode, FileAccess access, int bufferSize)
Renci.SshNet.SftpClient.Create(string path)
PavlovRconWebserver.Services.RconService.GetFile(PavlovServer server, string path) in RconService.cs
sftp.Connect();
//check if file exist
if (!sftp.Exists(path))
try
{
sftp.Create(path);
}
catch (SftpPermissionDeniedException e)
{
sftp.Disconnect();
throw new CommandException(server.Name + ": Could not create file: " + path + " " + e.Message);
}
PavlovRconWebserver.Models.PavlovServerGameIni.ReadFromFile(PavlovServer pavlovServer, RconService rconService) in PavlovServerGameIni.cs
public List<PavlovServerGameIniMap> MapRotation { get; set; } =
new List<PavlovServerGameIniMap>(); // example string = (MapId="UGC1758245796", GameMode="GUN")
public async Task<bool> ReadFromFile(PavlovServer pavlovServer, RconService rconService)
{
var GameIniContent = await rconService.GetFile(pavlovServer,
pavlovServer.ServerFolderPath + FilePaths.GameIni);
var lines = GameIniContent.Split("\n");
var first = true; // cause the first line is to ignore
foreach (var line in lines)
{
if (first)
PavlovRconWebserver.Controllers.PavlovServerController.EditServerSettings(int serverId) in PavlovServerController.cs
viewModel.serverId = serverId;
Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor+TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
System.Runtime.CompilerServices.ValueTaskAwaiter<TResult>.GetResult()
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask<IActionResult> actionResultValueTask)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)
Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
Microsoft.AspNetCore.Builder.Extensions.MapMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
so then i tried
root@rs-zap763817-1:/home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer# chown steam /home/steam/pavlovserver1/Pavlov/Saved/Config/LinuxServer/Game.ini
still the same cannot create file tried this
no luck so then
chown -R steam:steam /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer
no luck
i even tried
chown -R steam:steam /root/root/pavlovserver/Pavlov/Saved/Config/LinuxServer
im out of ideas lol
Adding the ability in the panel to change the embed name of the website so other people dont know this goes through RCON.
implement
AddMod {UniqueID} -Adds a mod ID to the mods.txt file
RemoveMod {UniqueID} -Removes a mod ID to the mods.txt file
ItemList -Shows available items for GiveItem command
skins:
clown, prisoner, naked, farmer, russian, nato, us, soviet, german
The software should reset the server and save a log that the server had to be reset.
Will just check the server if datacenter is not in the rotation.
I see a few issues with the map chooser method you are using.
Suggest having a pre-defined short list of maps you are hosting. Faster to choose, less bloat over time. Then move your current map chooser a level deeper as a "request" system. Admins and mods can use directly to add to the hosted list and other users perhaps can just make requests.
Or you will need to follow Dave's official server system and clean up the maps, then re-download them (slow) later on.
Limited functions:
What will work:
Show the service logs of the pavlov servers so you can track issues down from there.
thanks to invicta_nz just added this to handle in the projects :D
ok so time bans ? they don't seem to work currently , iv also checked with another group that uses the tool exclusively and for a wile they get the same thing
it is not a typical error (we are still in dev mode )
this is the popup
{"readyState":4,"responseText":"Renci.SshNet.Common.SftpPathNotFoundException: No such file\n at Renci.SshNet.Sftp.SftpSession.RequestOpen(String path, Flags flags, Boolean nullOnError)\n at Renci.SshNet.Sftp.SftpFileStream..ctor(ISftpSession session, String path, FileMode mode, FileAccess access, Int32 bufferSize)\n at Renci.SshNet.SftpClient.Create(String path)\n at PavlovRconWebserver.Services.RconService.GetFile(PavlovServer server, AuthType type, String path, SshServer sshServer) in /root/pavlovSource/PavlovRconWebserver/Services/RconService.cs:line 217\n at PavlovRconWebserver.Services.RconService.SendCommand(PavlovServer server, String command, Boolean deleteUnusedMaps, Boolean getFile, String writeContent, Boolean writeFile) in /root/pavlovSource/PavlovRconWebserver/Services/RconService.cs:line 501\n at PavlovRconWebserver.Services.RconService.GetServerBansFromBlackList(PavlovServer server, List
1 banlist) in /root/pavlovSource/PavlovRconWebserver/Services/RconService.cs:line 324\n at PavlovRconWebserver.Controllers.RconController.RemoveBanPlayer(Int32 serverId, String steamId) in /root/pavlovSource/PavlovRconWebserver/Controllers/RconController.cs:line 202\n at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask1 actionResultValueTask)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()\n--- End of stack trace from previous location where exception was thrown ---\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|24_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()\n--- End of stack trace from previous location where exception was thrown ---\n at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)\n at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)\n at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)\n at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)\n at Microsoft.AspNetCore.Builder.Extensions.MapMiddleware.Invoke(HttpContext context)\n at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)\n at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)\n at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)\n\nHEADERS\n=======\nConnection: keep-alive\nContent-Type: application/x-www-form-urlencoded; charset=UTF-8\nAccept: */*\nAccept-Encoding: gzip, deflate\nAccept-Language: en-US,en;q=0.5\nCookie: .AspNetCore.Antiforgery.N_7Mmx87XUM=CfDJ8AlysNExmKVGuB10wue04O-oMXYZCfQSzwoXRMuJOAGKxoBRij5klUz63i3VPITyxvxKkx73oLXysqzeFpnhp0XNwObAplQMMM0MS9nW74bU3mt7J-H4g2AOlZP3LKtssb0BIgghlFbgvmRDOW0KJDg; .AspNetCore.Antiforgery.hmGEr0CMAUQ=CfDJ8BYbFs7wBu5PgTQiG_rX0JeX9GrkxM1Du78qMqrguJVudlazWlg6VSEpRsJQiV_ir7Mksm_bym57GZxvJXS6lliLFlSIL6c1bCD6woOWvgYRk9fwfljYpBBeJILtQUMcknMRvZ6nhBxtuzkfcz838Jg; .AspNetCore.Identity.Application=CfDJ8BYbFs7wBu5PgTQiG_rX0JeUPqXFJBsfWUuQA7Hrk0xVr4Rqvjn9-HVJj2-mtmtEJqTop--uAcRLJsNeThysXPX7LcoZUmyBQTC-njvg-tp4EJOuQFRCb-AxBx5ofZYq_p4azdyHZ5ldTizq6rrKAWar8Ag1gBeuopgB2KDhwnn0ihUC_nHQii9Mi__dghlq7lRYHwwP1gWXU5VQOInX4G_2ORE-x5l5IgSny_o61_X7Ct9_mC933Cpk5wa-ClMHw023qmztXaJD0Wkbd10iGU2y0bC3Qg-lfS_YBrCRkFTVze8lv-K7jiIlZU0hEVobJyZ6CZECrB5ccowYZntQCftDa4kUQxQB6itLE8ZELfHV8Ff-WUNpxGVnvnrlSIWNLPwHMp2PDsm92_6ZW3JeZaoTKwCgeGc5-gY3egDBPKtC29LUIsGsl6mejzpRe-Cr75NP6EtoGgcp932ykLE8lRD4bFjXBJs2vlhM63_PCtIOEFqEmxMlx7NHLm3e3x1RVjkx90gOlZ7bftFmOwAJ5xdbLXvAx4GmqlET0fq0VeMVquSYSguxh5wdCb63yoppY6hfOcfPGb0oPh1t7TsaC8PUI7Urb8TVI06Xmwi_6WLCcm18hJizvp8d2NR6Oh1bUlzE8wsJvScYAsdUx8sZtasB9XzXqIsrG0J1bm6n0wwAyN1tqSrwLY-CSiyixZW6kMFuKOYv6SqNLm77z2ISWJkQITq8tr8UsHLIBL6j_eWIGSx2e0ql-UHYyqzttJH4jgpx8eFUlR_ZUTPcoONeogFmGMIEhKQHB_79rGS6m-mRQg8sA7emyfl0viGvN5yCLb1Ke1VAZSkh3UCNKQH1LsCQv2hoAwp3b4wY8CpuZeR6\nHost: 147.189.173.79:5001\nReferer: http://147.189.173.79:5001/Rcon\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0\nDNT: 1\nOrigin: http://147.189.173.79:5001\nContent-Length: 36\nX-Requested-With: XMLHttpRequest\n","status":500,"statusText":"Internal Server Error"}
Originally posted by @oneSALTycracker in #42 (comment)
give a way to edit Game.ini
Pull the user that is logged in STEAM:ID to make the giveitem button or execute command button apply to the local-player instead of having to select every time
Changing a gamemode of a map will generate a not showen duplicate.
Workaround: reload the page :(
Give the player the possibility to abuse persons on the gui.
Show them the players they played with etc. so they can choose which one was a cheater.
Do not do anything just collect it for the admins so they can react.
needs a hotfix
Where you can see the stats of all players and the teams.
Favorite system for the maps so they are on the start of the modal
Currently it seems that all users can run all commands. This is way too powerful. Suggest stealing User/Captain/Mod/Admin user structure from pavlov-bot.
Hello dear devinSpitz,
my suggestion for improvement would be a ban list and time management, for example. 1 minute ban, 5 min, 10 min, 30 min, 1 hour, maybe you write in yourself how long a ban should go and make the player list bigger or simpler
a player list with info about the stats Kill Death how many hours someone has been playing.
Add start stop restart and enable disable functionality
Add SetLimitedAmmoType
There should be an option for multiserver commands.
Like:
restart
stop
start
changeMap
resetSND
rotateMap
give team cash
It would be better for tournaments and stuff where you want to start at the same time on multiple server etc.
Make a gui
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.