Replace master branch with local files
This commit is contained in:
commit
875a53f499
60 changed files with 21637 additions and 0 deletions
71
backend/src/admin_tool.cpp
Normal file
71
backend/src/admin_tool.cpp
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
#include <drogon/drogon.h>
|
||||
#include <drogon/orm/DbClient.h>
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
|
||||
using namespace drogon;
|
||||
using namespace drogon::orm;
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
if (argc < 2) {
|
||||
std::cerr << "Usage: " << argv[0] << " -promote-admin <username>" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::string command = argv[1];
|
||||
|
||||
if (command != "-promote-admin" || argc != 3) {
|
||||
std::cerr << "Usage: " << argv[0] << " -promote-admin <username>" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
std::string username = argv[2];
|
||||
|
||||
// Get database config from environment or use defaults
|
||||
std::string dbHost = std::getenv("DB_HOST") ? std::getenv("DB_HOST") : "postgres";
|
||||
std::string dbName = std::getenv("DB_NAME") ? std::getenv("DB_NAME") : "streaming";
|
||||
std::string dbUser = std::getenv("DB_USER") ? std::getenv("DB_USER") : "streamuser";
|
||||
std::string dbPass = std::getenv("DB_PASS") ? std::getenv("DB_PASS") : "streampass";
|
||||
|
||||
// Create database client directly
|
||||
auto dbClient = DbClient::newPgClient(
|
||||
"host=" + dbHost + " port=5432 dbname=" + dbName +
|
||||
" user=" + dbUser + " password=" + dbPass,
|
||||
1 // connection number
|
||||
);
|
||||
|
||||
try {
|
||||
// Check if user exists
|
||||
auto result = dbClient->execSqlSync(
|
||||
"SELECT id, username, is_admin FROM users WHERE username = $1",
|
||||
username
|
||||
);
|
||||
|
||||
if (result.empty()) {
|
||||
std::cerr << "Error: User '" << username << "' not found." << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool isAdmin = result[0]["is_admin"].as<bool>();
|
||||
if (isAdmin) {
|
||||
std::cout << "User '" << username << "' is already an admin." << std::endl;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Promote to admin
|
||||
dbClient->execSqlSync(
|
||||
"UPDATE users SET is_admin = true WHERE username = $1",
|
||||
username
|
||||
);
|
||||
|
||||
std::cout << "Successfully promoted '" << username << "' to admin." << std::endl;
|
||||
return 0;
|
||||
|
||||
} catch (const DrogonDbException& e) {
|
||||
std::cerr << "Database error: " << e.base().what() << std::endl;
|
||||
return 1;
|
||||
} catch (const std::exception& e) {
|
||||
std::cerr << "Error: " << e.what() << std::endl;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue