05/06/2021, 01:07 AM
(Última modificación: 22/06/2021, 12:44 AM por Hinami. Edited 14 times in total.)
Que tal, voy al grano.
Es un plugin que depende de una web (en desarrollo pero más o menos funcional), te creas un usuario, registras tus servers y luego tus admins y este se conecta a un plugin (modulo gRIP), y cada que se conecta un user este chequea a la web si el user es ADMIN o no, en caso de ser admin si esta vencido su admin no lo cargara y si esta activo le dará su admin.
Aclaro;
El plugin actualmente envía el STEAMID del user y se basa en eso, pero de igual manera podrían registrar un nombre en la web y editar el plugin en caso de ser nosteam enviar el nombre y si es steam el steamid. - soporte steam/nosteam (steamid/nick + setinfo)
Es un plugin/web aun en desarrollo el cual posteo para saber si sirve correctamente, de ser así voy a seguir el proyecto cuando tenga tiempo libre, por eso notaran a veces la falta de mensajes para servir errores o avisar que algo se ejecuto, o bien cosas aun sin funcionabilidad, con el tiempo dejare todas las fuentes.
La web es sencilla, y lo hice lo más sencilla posible así que no salgan con enviar cosas al mail o registros por fb, gmail, etc.
---------------------
web provisional: https://admin.svlmexico.com/login (EJEMPLO)
aca se crea un user, server's y admins.
Plugin:
https://github.com/Chris4589/panel_grip/..._alter.sma (Versión oficial donde se ve cada cambio)
Modulo + Inc:
https://github.com/Chris4589/panel_grip
Fuente Backend:
https://github.com/Chris4589/admin-panel...el-backend
Fuente Frontend:
https://github.com/Chris4589/admin-panel...l-frontend
LEEME ANTES DE USAR: https://github.com/Chris4589/admin-panel.../README.md
Dentro del plugin deben editar 2 lineas, el cual les pide un usuario y una contraseña para poder hacer peticiones al server, que contraseña & que usuario? el que debieron crear en el url provisional mencionado anteriormente.
Según yo y lo dicho por metita usando el modulo grip debería andar sin problemas, en la parte web como mencione aun me faltan las alertas pero deje un clg para los que presionan f12 y les gusta saber que rollo.
El plugin esta escrito así por querer, el diseño no es el mejor porque no es mi área, solo dios sabe como se ve en una pantalla grande la mía es chika, fin.
- NO SE QUE TAN RAPIDO TRAIGA LA DATA, YA QUE EL SERVER ESTA NY -
- el plugin no va a servir si no instalan el modulo, una alternativa a gRIP es CURL pero no voy a hacer el plugin con esa versión -
- El plugin depende del modulo, en caso se descubran errores con el no se podría seguir adelante con esto -
Creditos:
Mía - Recomendación en la paleta de colores, recomendacion del ssl y tsl
Totopizza - Recomendación en la paleta de colores
metita - modulo gRIP, opinión e información sobre el modulo
Flys - Ayuda a comprender el modulo
In-line - Creador del modulo
ArisH - Un detallito en angular
svlmexico - VPS para la instalación de docker y despliegue e idea del plugin
Roccoxx y r0ma - por guapos
Luzbe - testeo y pruebas
Jonas (MXS) - cloud ssl
Sinaloense - cert y key
de acá saque los includes
https://c-s.net.ua/forum/topic90058.html
SON LIBRES DE PODER USAR EL PANEL, PERO EVITEN SER RATAS Y PONER QUE LO HICIERON USTEDES (DIRIGIDO A VENEZOLANOS EN GENERAL).
Es un plugin que depende de una web (en desarrollo pero más o menos funcional), te creas un usuario, registras tus servers y luego tus admins y este se conecta a un plugin (modulo gRIP), y cada que se conecta un user este chequea a la web si el user es ADMIN o no, en caso de ser admin si esta vencido su admin no lo cargara y si esta activo le dará su admin.
Aclaro;
El plugin actualmente envía el STEAMID del user y se basa en eso, pero de igual manera podrían registrar un nombre en la web y editar el plugin en caso de ser nosteam enviar el nombre y si es steam el steamid. - soporte steam/nosteam (steamid/nick + setinfo)
Es un plugin/web aun en desarrollo el cual posteo para saber si sirve correctamente, de ser así voy a seguir el proyecto cuando tenga tiempo libre, por eso notaran a veces la falta de mensajes para servir errores o avisar que algo se ejecuto, o bien cosas aun sin funcionabilidad, con el tiempo dejare todas las fuentes.
La web es sencilla, y lo hice lo más sencilla posible así que no salgan con enviar cosas al mail o registros por fb, gmail, etc.
---------------------
web provisional: https://admin.svlmexico.com/login (EJEMPLO)
aca se crea un user, server's y admins.
Plugin:
https://github.com/Chris4589/panel_grip/..._alter.sma (Versión oficial donde se ve cada cambio)
Código PHP:
#include <admin_panel>
/*
native get_roleUser(id, dest[], len);
*/
var const authUser[] = "user"; //cambiar
var const authPassword[] = "pass"; //cambiar
var const urlBase[] = "https://admin.svlmexico.com";
var const kickReason[] = "Contraseña Invalida!";
var authToken[400], idServer;
var bool:authLoged;
var Trie:trieVencimiento, Trie:trieRole;
var fechaVencimiento[33][32], roleUser[33][32];
function plugin_end() {
TrieDestroy(trieVencimiento);
TrieDestroy(trieRole);
}
function accessUser(id)
{
remove_user_flags(id);
var userAuthid[32], userName[32], userPassword[50], index = -1;
get_user_authid(id, userAuthid, charsmax(userAuthid));
get_user_name(id, userName, charsmax(userName));
get_user_info(id, "_pw", userPassword, charsmax(userPassword));
static flags;
static authid[44];
static access;
static password[32];
static role[32];
static vencimiento[32];
for(var i = 0; i < admins_num(); i++)
{
flags = admins_lookup(i, AdminProp_Flags);
admins_lookup(i, AdminProp_Auth, authid, charsmax(authid));
if (flags & FLAG_AUTHID) {
if (equal(authid, userAuthid)) {
if (TrieGetString(trieRole, userAuthid, role, charsmax(role))) {
copy(roleUser[id], charsmax(roleUser[]), role);
}
if (TrieGetString(trieVencimiento, userAuthid, vencimiento, charsmax(vencimiento))) {
copy(fechaVencimiento[id], charsmax(fechaVencimiento[]), vencimiento);
}
index = i;
break;
}
}
else if (flags & FLAG_TAG) {
if (equal(authid, userName)) {
if (TrieGetString(trieRole, userName, role, charsmax(role))) {
copy(roleUser[id], charsmax(roleUser[]), role);
}
if (TrieGetString(trieVencimiento, userName, vencimiento, charsmax(vencimiento))) {
copy(fechaVencimiento[id], charsmax(fechaVencimiento[]), vencimiento);
}
index = i;
break;
}
}
}
if (index != -1) {
access = admins_lookup(index, AdminProp_Access);
var userFlags[32];
get_flags(access, userFlags, charsmax(userFlags));
server_print("[gRIP] flags: %s", userFlags);
server_print("[gRIP] role: %s", roleUser[id]);
server_print("[gRIP] vencimiento: %s", fechaVencimiento[id]);
if (flags & FLAG_NOPASS) {
set_user_flags(id, read_flags(userFlags));
server_print("[gRIP] Admin: %s", userName);
} else {
admins_lookup(index, AdminProp_Password, password, charsmax(password));
if (equal(password, userPassword)) {
set_user_flags(id, read_flags(userFlags));
server_print("[gRIP] Admin Pass: %s", userName);
} else {
if (flags & FLAG_KICK) {
server_print("[gRIP] Kick: %s", userName);
server_cmd("kick #%i ^"(%s)^"", get_user_userid(id), kickReason);
return PLUGIN_HANDLED;
}
}
}
} else {
server_print("[gRIP] User: %s", userName);
set_user_flags(id, read_flags("z"));
}
return PLUGIN_CONTINUE;
}
/*
function client_authorized(id) {
return accessUser(id);
}
*/
function give_admins() {
var GripResponseState:responseState = grip_get_response_state();
if (responseState != GripResponseStateSuccessful) {
server_print("Response Status Failed: [ %d ]", responseState);
return;
}
var GripHTTPStatus:status = grip_get_response_status_code();
if (!(GripHTTPStatusOk <= status <= GripHTTPStatusPartialContent)) {
server_print("Code Status [ %d ]", status);
return;
}
var responses[1024];
var GripJSONValue:body = grip_json_parse_response_body(responses, charsmax(responses));
if (body == Invalid_GripJSONValue) {
server_print("La respuesta esperada no es un JSON: %s", responses);
return;
}
if (isError(body)) {
server_print("Hubo un error en la peticion a node.");
return;
}
var GripJSONValue:msg = grip_json_object_get_value(body, "msg");
if (!isArrayValid(msg)) {
server_print("No hay admins creados");
return;
}
var role[32], authid[32], flags[32], createdAt[50], password[50], vencimiento[50], bool:is_steam;
for(var i = 0; i < grip_json_array_get_count(msg); i++)
{
var GripJSONValue:value = grip_json_array_get_value(msg, i);
grip_json_object_get_string(value, "role", role, charsmax(role));
grip_json_object_get_string(value, "authid", authid, charsmax(authid));
grip_json_object_get_string(value, "password", password, charsmax(password));
grip_json_object_get_string(value, "flags", flags, charsmax(flags));
grip_json_object_get_string(value, "createdAt", createdAt, charsmax(createdAt));
grip_json_object_get_string(value, "vencimiento", vencimiento, charsmax(vencimiento));
is_steam = grip_json_object_get_bool(value, "steam");
admins_push(authid, password, read_flags(flags), read_flags( is_steam ? "ce" : "ab"));
TrieSetString(trieVencimiento, authid, vencimiento);
TrieSetString(trieRole, authid, role);
server_print("/*******************************************/");
server_print("Admin cargado.");
server_print("role: [ %s ]", role);
server_print("authid: [ %s ]", authid);
server_print("flags: [ %s ]", flags);
server_print("type: [ %s ]", is_steam ? "ce" : "ab");
server_print("createdAt: [ %s ]", createdAt);
server_print("/*******************************************/");
grip_destroy_json_value(value);
}
grip_destroy_json_value(msg);
grip_destroy_json_value(body);
}
function getAllAdmins() {
if (!authLoged) {
server_print("No te haz logueado a tu cuenta en %s.", urlBase);
return;
}
var url[200];
formatex(url, charsmax(url), "%s/admins/?fk_ServerId=%d", urlBase, idServer);
var GripRequestOptions:options = grip_create_default_options();
grip_options_add_header(options, "Content-Type", "application/json");
grip_options_add_header(options, "token", authToken);
grip_request(url, Empty_GripBody, GripRequestTypeGet, "give_admins", options);
grip_destroy_options(options);
}
function handlerAuth() {
var GripHTTPStatus:status = grip_get_response_status_code();
if (!(GripHTTPStatusOk <= status <= GripHTTPStatusPartialContent)) {
server_print("Code Status [ %d ]", status);
return;
}
var responses[1024];
var GripJSONValue:body = grip_json_parse_response_body(responses, charsmax(responses));
if (body == Invalid_GripJSONValue) {
server_print("La respuesta esperada no es un JSON: %s", responses);
return;
}
if (isError(body)) {
server_print("Hubo un error en la peticion a node.");
return;
}
var GripJSONValue:msg = grip_json_object_get_value(body, "msg");
if (msg == Invalid_GripJSONValue) {
server_print("La respuesta de msg no es un JSON");
return;
}
grip_json_object_get_string(msg, "token", authToken, charsmax(authToken));
server_print("your server token is [ %s ]", authToken);
if (!authLoged) {
getServer();
}
authLoged = true;
grip_destroy_json_value(msg);
grip_destroy_json_value(body);
}
function renew_token() {
if (!authLoged) {
server_print("No te haz logueado a tu cuenta en %s.", urlBase);
return;
}
var url[200];
formatex(url, charsmax(url), "%s/auth/renew/", urlBase);
var GripRequestOptions:options = grip_create_default_options();
grip_options_add_header(options, "Content-Type", "application/json");
grip_options_add_header(options, "token", authToken);
grip_request(url, Empty_GripBody, GripRequestTypeGet, "handlerAuth", options);
grip_destroy_options(options);
}
function auth() {
var url[200];
formatex(url, charsmax(url), "%s/auth/", urlBase);
server_print("%s", url);
var GripJSONValue:object = grip_json_init_object();
grip_json_object_set_string(object, "user", authUser);
grip_json_object_set_string(object, "password", authPassword);
var GripBody:body = object != Invalid_GripJSONValue ? grip_body_from_json(object) : Empty_GripBody;
var GripRequestOptions:options = grip_create_default_options();
grip_options_add_header(options, "Content-Type", "application/json");
grip_options_add_header(options, "User-Agent", "Grip");
grip_request(url, body, GripRequestTypePost, "handlerAuth", options);
grip_destroy_body(body);
grip_destroy_options(options);
grip_destroy_json_value(object);
}
function client_putinserver(id) {
roleUser[id][0] = EOS;
return accessUser(id);
}
function handlerServer() {
var GripHTTPStatus:status = grip_get_response_status_code();
if (!(GripHTTPStatusOk <= status <= GripHTTPStatusPartialContent)) {
server_print("Code Status [ %d ]", status);
return;
}
var responses[1024];
var GripJSONValue:body = grip_json_parse_response_body(responses, charsmax(responses));
if (body == Invalid_GripJSONValue) {
server_print("La respuesta esperada no es un JSON: %s", responses);
return;
}
if (isError(body)) {
server_print("Hubo un error en la peticion a node.");
return;
}
var GripJSONValue:msg = grip_json_object_get_value(body, "msg");
if (msg == Invalid_GripJSONValue) {
server_print("La respuesta de msg no es un JSON");
return;
}
idServer = grip_json_object_get_number(msg, "id");
server_print("your server id is [ %d ]", idServer);
grip_destroy_json_value(msg);
grip_destroy_json_value(body);
getAllAdmins();
}
function getServer() {
var url[200], address[50];
get_cvar_string("net_address", address, charsmax(address));
formatex(url, charsmax(url), "%s/servers/Ip?ipServer=%s", urlBase, address);
server_print("%s", url);
var GripRequestOptions:options = grip_create_default_options();
grip_options_add_header(options, "Content-Type", "application/json");
grip_options_add_header(options, "token", authToken);
grip_request(url, Empty_GripBody, GripRequestTypeGet, "handlerServer", options);
grip_destroy_options(options);
}
function OnStart() {
admin_init(param1, param2, param3);
trieVencimiento = TrieCreate( );
trieRole = TrieCreate( );
authLoged = false;
auth();
set_task(120.0, "renew_token", _, _, _, "d");
}
function CreateNatives() {
register_native("get_roleUser", "handler_roleUser", 0);// get_roleUser(id, dest[], len);
}
public handler_roleUser(plugin, params)
{
set_string(2, roleUser[get_param(1)], get_param(3));
return -1;
}
https://github.com/Chris4589/panel_grip
Fuente Backend:
https://github.com/Chris4589/admin-panel...el-backend
Fuente Frontend:
https://github.com/Chris4589/admin-panel...l-frontend
LEEME ANTES DE USAR: https://github.com/Chris4589/admin-panel.../README.md
Dentro del plugin deben editar 2 lineas, el cual les pide un usuario y una contraseña para poder hacer peticiones al server, que contraseña & que usuario? el que debieron crear en el url provisional mencionado anteriormente.
Según yo y lo dicho por metita usando el modulo grip debería andar sin problemas, en la parte web como mencione aun me faltan las alertas pero deje un clg para los que presionan f12 y les gusta saber que rollo.
El plugin esta escrito así por querer, el diseño no es el mejor porque no es mi área, solo dios sabe como se ve en una pantalla grande la mía es chika, fin.
- NO SE QUE TAN RAPIDO TRAIGA LA DATA, YA QUE EL SERVER ESTA NY -
- el plugin no va a servir si no instalan el modulo, una alternativa a gRIP es CURL pero no voy a hacer el plugin con esa versión -
- El plugin depende del modulo, en caso se descubran errores con el no se podría seguir adelante con esto -
Creditos:
Mía - Recomendación en la paleta de colores, recomendacion del ssl y tsl
Totopizza - Recomendación en la paleta de colores
metita - modulo gRIP, opinión e información sobre el modulo
Flys - Ayuda a comprender el modulo
In-line - Creador del modulo
ArisH - Un detallito en angular
svlmexico - VPS para la instalación de docker y despliegue e idea del plugin
Roccoxx y r0ma - por guapos
Luzbe - testeo y pruebas
Jonas (MXS) - cloud ssl
Sinaloense - cert y key
de acá saque los includes
https://c-s.net.ua/forum/topic90058.html
SON LIBRES DE PODER USAR EL PANEL, PERO EVITEN SER RATAS Y PONER QUE LO HICIERON USTEDES (DIRIGIDO A VENEZOLANOS EN GENERAL).