baseline 7.4 as-is produzione
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.md]
|
||||
trim_trailing_whitespace = false
|
||||
|
||||
[*.yml]
|
||||
indent_size = 2
|
||||
@@ -0,0 +1,41 @@
|
||||
APP_ENV=production
|
||||
APP_DEBUG=false
|
||||
APP_KEY=lsXxrP1d6nUGpfGO6vQqezNy1KCuDD3o
|
||||
APP_URL=http://vanguard.test
|
||||
|
||||
LOG_CHANNEL=stack
|
||||
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=localhost
|
||||
DB_DATABASE=vanguard
|
||||
DB_USERNAME=homestead
|
||||
DB_PASSWORD=secret
|
||||
DB_PREFIX=vg_
|
||||
|
||||
BROADCAST_DRIVER=log
|
||||
CACHE_DRIVER=file
|
||||
QUEUE_DRIVER=sync
|
||||
SESSION_DRIVER=database
|
||||
SESSION_LIFETIME=120
|
||||
|
||||
REDIS_HOST=127.0.0.1
|
||||
REDIS_PASSWORD=null
|
||||
REDIS_PORT=6379
|
||||
|
||||
MAIL_DRIVER=mail
|
||||
MAIL_FROM_NAME=Vanguard
|
||||
MAIL_FROM_ADDRESS=vanguard@test.dev
|
||||
MAIL_HOST=smtp.mailtrap.io
|
||||
MAIL_PORT=2525
|
||||
MAIL_USERNAME=null
|
||||
MAIL_PASSWORD=null
|
||||
MAIL_ENCRYPTION=null
|
||||
|
||||
PUSHER_APP_ID=
|
||||
PUSHER_APP_KEY=
|
||||
PUSHER_APP_SECRET=
|
||||
PUSHER_APP_CLUSTER=mt1
|
||||
|
||||
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
|
||||
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
* text=auto
|
||||
*.css linguist-vendored
|
||||
*.scss linguist-vendored
|
||||
*.less linguist-vendored
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
.DS_Store
|
||||
/node_modules
|
||||
/public/hot
|
||||
/public/storage
|
||||
/storage/*.key
|
||||
/vendor
|
||||
/.idea
|
||||
/.vscode
|
||||
/.vagrant
|
||||
Homestead.json
|
||||
Homestead.yaml
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
.env
|
||||
.phpunit.result.cache
|
||||
.php_cs.cache
|
||||
/documentation
|
||||
|
||||
# Extra - specifici di questo progetto
|
||||
/phpmyadmin
|
||||
/phpmyadminOLD
|
||||
*.sql
|
||||
_ide_helper.php
|
||||
logfile.log
|
||||
/tempbck
|
||||
@@ -0,0 +1,5 @@
|
||||
AddHandler application/x-httpd-php74 .php .php5 .php4 .php3
|
||||
|
||||
RewriteEngine On
|
||||
RewriteCond %{REQUEST_URI} !^/public/
|
||||
RewriteRule ^(.*)$ /public/$1 [L]
|
||||
@@ -0,0 +1 @@
|
||||
2CPLJb5u9H0dlnYRdtjq9jLlNGUbwhFmgAPH3O6pSkA.2XMZrd1Cn9N7Uuityqhu8ICHrWyqMrxX50OEpCCpPRQ
|
||||
@@ -0,0 +1 @@
|
||||
SrQF12HzvchupaNzuStyuWLbYB62yf010FLcYhyzdkM.2XMZrd1Cn9N7Uuityqhu8ICHrWyqMrxX50OEpCCpPRQ
|
||||
@@ -0,0 +1,21 @@
|
||||
<?php␍
|
||||
# FileName="WADYN_MYSQLI_CONN.htm"␍
|
||||
# Type="MYSQL"␍
|
||||
# HTTP="true"␍
|
||||
$hostname_cmctrfdb = "localhost";␍
|
||||
$database_cmctrfdb = "dbcov4clvrmrzn";␍
|
||||
$username_cmctrfdb = "u00wiumd4xnrd";␍
|
||||
$password_cmctrfdb = "ukowysga7w5x";␍
|
||||
␍
|
||||
$servername = $hostname_cmctrfdb;␍
|
||||
$username = $username_cmctrfdb;␍
|
||||
$password = $password_cmctrfdb;␍
|
||||
$dbname = $database_cmctrfdb;␍
|
||||
␍
|
||||
@session_start();␍
|
||||
␍
|
||||
$cmctrfdb = mysqli_init();␍
|
||||
if (defined("MYSQLI_OPT_INT_AND_FLOAT_NATIVE")) $cmctrfdb->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, TRUE);␍
|
||||
$cmctrfdb->real_connect($hostname_cmctrfdb, $username_cmctrfdb, $password_cmctrfdb, $database_cmctrfdb) or die("Connect Error: " . mysqli_connect_error());␍
|
||||
␍
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php␍
|
||||
# FileName="WADYN_MYSQLI_CONN.htm"␍
|
||||
# Type="MYSQL"␍
|
||||
# HTTP="true"␍
|
||||
$hostname_cmctrfdb = "localhost";␍
|
||||
$database_cmctrfdb = "acscuips_cmcdb";␍
|
||||
$username_cmctrfdb = "acscuips_cmc";␍
|
||||
$password_cmctrfdb = "HcU4gm6zzx=~";␍
|
||||
@session_start();␍
|
||||
␍
|
||||
$cmctrfdb = mysqli_init();␍
|
||||
if (defined("MYSQLI_OPT_INT_AND_FLOAT_NATIVE")) $cmctrfdb->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, TRUE);␍
|
||||
$cmctrfdb->real_connect($hostname_cmctrfdb, $username_cmctrfdb, $password_cmctrfdb, $database_cmctrfdb) or die("Connect Error: " . mysqli_connect_error());␍
|
||||
␍
|
||||
?>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?php␍
|
||||
include('include/headscript.php'); ?>␍
|
||||
<?php␍
|
||||
␍
|
||||
$country_id = mysqli_real_escape_string($_POST['idarticletype']);␍
|
||||
if($idarticletype!='')␍
|
||||
{␍
|
||||
$states_result = $conn->query('select * from modelarticle where idarticletype='.$idarticletype.'');␍
|
||||
$options = "<option value=''>Select State</option>";␍
|
||||
while($row = $states_result->fetch_assoc()) {␍
|
||||
$options .= "<option value='".$row['idmodelarticle']."'>".$row['namemodelarticle']."</option>";␍
|
||||
}␍
|
||||
echo $options;␍
|
||||
}?>
|
||||
+171
File diff suppressed because one or more lines are too long
@@ -0,0 +1,156 @@
|
||||
<?php // <ERRORS><ERROR><DESCRIPTION>Your testing server do not has support for PHP pages</DESCRIPTION></ERROR>\n</ERRORS>␍
|
||||
// version 1.3␍
|
||||
$debug_to_file = false;␍
|
||||
␍
|
||||
if (isset($_POST['SQL'])) {␍
|
||||
if (strpos($_POST['SQL'],"b64:") === 0) {␍
|
||||
$_POST['SQL'] = base64_decode(substr($_POST['SQL'],4));␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
␍
|
||||
function log_messages($error_message){␍
|
||||
global $f, $debug_to_file;␍
|
||||
if ($debug_to_file === true){␍
|
||||
if (!isset($f)){␍
|
||||
@ini_set('display_errors', 1);␍
|
||||
@error_reporting(E_ALL);␍
|
||||
$f = @fopen('log.txt', 'a');␍
|
||||
} ␍
|
||||
return @fwrite($f, $error_message."\n"); ␍
|
||||
}␍
|
||||
return false;␍
|
||||
}␍
|
||||
function create_error($error_msg = '', $line = -1){␍
|
||||
if ($error_msg != ''){␍
|
||||
return '<ERRORS><ERROR><DESCRIPTION>'.$error_msg.'</DESCRIPTION></ERROR></ERRORS>\n';␍
|
||||
}else{␍
|
||||
return '<ERRORS><ERROR><DESCRIPTION> Unidentified Connection Error at Line '.$line.'</DESCRIPTION></ERROR></ERRORS>\n';␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
log_messages("\n--------------------------------");␍
|
||||
// what parameters were sent ?!␍
|
||||
foreach($_POST as $key=>$value) {␍
|
||||
if (strtoupper($key) != 'PASSWORD'){␍
|
||||
log_messages('$_POST["'.$key.'"] = \''.$value."';");␍
|
||||
}␍
|
||||
}␍
|
||||
// We need these information only once when the test button is hit␍
|
||||
if (isset($_POST['opCode']) && $_POST['opCode'] == 'IsOpen' ){␍
|
||||
// What PHP version␍
|
||||
log_messages("\nPHP-Version: ".phpversion());␍
|
||||
// What OS System is running on␍
|
||||
log_messages('PHP-OS: '.PHP_OS);␍
|
||||
// How PHP is installed (CGI, ISAPI, FastCGI) ␍
|
||||
// !!!! Major difference exists on these servers for $_ENV, $_SERVER␍
|
||||
log_messages('PHP-SAPI-NAME: '.php_sapi_name());␍
|
||||
// MySQL, mbstring modules are installed ?!␍
|
||||
log_messages('PHP-Extensions: '.var_export(get_loaded_extensions(),true));␍
|
||||
}␍
|
||||
␍
|
||||
if(extension_loaded('mbstring'))␍
|
||||
{␍
|
||||
$acceptCharsetHeader = 'Accept-Charset: ' . mb_internal_encoding();␍
|
||||
header( $acceptCharsetHeader );␍
|
||||
$head = '<html><head><meta http-equiv=\'Content-Type\' content=\'text/html; charset=' . mb_http_output() . '\'></head>';␍
|
||||
echo $head;␍
|
||||
}else{␍
|
||||
echo '<html><head></head>';␍
|
||||
}␍
|
||||
␍
|
||||
// Build connection object␍
|
||||
if (isset($_POST['Type']) && $_POST['Type'] == 'MYSQL')␍
|
||||
{␍
|
||||
require("./mysql.php");␍
|
||||
␍
|
||||
$oConn = new MySqlConnection(@$_POST['ConnectionString'], @$_POST['Timeout'], @$_POST['Host'], @$_POST['Database'], @$_POST['UserName'], @$_POST['Password']);␍
|
||||
if (!isset($oConn) || $oConn == false){␍
|
||||
log_messages("\n".'MySQL Connection Object initialisation failed'."\n\n".@$error);␍
|
||||
}else{␍
|
||||
log_messages("\n".'MySQL Connection Object Created'."\n\n"); ␍
|
||||
}␍
|
||||
}else{␍
|
||||
$error=create_error('The files from the _mmServerScripts folder are for the server model PHP-MySQL. You try to connect to a database using a different server model '.@$_POST['Type'].".\n\nPlease remove this folder outside the Dreamweaver environment on both local and testing machines and try again.",__LINE__);␍
|
||||
log_messages("\nError Sent:\n\n\t".@$error."\n\n\n"); ␍
|
||||
echo $error.'</HTML>';␍
|
||||
return;␍
|
||||
}␍
|
||||
␍
|
||||
// Process opCode␍
|
||||
if (isset($oConn) && $oConn)␍
|
||||
{␍
|
||||
$oConn->Open();␍
|
||||
␍
|
||||
if (!$oConn->isOpen) {␍
|
||||
if (isset($_POST["ConnectionString"])) {␍
|
||||
$findPW = preg_match("/pwd=(.*)/",$_POST["ConnectionString"],$foundPW);␍
|
||||
if ($findPW) {␍
|
||||
$oConn->password = substr($foundPW[1],0,strlen($foundPW[1])-1);␍
|
||||
$oConn->Open();␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
if (!$oConn->isOpen) {␍
|
||||
$KnownKeys = array();␍
|
||||
$knownKeys[] = "ConnectionString";␍
|
||||
$knownKeys[] = "Timeout";␍
|
||||
$knownKeys[] = "Host";␍
|
||||
$knownKeys[] = "Database";␍
|
||||
$knownKeys[] = "UserName";␍
|
||||
$knownKeys[] = "Password";␍
|
||||
$knownKeys[] = "Type";␍
|
||||
$knownKeys[] = "SQL";␍
|
||||
$knownKeys[] = "opCode";␍
|
||||
$knownKeys[] = "TableName";␍
|
||||
$knownKeys[] = "MaxRows";␍
|
||||
$knownKeys[] = "ProcName";␍
|
||||
$knownKeys[] = "ExecProcName";␍
|
||||
$knownKeys[] = "ExecProcParameters";␍
|
||||
$knownKeys[] = "ProcName";␍
|
||||
$pw = $_POST["Password"];␍
|
||||
foreach ($_POST as $key=>$val) {␍
|
||||
if (!in_array($key,$knownKeys)) {␍
|
||||
$pw .= "&" . $val;␍
|
||||
}␍
|
||||
} ␍
|
||||
$oConn->password = $pw;␍
|
||||
$oConn->Open();␍
|
||||
}␍
|
||||
␍
|
||||
␍
|
||||
if ($_POST['opCode'] == 'IsOpen'){␍
|
||||
$answer = $oConn->TestOpen();␍
|
||||
} elseif ($oConn->isOpen){␍
|
||||
␍
|
||||
switch ($_POST['opCode']){␍
|
||||
case 'GetTables': $answer = $oConn->GetTables(@$_POST['Database']); break;␍
|
||||
case 'GetColsOfTable': $answer = $oConn->GetColumnsOfTable(@$_POST['TableName']); break;␍
|
||||
case 'ExecuteSQL': $answer = $oConn->ExecuteSQL(@$_POST['SQL'], @$_POST['MaxRows']); break;␍
|
||||
case 'GetODBCDSNs': $answer = $oConn->GetDatabaseList(); break;␍
|
||||
case 'SupportsProcedure': $answer = $oConn->SupportsProcedure(); break;␍
|
||||
case 'GetProviderTypes': $answer = $oConn->GetProviderTypes(); break;␍
|
||||
case 'GetViews': $answer = $oConn->GetViews(); break;␍
|
||||
case 'GetProcedures': $answer = $oConn->GetProcedures(); break;␍
|
||||
case 'GetParametersOfProcedure': $answer = $oConn->GetParametersOfProcedure(@$_POST['ProcName']); break;␍
|
||||
case 'ReturnsResultset': $answer = $oConn->ReturnsResultSet($_POST['RRProcName']); break;␍
|
||||
case 'ExecuteSP': $answer = $oConn->ExecuteSP(@$_POST['ExecProcName'], 0, @$_POST['ExecProcParameters']); break;␍
|
||||
case 'GetKeysOfTable': $answer = $oConn->GetPrimaryKeysOfTable(@$_POST['TableName']); break;␍
|
||||
default: $answer = create_error('The \''.$_POST['opCode'].'\' command is not supported.'); break;␍
|
||||
}␍
|
||||
} else {␍
|
||||
//file_put_contents("debug.txt",json_encode($oConn),FILE_APPEND);␍
|
||||
//file_put_contents("debug.txt",json_encode($_POST),FILE_APPEND);␍
|
||||
//file_put_contents("debug.txt","\nnot open",FILE_APPEND);␍
|
||||
}␍
|
||||
␍
|
||||
$oConn->Close();␍
|
||||
}else{␍
|
||||
$answer = create_error('The Connection Module was not initialized properly for an unknown reason.');␍
|
||||
}␍
|
||||
␍
|
||||
log_messages("\nAnswer From Database:\n\n\t".@$answer."\n\n\n");␍
|
||||
echo $answer;␍
|
||||
␍
|
||||
echo '</html>';␍
|
||||
?>
|
||||
@@ -0,0 +1,233 @@
|
||||
<?php␍
|
||||
// version 1.1␍
|
||||
ini_set("display_errors",1);␍
|
||||
if((function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc()) || (ini_get('magic_quotes_sybase') && ( strtolower(ini_get('magic_quotes_sybase')) != "off" ))) {␍
|
||||
foreach($_POST as $k => $v) {␍
|
||||
if (is_array($_POST[$k])) {␍
|
||||
foreach($_POST[$k] as $x => $y) {␍
|
||||
$_POST[$k][$x] = stripslashes($y);␍
|
||||
}␍
|
||||
} else {␍
|
||||
$_POST[$k] = stripslashes($v);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
foreach($_POST as $k => $v) {␍
|
||||
if (is_array($_POST[$k])) {␍
|
||||
foreach($_POST[$k] as $x => $y) {␍
|
||||
$_POST[$k][$x] = urldecode(base64_decode(stripslashes($y)));␍
|
||||
}␍
|
||||
} else {␍
|
||||
$_POST[$k] = urldecode(base64_decode(stripslashes($v)));␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
if (!isset($_POST["od_in"]) || intval($_POST["od_in"]) != intval("@@RANDNUM@@")) die("<WADB_RESPONSE><WADB_ERROR code=\"1\"><![CDATA[No hacking, please. Your location has been logged and reported to the FBI. Please wait for the authorities to arrive.]]></WADB_ERROR></WADB_RESPONSE>");␍
|
||||
if (!isset($_POST["ch_ew_y"]) || intval($_POST["ch_ew_y"]) != intval("@@TIMESTAMP@@")) die("<WADB_RESPONSE><WADB_ERROR code=\"2\"><![CDATA[No hacking, please. Your location has been logged and reported to the FBI. Please wait for the authorities to arrive.]]></WADB_ERROR></WADB_RESPONSE>");␍
|
||||
$timestampExpires = intval("@@TSEXPIRES@@") / 1000;␍
|
||||
$presTime = (intval("@@TIMESTAMP@@") / 1000);␍
|
||||
$servTime = intval("@@SERVTIMESTAMP@@");␍
|
||||
if ($servTime && (time() - $timestampExpires) >= $servTime) die("<WADB_RESPONSE><WADB_ERROR code=\"3\"><![CDATA[No hacking, please. Your location has been logged and reported to the FBI. Please wait for the authorities to arrive.]]></WADB_ERROR></WADB_RESPONSE>");␍
|
||||
␍
|
||||
␍
|
||||
$connectionText = $_POST['connection'];␍
|
||||
$host = $_POST['hostname']; ␍
|
||||
$user = $_POST['username']; ␍
|
||||
$pass = $_POST['password']; ␍
|
||||
$database = $_POST['databasename']; ␍
|
||||
␍
|
||||
if (strlen($pass) == 1 && ord($_POST['password']) == 0) {␍
|
||||
$pass = NULL;␍
|
||||
} ␍
|
||||
␍
|
||||
if (!extension_loaded('mysqli')) {␍
|
||||
$connection = mysql_connect($host, $user, $pass, $database);␍
|
||||
mysql_select_db($database,$connection);␍
|
||||
} else {␍
|
||||
$connection = new mysqli($host, $user, $pass, $database);␍
|
||||
}␍
|
||||
//die($host ."\n". $user."\n". $pass."\n". $database);␍
|
||||
␍
|
||||
if ($connection->connect_errno) {␍
|
||||
die("<WADB_RESPONSE><WADB_ERROR code=\"10\"><![CDATA[Failed to connect to MySQL: (" . $connection->connect_errno . ") " . $connection->connect_error ."]]></WADB_ERROR></WADB_RESPONSE>");␍
|
||||
}␍
|
||||
␍
|
||||
$_POST['action'] = ( (isset($_POST['action'])) ? $_POST['action'] : 'query' );␍
|
||||
$columnString = "";␍
|
||||
$valuesString = "";␍
|
||||
$conditionString = "";␍
|
||||
switch ($_POST['action']) {␍
|
||||
case "insert":␍
|
||||
if (isset($_POST['values'])) {␍
|
||||
$valuesString = $_POST['values'];␍
|
||||
if (is_array($valuesString)) {␍
|
||||
$valuesString = implode(", ", $valuesString);␍
|
||||
}␍
|
||||
}␍
|
||||
if (isset($_POST['conditions'])) {␍
|
||||
$conditionString = $_POST['conditions'];␍
|
||||
if (is_array($conditionString)) {␍
|
||||
$conditionString = implode(" AND ", $conditionString);␍
|
||||
}␍
|
||||
}␍
|
||||
//no break for columns string as the "query" case␍
|
||||
case "query":␍
|
||||
$columnString="*";␍
|
||||
if (isset($_POST['column'])) {␍
|
||||
$columnString = $_POST['column'];␍
|
||||
if (is_array($columnString)) {␍
|
||||
$columnString = implode(", ", $columnString);␍
|
||||
}␍
|
||||
}␍
|
||||
break;␍
|
||||
case "update":␍
|
||||
if (isset($_POST['values']) && isset($_POST['column'])) {␍
|
||||
$valuesString = $_POST['values'];␍
|
||||
$columnString = $_POST['column'];␍
|
||||
$fullString = "";␍
|
||||
if (is_array($valuesString) && is_array($columnString)) {␍
|
||||
for ($n=0; $n<sizeof($columnString); $n++) {␍
|
||||
$fullString .= ( ($n != 0) ? ", " : "" ) . $columnString[$n] . "=" . $valuesString[$n];␍
|
||||
}␍
|
||||
}␍
|
||||
else {␍
|
||||
$fullString = $columnString . "=" . $valuesString;␍
|
||||
}␍
|
||||
}␍
|
||||
break;␍
|
||||
}␍
|
||||
//connect to database␍
|
||||
switch ($_POST['action']) {␍
|
||||
case "create":␍
|
||||
$db_query = $_POST['fullstatement'];␍
|
||||
break;␍
|
||||
case "sct":␍
|
||||
$db_query = "SHOW CREATE TABLE `" . $_POST['table'] . "`";␍
|
||||
break;␍
|
||||
case "drop":␍
|
||||
$db_query = "DROP TABLE `" . $_POST['table'] . "`";␍
|
||||
break;␍
|
||||
case "firstrow":␍
|
||||
$db_query = "SELECT * FROM `" . $_POST['table'] . "` LIMIT 1";␍
|
||||
$_POST['action'] = "query";␍
|
||||
break;␍
|
||||
case "insert":␍
|
||||
if (!$conditionString || trim(strval($conditionString)) == "") {␍
|
||||
$db_query = "INSERT INTO `" . $_POST['table'] . "` (" . $columnString . ") VALUES (" . $valuesString . ")";␍
|
||||
} else {␍
|
||||
$db_query = "INSERT INTO `" . $_POST['table'] . "` (" . $columnString . ") SELECT " . $valuesString . " FROM " . $_POST['table'] . " WHERE NOT EXISTS (SELECT " . $columnString . " FROM " . $_POST['table'] . " WHERE " . $conditionString . ") LIMIT 1";␍
|
||||
}␍
|
||||
break;␍
|
||||
case "update":␍
|
||||
$db_query = "UPDATE `" . $_POST['table'] . "` SET " . $fullString . "";␍
|
||||
if (isset($_POST['filter'])) {␍
|
||||
$db_query .= " " . $_POST['filter'];␍
|
||||
}␍
|
||||
break;␍
|
||||
case "dbinfo":␍
|
||||
$db_query = "SHOW FULL TABLES FROM `" . $_POST['databasename'] ."`";␍
|
||||
break;␍
|
||||
case "delete":␍
|
||||
$db_query = "DELETE FROM `" . $_POST['table'] . "`";␍
|
||||
if (isset($_POST['filter'])) {␍
|
||||
$db_query .= " " . $_POST['filter'];␍
|
||||
}␍
|
||||
break;␍
|
||||
case "query":␍
|
||||
default:␍
|
||||
$db_query = "SELECT ".$columnString." FROM `".$_POST['table'] . '` ';␍
|
||||
if (isset($_POST['filter'])) {␍
|
||||
$db_query .= " " . $_POST['filter'];␍
|
||||
}␍
|
||||
break;␍
|
||||
}␍
|
||||
echo "<WADB_RESPONSE>\n"."\t<WADB_INFO connection=\"".urlencode($connectionText)."\">\n";␍
|
||||
if (isset($_POST['table'])) {␍
|
||||
echo "\t\t<WADB_TABLE><![CDATA[".$_POST['table']."]]></WADB_TABLE>\n";␍
|
||||
}␍
|
||||
echo "\t\t<WADB_COLSTR><![CDATA[".$columnString."]]></WADB_COLSTR>\n".␍
|
||||
"\t\t<WADB_VALSTR><![CDATA[".$valuesString."]]></WADB_VALSTR>\n";␍
|
||||
if (isset($_POST['filter'])) {␍
|
||||
echo "\t\t<WADB_FILTER><![CDATA[".$_POST['filter']."]]></WADB_FILTER>\n";␍
|
||||
}␍
|
||||
echo "\t\t<WADB_STATEMENT><![CDATA[".$db_query."]]></WADB_STATEMENT>\n"."\t</WADB_INFO>\n";␍
|
||||
if (!extension_loaded('mysqli')) {␍
|
||||
$dbcontent = mysql_query($db_query,$connection);␍
|
||||
} else {␍
|
||||
$dbcontent = $connection->query($db_query);␍
|
||||
}␍
|
||||
if ($connection->connect_errno) die("<WADB_RESPONSE><WADB_ERROR code=\"5\"><![CDATA[Failed to execute sql: (" . $connection->connect_errno . ") ".$db_query." : " . $connection->connect_error ."]]></WADB_ERROR></WADB_RESPONSE>");␍
|
||||
␍
|
||||
switch ($_POST['action']) {␍
|
||||
case "query":␍
|
||||
case "sct":␍
|
||||
␍
|
||||
if (!extension_loaded('mysqli')) {␍
|
||||
while ($row_dbcontent = mysql_fetch_assoc($dbcontent)) {␍
|
||||
echo("\t<WADB_DATA>\n");␍
|
||||
foreach ($row_dbcontent as $key => $value) {␍
|
||||
echo('\t\t<WADB_COLUMN name="'.urlencode($key).'"><![CDATA['.$value."]]></WADB_COLUMN>\n");␍
|
||||
}␍
|
||||
echo("\t</WADB_DATA>\n");␍
|
||||
}␍
|
||||
mysql_free_result($dbcontent);␍
|
||||
} else {␍
|
||||
while ($row_dbcontent = mysqli_fetch_assoc($dbcontent)) {␍
|
||||
echo("\t<WADB_DATA>\n");␍
|
||||
foreach ($row_dbcontent as $key => $value) {␍
|
||||
echo('\t\t<WADB_COLUMN name="'.urlencode($key).'"><![CDATA['.$value."]]></WADB_COLUMN>\n");␍
|
||||
}␍
|
||||
echo("\t</WADB_DATA>\n");␍
|
||||
}␍
|
||||
mysqli_free_result($dbcontent);␍
|
||||
}␍
|
||||
break;␍
|
||||
case "dbinfo":␍
|
||||
if (extension_loaded('mysqli')) {␍
|
||||
while ($row_dbcontent = mysqli_fetch_assoc($dbcontent)) {␍
|
||||
echo("\t<WADB_DATA>\n");␍
|
||||
foreach ($row_dbcontent as $key => $value) {␍
|
||||
$dbcolcontent = $connection->query("SHOW COLUMNS FROM `" . $value . "`");␍
|
||||
if ($connection->connect_errno) die("<WADB_RESPONSE><WADB_ERROR code=\"5\"><![CDATA[Failed to execute sql: (" . $connection->connect_errno . ") ".$db_query." : " . $connection->connect_error ."]]></WADB_ERROR></WADB_RESPONSE>");␍
|
||||
␍
|
||||
$dballcols = array();␍
|
||||
if ($dbcolcontent) while ($row = $dbcolcontent->fetch_array()) {␍
|
||||
$dballcols[] = $row;␍
|
||||
} ␍
|
||||
if ($dbcolcontent) mysqli_free_result($dbcolcontent);␍
|
||||
echo('\t\t<WADB_COLUMN name="'.urlencode($value).'"><![CDATA['.json_encode($dballcols)."]]></WADB_COLUMN>\n");␍
|
||||
break;␍
|
||||
}␍
|
||||
echo("\t</WADB_DATA>\n");␍
|
||||
}␍
|
||||
mysqli_free_result($dbcontent);␍
|
||||
} else {␍
|
||||
while ($row_dbcontent = mysql_fetch_assoc($dbcontent)) {␍
|
||||
echo("\t<WADB_DATA>\n");␍
|
||||
foreach ($row_dbcontent as $key => $value) {␍
|
||||
$dbcolcontent = mysql_query("SHOW COLUMNS FROM `" . $value . "`",$connection);␍
|
||||
if ($connection->connect_errno) die("<WADB_RESPONSE><WADB_ERROR code=\"5\"><![CDATA[Failed to execute sql: (" . $connection->connect_errno . ") ".$db_query." : " . $connection->connect_error ."]]></WADB_ERROR></WADB_RESPONSE>");␍
|
||||
$dballcols = mysql_fetch_all($dbcolcontent);␍
|
||||
mysql_free_result($dbcolcontent);␍
|
||||
echo('\t\t<WADB_COLUMN name="'.urlencode($value).'"><![CDATA['.json_encode($dballcols)."]]></WADB_COLUMN>\n");␍
|
||||
}␍
|
||||
echo("\t</WADB_DATA>\n");␍
|
||||
}␍
|
||||
mysql_free_result($dbcontent);␍
|
||||
}␍
|
||||
break;␍
|
||||
case "insert":␍
|
||||
if (extension_loaded('mysqli')) {␍
|
||||
echo("\t<WADB_DATA><![CDATA[".mysqli_insert_id($connection)."]]></WADB_DATA>\n");␍
|
||||
} else { ␍
|
||||
echo("\t<WADB_DATA><![CDATA[".mysql_insert_id($connection)."]]></WADB_DATA>\n");␍
|
||||
}␍
|
||||
break;␍
|
||||
case "create":␍
|
||||
case "drop":␍
|
||||
case "update":␍
|
||||
default:␍
|
||||
echo("\t<WADB_DATA><![CDATA[success]]></WADB_DATA>\n");␍
|
||||
}␍
|
||||
echo "</WADB_RESPONSE>";␍
|
||||
?>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>␍
|
||||
<dwsync>␍
|
||||
<file name="MMHTTPDB.php" server="C:/xampp/htdocs/cmc-frontend-authorize/" local="133146550304486371" remote="133146550300000000" Dst="1" />␍
|
||||
<file name="mysql.php" server="C:/xampp/htdocs/cmc-frontend-authorize/" local="133146550304542331" remote="133146550300000000" Dst="1" />␍
|
||||
<file name="WA_DBScript.php" server="C:/xampp/htdocs/cmc-frontend-authorize/" local="133146550304676190" remote="133146550300000000" Dst="1" />␍
|
||||
</dwsync>
|
||||
@@ -0,0 +1,928 @@
|
||||
<?php␍
|
||||
if (extension_loaded('mysqli')) {␍
|
||||
// If this file is not included from the MMHTTPDB possible hacking problem.␍
|
||||
if (!function_exists('create_error')){␍
|
||||
die();␍
|
||||
}␍
|
||||
ini_set("display_errors",1);␍
|
||||
define('CONN_NOT_OPEN_GET_TABLES', create_error('The Connection could not be opened when trying to retrieve the tables.'));␍
|
||||
define('CONN_NOT_OPEN_GET_DB_LIST', create_error('The Connection could not be opened when trying to retrieve the database list.'));␍
|
||||
␍
|
||||
// Now let's handle the crashes or any other PHP errors that we can catch␍
|
||||
function KT_ErrorHandler($errno, $errstr, $errfile, $errline) { ␍
|
||||
global $f, $already_sent;␍
|
||||
$errortype = array ( ␍
|
||||
1 => "Error", ␍
|
||||
2 => "Warning", ␍
|
||||
4 => "Parsing Error", ␍
|
||||
8 => "Notice", ␍
|
||||
16 => "Core Error", ␍
|
||||
32 => "Core Warning", ␍
|
||||
64 => "Compile Error", ␍
|
||||
128 => "Compile Warning", ␍
|
||||
256 => "User Error", ␍
|
||||
512 => "User Warning", ␍
|
||||
1024=> "User Notice",␍
|
||||
2048=> "E_ALL",␍
|
||||
2049=> "PHP5 E_STRICT"␍
|
||||
␍
|
||||
);␍
|
||||
$str = sprintf("[%s]\n%s:\t%s\nFile:\t\t'%s'\nLine:\t\t%s\n\n", date('d-m-Y H:i:s'),(isset($errortype[@$errno])?$errortype[@$errno]:('Unknown '.$errno)),@$errstr,@$errfile,@$errline);␍
|
||||
if (error_reporting() != 0) {␍
|
||||
@fwrite($f, $str);␍
|
||||
if (@$errno == 2 && isset($already_sent) && !$already_sent==true){␍
|
||||
$error = '<ERRORS>'."\n";␍
|
||||
$error .= '<ERROR><DESCRIPTION>An Warning Type error appeared. The error is logged into the log file.</DESCRIPTION></ERROR>'."\n";␍
|
||||
$error .= '</ERRORS>'."\n";␍
|
||||
$already_sent = true;␍
|
||||
echo $error;␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
if ($debug_to_file){␍
|
||||
$old_error_handler = set_error_handler("KT_ErrorHandler");␍
|
||||
}␍
|
||||
␍
|
||||
class MySqlConnection␍
|
||||
{␍
|
||||
/*␍
|
||||
// The 'var' keyword is deprecated in PHP5 ... we will define these variables at runtime.␍
|
||||
var $isOpen;␍
|
||||
var $hostname;␍
|
||||
var $database;␍
|
||||
var $username;␍
|
||||
var $password;␍
|
||||
var $timeout;␍
|
||||
var $connectionId;␍
|
||||
var $error;␍
|
||||
*/␍
|
||||
function __construct($ConnectionString, $Timeout, $Host, $DB, $UID, $Pwd)␍
|
||||
{␍
|
||||
$this->isOpen = false;␍
|
||||
$this->timeout = $Timeout;␍
|
||||
$this->error = '';␍
|
||||
␍
|
||||
log_messages(json_encode($_POST));␍
|
||||
␍
|
||||
if( $Host ) { ␍
|
||||
$this->hostname = $Host;␍
|
||||
}␍
|
||||
elseif( preg_match("/host=([^;]+);/", $ConnectionString, $ret) ) {␍
|
||||
$this->hostname = $ret[1];␍
|
||||
}␍
|
||||
␍
|
||||
if( $DB ) {␍
|
||||
$this->database = $DB;␍
|
||||
}␍
|
||||
elseif( preg_match("/db=([^;]+);/", $ConnectionString, $ret) ) {␍
|
||||
$this->database = $ret[1];␍
|
||||
}␍
|
||||
␍
|
||||
if( $UID ) {␍
|
||||
$this->username = $UID;␍
|
||||
}␍
|
||||
elseif( preg_match("/uid=([^;]+);/", $ConnectionString, $ret) ) {␍
|
||||
$this->username = $ret[1];␍
|
||||
}␍
|
||||
␍
|
||||
if( $Pwd ) {␍
|
||||
$this->password = $Pwd;␍
|
||||
}␍
|
||||
elseif( preg_match("/pwd=([^;]+);/", $ConnectionString, $ret) ) {␍
|
||||
$this->password = $ret[1];␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
function Open()␍
|
||||
{␍
|
||||
$this->connectionId = new mysqli($this->hostname, $this->username, $this->password, $this->database);␍
|
||||
if (mysqli_connect_errno())␍
|
||||
{␍
|
||||
$this->isOpen = false;␍
|
||||
}␍
|
||||
else␍
|
||||
{␍
|
||||
$this->isOpen = true;␍
|
||||
} ␍
|
||||
}␍
|
||||
␍
|
||||
function TestOpen()␍
|
||||
{␍
|
||||
return ($this->isOpen) ? '<TEST status=true></TEST>' : $this->HandleException();␍
|
||||
}␍
|
||||
␍
|
||||
function Close()␍
|
||||
{␍
|
||||
if ($this->isOpen)␍
|
||||
{␍
|
||||
$this->isOpen = false;␍
|
||||
$this->connectionId->close();␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
function GetTables($table_name = '')␍
|
||||
{␍
|
||||
$xmlOutput = "";␍
|
||||
if ($this->isOpen && isset($this->connectionId)){␍
|
||||
if ($table_name === ''){␍
|
||||
$table_name = @$_POST['Database'];␍
|
||||
}␍
|
||||
$sql = ' SHOW TABLES FROM ' . $this->ensureTicks($table_name) ;␍
|
||||
$results = $this->connectionId->query($sql) or $this->HandleException();␍
|
||||
␍
|
||||
$xmlOutput = "<RESULTSET><FIELDS>";␍
|
||||
␍
|
||||
$xmlOutput .= '<FIELD><NAME>TABLE_CATALOG</NAME></FIELD>'; // column 0 (zero-based)␍
|
||||
$xmlOutput .= '<FIELD><NAME>TABLE_SCHEMA</NAME></FIELD>'; // column 1␍
|
||||
$xmlOutput .= '<FIELD><NAME>TABLE_NAME</NAME></FIELD>'; // column 2␍
|
||||
␍
|
||||
$xmlOutput .= "</FIELDS><ROWS>";␍
|
||||
␍
|
||||
␍
|
||||
while ($row = $results->fetch_array()) {␍
|
||||
$xmlOutput .= '<ROW><VALUE/><VALUE/><VALUE>' . $row[0]. '</VALUE></ROW>';␍
|
||||
}␍
|
||||
$results->free();␍
|
||||
}␍
|
||||
␍
|
||||
$xmlOutput .= "</ROWS></RESULTSET>";␍
|
||||
return $xmlOutput;␍
|
||||
}␍
|
||||
␍
|
||||
function GetViews()␍
|
||||
{␍
|
||||
// not supported␍
|
||||
return "<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>";␍
|
||||
}␍
|
||||
␍
|
||||
function GetProcedures()␍
|
||||
{␍
|
||||
// not supported␍
|
||||
return "<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>";␍
|
||||
}␍
|
||||
␍
|
||||
function GetColumnsOfTable($TableName)␍
|
||||
{␍
|
||||
$xmlOutput = "";␍
|
||||
//added backtick for handling reserved words and special characters␍
|
||||
//http://dev.mysql.com/doc/refman/5.0/en/legal-names.html␍
|
||||
$query = "DESCRIBE ".$this->ensureTicks($TableName);␍
|
||||
$result = $this->connectionId->query($query) or $this->HandleException();␍
|
||||
␍
|
||||
if ($result)␍
|
||||
{␍
|
||||
$xmlOutput = "<RESULTSET><FIELDS>";␍
|
||||
␍
|
||||
// Columns are referenced by index, so Schema and␍
|
||||
// Catalog must be specified even though they are not supported␍
|
||||
$xmlOutput .= "<FIELD><NAME>TABLE_CATALOG</NAME></FIELD>"; // column 0 (zero-based)␍
|
||||
$xmlOutput .= "<FIELD><NAME>TABLE_SCHEMA</NAME></FIELD>"; // column 1␍
|
||||
$xmlOutput .= "<FIELD><NAME>TABLE_NAME</NAME></FIELD>"; // column 2␍
|
||||
$xmlOutput .= "<FIELD><NAME>COLUMN_NAME</NAME></FIELD>";␍
|
||||
$xmlOutput .= "<FIELD><NAME>DATA_TYPE</NAME></FIELD>";␍
|
||||
$xmlOutput .= "<FIELD><NAME>IS_NULLABLE</NAME></FIELD>";␍
|
||||
$xmlOutput .= "<FIELD><NAME>COLUMN_SIZE</NAME></FIELD>";␍
|
||||
␍
|
||||
$xmlOutput .= "</FIELDS><ROWS>";␍
|
||||
␍
|
||||
// The fields returned from DESCRIBE are: Field, Type, Null, Key, Default, Extra␍
|
||||
while ($row = $result->fetch_array(MYSQLI_ASSOC))␍
|
||||
{␍
|
||||
$xmlOutput .= "<ROW><VALUE/><VALUE/><VALUE/>";␍
|
||||
␍
|
||||
// Separate type from size. Format is: type(size)␍
|
||||
if (preg_match("/(.*)\((.*)\)/", $row["Type"], $ret))␍
|
||||
{␍
|
||||
$type = $ret[1];␍
|
||||
$size = $ret[2];␍
|
||||
}␍
|
||||
else␍
|
||||
{␍
|
||||
$type = $row["Type"];␍
|
||||
$size = "";␍
|
||||
}␍
|
||||
␍
|
||||
// MySQL sets nullable to "YES" or "", so we need to set "NO"␍
|
||||
$null = $row["Null"];␍
|
||||
if ($null == "")␍
|
||||
$null = "NO";␍
|
||||
␍
|
||||
$xmlOutput .= "<VALUE>" . $row["Field"] . "</VALUE>";␍
|
||||
$xmlOutput .= "<VALUE>" . $type . "</VALUE>";␍
|
||||
$xmlOutput .= "<VALUE>" . $null . "</VALUE>";␍
|
||||
$xmlOutput .= "<VALUE>" . $size . "</VALUE></ROW>";␍
|
||||
}␍
|
||||
$result->free();␍
|
||||
␍
|
||||
$xmlOutput .= "</ROWS></RESULTSET>";␍
|
||||
}␍
|
||||
␍
|
||||
return $xmlOutput;␍
|
||||
}␍
|
||||
␍
|
||||
function GetParametersOfProcedure($ProcedureName, $SchemaName, $CatalogName)␍
|
||||
{␍
|
||||
// not supported on MySQL␍
|
||||
return '<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>';␍
|
||||
}␍
|
||||
␍
|
||||
function ExecuteSQL($aStatement, $MaxRows)␍
|
||||
{␍
|
||||
log_messages("Statement: " . $aStatement);␍
|
||||
␍
|
||||
if ($aStatement == "systime") return '<RESULTSET><FIELDS><FIELD><NAME>'.time().'</NAME></FIELD></FIELDS><ROWS></ROWS></RESULTSET>';␍
|
||||
␍
|
||||
$xmlOutput = "";␍
|
||||
$result = $this->connectionId->query($aStatement) or $this->HandleException();␍
|
||||
␍
|
||||
if ($result)␍
|
||||
{␍
|
||||
$xmlOutput = "<RESULTSET><FIELDS>";␍
|
||||
␍
|
||||
$fieldCount = $result->field_count;␍
|
||||
for ($i=0; $i < $fieldCount; $i++)␍
|
||||
{␍
|
||||
$meta = $result->fetch_field();␍
|
||||
if ($meta)␍
|
||||
{␍
|
||||
$xmlOutput .= '<FIELD';␍
|
||||
$xmlOutput .= ' type="' . $meta->type;␍
|
||||
$xmlOutput .= '" max_length="' . $meta->max_length;␍
|
||||
$xmlOutput .= '" table="' . $meta->table;␍
|
||||
$xmlOutput .= '" not_null="' . (($meta->flags & 1)?1:0);␍
|
||||
$xmlOutput .= '" numeric="' . (($meta->flags & 32768)?1:0);␍
|
||||
$xmlOutput .= '" unsigned="' . (($meta->flags & 32)?1:0);␍
|
||||
$xmlOutput .= '" zerofill="' . (($meta->flags & 64)?1:0);␍
|
||||
$xmlOutput .= '" primary_key="' . (($meta->flags & 2)?1:0);␍
|
||||
$xmlOutput .= '" multiple_key="'. (($meta->flags & 16384)?1:0);␍
|
||||
$xmlOutput .= '" unique_key="' . (($meta->flags & 4)?1:0);␍
|
||||
$xmlOutput .= '"><NAME>' . $meta->name;␍
|
||||
$xmlOutput .= '</NAME></FIELD>';␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
/*␍
|
||||
numerics␍
|
||||
-------------␍
|
||||
BIT: 16␍
|
||||
TINYINT: 1␍
|
||||
BOOL: 1␍
|
||||
SMALLINT: 2␍
|
||||
MEDIUMINT: 9␍
|
||||
INTEGER: 3␍
|
||||
BIGINT: 8␍
|
||||
SERIAL: 8␍
|
||||
FLOAT: 4␍
|
||||
DOUBLE: 5␍
|
||||
DECIMAL: 246␍
|
||||
NUMERIC: 246␍
|
||||
FIXED: 246␍
|
||||
␍
|
||||
dates␍
|
||||
------------␍
|
||||
DATE: 10␍
|
||||
DATETIME: 12␍
|
||||
TIMESTAMP: 7␍
|
||||
TIME: 11␍
|
||||
YEAR: 13␍
|
||||
␍
|
||||
strings & binary␍
|
||||
------------␍
|
||||
CHAR: 254␍
|
||||
VARCHAR: 253␍
|
||||
ENUM: 254␍
|
||||
SET: 254␍
|
||||
BINARY: 254␍
|
||||
VARBINARY: 253␍
|
||||
TINYBLOB: 252␍
|
||||
BLOB: 252␍
|
||||
MEDIUMBLOB: 252␍
|
||||
TINYTEXT: 252␍
|
||||
TEXT: 252␍
|
||||
MEDIUMTEXT: 252␍
|
||||
LONGTEXT: 252␍
|
||||
␍
|
||||
*/␍
|
||||
␍
|
||||
/*␍
|
||||
NOT_NULL_FLAG = 1 ␍
|
||||
PRI_KEY_FLAG = 2 ␍
|
||||
UNIQUE_KEY_FLAG = 4 ␍
|
||||
BLOB_FLAG = 16 ␍
|
||||
UNSIGNED_FLAG = 32 ␍
|
||||
ZEROFILL_FLAG = 64 ␍
|
||||
BINARY_FLAG = 128 ␍
|
||||
ENUM_FLAG = 256 ␍
|
||||
AUTO_INCREMENT_FLAG = 512 ␍
|
||||
TIMESTAMP_FLAG = 1024 ␍
|
||||
SET_FLAG = 2048 ␍
|
||||
NUM_FLAG = 32768 ␍
|
||||
PART_KEY_FLAG = 16384 ␍
|
||||
GROUP_FLAG = 32768 ␍
|
||||
UNIQUE_FLAG = 65536 ␍
|
||||
*/␍
|
||||
␍
|
||||
$xmlOutput .= "</FIELDS><ROWS>";␍
|
||||
$row = $result->fetch_assoc();␍
|
||||
␍
|
||||
for ($i=0; $row && ($i < $MaxRows); $i++)␍
|
||||
{␍
|
||||
$xmlOutput .= "<ROW>";␍
|
||||
␍
|
||||
foreach ($row as $key => $value)␍
|
||||
{␍
|
||||
$xmlOutput .= "<VALUE>";␍
|
||||
$xmlOutput .= htmlspecialchars($value);␍
|
||||
$xmlOutput .= "</VALUE>";␍
|
||||
}␍
|
||||
␍
|
||||
$xmlOutput .= "</ROW>";␍
|
||||
$row = $result->fetch_assoc();␍
|
||||
}␍
|
||||
␍
|
||||
$result->free();␍
|
||||
␍
|
||||
$xmlOutput .= "</ROWS></RESULTSET>";␍
|
||||
}␍
|
||||
␍
|
||||
return $xmlOutput;␍
|
||||
}␍
|
||||
␍
|
||||
function GetProviderTypes()␍
|
||||
{␍
|
||||
return '<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>';␍
|
||||
}␍
|
||||
␍
|
||||
function ExecuteSP($aProcStatement, $TimeOut, $Parameters)␍
|
||||
{␍
|
||||
return '<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>';␍
|
||||
}␍
|
||||
␍
|
||||
function ReturnsResultSet($ProcedureName)␍
|
||||
{␍
|
||||
return '<RETURNSRESULTSET status=false></RETURNSRESULTSET>';␍
|
||||
}␍
|
||||
␍
|
||||
function SupportsProcedure()␍
|
||||
{ ␍
|
||||
return '<SUPPORTSPROCEDURE status=false></SUPPORTSPROCEDURE>';␍
|
||||
}␍
|
||||
␍
|
||||
/*␍
|
||||
* HandleException added by InterAKT for ease in database translation answer␍
|
||||
*/␍
|
||||
function HandleException()␍
|
||||
{␍
|
||||
global $debug_to_file, $f;␍
|
||||
$connectionError = $this->connectionId->connect_error;␍
|
||||
if ($connectionError) {␍
|
||||
$this->error = create_error(' MySQLi Connection Error#: '. $connectionError);␍
|
||||
} else {␍
|
||||
$this->error = create_error(' MySQLi Error#: '. ((int)mysqli_errno($this->connectionId)) . "\n\n".mysqli_error($this->connectionId));␍
|
||||
}␍
|
||||
log_messages($this->error);␍
|
||||
die($this->error.'</HTML>');␍
|
||||
}␍
|
||||
␍
|
||||
function ensureTicks($inputSQL)␍
|
||||
{␍
|
||||
$outSQL = $inputSQL;␍
|
||||
//added backtick for handling reserved words and special characters␍
|
||||
//http://dev.mysql.com/doc/refman/5.0/en/legal-names.html␍
|
||||
␍
|
||||
//only add ticks if not already there␍
|
||||
$oLength = strlen($outSQL);␍
|
||||
$bHasTick = false;␍
|
||||
if (($oLength > 0) && (($outSQL[0] == "`") && ($outSQL[$oLength-1] == "`")))␍
|
||||
{␍
|
||||
$bHasTick = true;␍
|
||||
}␍
|
||||
if ($bHasTick == false)␍
|
||||
{␍
|
||||
$outSQL = "`".$outSQL."`";␍
|
||||
}␍
|
||||
return $outSQL;␍
|
||||
}␍
|
||||
␍
|
||||
function GetDatabaseList()␍
|
||||
{␍
|
||||
$xmlOutput = '<RESULTSET><FIELDS><FIELD><NAME>NAME</NAME></FIELD></FIELDS><ROWS>';␍
|
||||
if ($this->isOpen){␍
|
||||
$dbList = $this->connectionId->query("SHOW DATABASES") or $this->HandleException();␍
|
||||
$row_getRS = $dbList->fetch_assoc();␍
|
||||
␍
|
||||
while( $row = $dbList->fetch_row() ) {␍
|
||||
if (($row[0]!="information_schema") && ($row[0]!="mysql")) {␍
|
||||
$xmlOutput .= '<ROW><VALUE>' . $row[0] . '</VALUE></ROW>';␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
}else{␍
|
||||
$this->error = CONN_NOT_OPEN_GET_DB_LIST;␍
|
||||
return $this->error;␍
|
||||
}␍
|
||||
$xmlOutput .= '</ROWS></RESULTSET>';␍
|
||||
␍
|
||||
return $xmlOutput;␍
|
||||
}␍
|
||||
␍
|
||||
function GetPrimaryKeysOfTable($TableName)␍
|
||||
{␍
|
||||
$xmlOutput = '';␍
|
||||
//added backtick for handling reserved words and special characters␍
|
||||
//http://dev.mysql.com/doc/refman/5.0/en/legal-names.html␍
|
||||
$query = "DESCRIBE ".$this->ensureTicks($TableName);␍
|
||||
$result = $this->connectionId->query($query) or $this->HandleException();␍
|
||||
␍
|
||||
␍
|
||||
if ($result)␍
|
||||
{␍
|
||||
$xmlOutput = '<RESULTSET><FIELDS>';␍
|
||||
␍
|
||||
// Columns are referenced by index, so Schema and␍
|
||||
// Catalog must be specified even though they are not supported␍
|
||||
$xmlOutput .= '<FIELD><NAME>TABLE_CATALOG</NAME></FIELD>'; // column 0 (zero-based)␍
|
||||
$xmlOutput .= '<FIELD><NAME>TABLE_SCHEMA</NAME></FIELD>'; // column 1␍
|
||||
$xmlOutput .= '<FIELD><NAME>TABLE_NAME</NAME></FIELD>'; // column 2␍
|
||||
$xmlOutput .= '<FIELD><NAME>COLUMN_NAME</NAME></FIELD>';␍
|
||||
$xmlOutput .= '<FIELD><NAME>DATA_TYPE</NAME></FIELD>';␍
|
||||
$xmlOutput .= '<FIELD><NAME>IS_NULLABLE</NAME></FIELD>';␍
|
||||
$xmlOutput .= '<FIELD><NAME>COLUMN_SIZE</NAME></FIELD>';␍
|
||||
␍
|
||||
$xmlOutput .= '</FIELDS><ROWS>';␍
|
||||
␍
|
||||
// The fields returned from DESCRIBE are: Field, Type, Null, Key, Default, Extra␍
|
||||
while ($row = $result->fetch_array(MYSQLI_ASSOC))␍
|
||||
{␍
|
||||
if (strtoupper($row['Key']) == 'PRI'){␍
|
||||
$xmlOutput .= '<ROW><VALUE/><VALUE/><VALUE/>';␍
|
||||
␍
|
||||
// Separate type from size. Format is: type(size)␍
|
||||
if (preg_match("/(.*)\((.*)\)/", $row['Type'], $ret))␍
|
||||
{␍
|
||||
$type = $ret[1];␍
|
||||
$size = $ret[2];␍
|
||||
}␍
|
||||
else␍
|
||||
{␍
|
||||
$type = $row['Type'];␍
|
||||
$size = '';␍
|
||||
}␍
|
||||
␍
|
||||
// MySQL sets nullable to "YES" or "", so we need to set "NO"␍
|
||||
$null = $row['Null'];␍
|
||||
if ($null == '')␍
|
||||
$null = 'NO';␍
|
||||
␍
|
||||
$xmlOutput .= '<VALUE>' . $row['Field'] . '</VALUE>';␍
|
||||
$xmlOutput .= '<VALUE>' . $type . '</VALUE>';␍
|
||||
$xmlOutput .= '<VALUE>' . $null . '</VALUE>';␍
|
||||
$xmlOutput .= '<VALUE>' . $size . '</VALUE></ROW>';␍
|
||||
}␍
|
||||
}␍
|
||||
$result->free();␍
|
||||
␍
|
||||
$xmlOutput .= '</ROWS></RESULTSET>';␍
|
||||
}␍
|
||||
return $xmlOutput;␍
|
||||
}␍
|
||||
␍
|
||||
} // class MySqlConnection␍
|
||||
} else {␍
|
||||
// If this file is not included from the MMHTTPDB possible hacking problem.␍
|
||||
if (!function_exists('create_error')){␍
|
||||
die();␍
|
||||
}␍
|
||||
␍
|
||||
define('MYSQL_NOT_EXISTS', create_error("Your PHP server doesn't have the MySQL or MySQLi module loaded or you can't use the mysql_(p)connect functions."));␍
|
||||
define('CONN_NOT_OPEN_GET_TABLES', create_error('The Connection could not be opened when trying to retrieve the tables.'));␍
|
||||
define('CONN_NOT_OPEN_GET_DB_LIST', create_error('The Connection could not be opened when trying to retrieve the database list.'));␍
|
||||
␍
|
||||
if (!function_exists('mysql_connect') || !function_exists('mysql_pconnect') || !extension_loaded('mysql')){␍
|
||||
echo MYSQL_NOT_EXISTS;␍
|
||||
die();␍
|
||||
}␍
|
||||
␍
|
||||
// Now let's handle the crashes or any other PHP errors that we can catch␍
|
||||
function KT_ErrorHandler($errno, $errstr, $errfile, $errline) { ␍
|
||||
global $f, $already_sent;␍
|
||||
$errortype = array ( ␍
|
||||
1 => "Error", ␍
|
||||
2 => "Warning", ␍
|
||||
4 => "Parsing Error", ␍
|
||||
8 => "Notice", ␍
|
||||
16 => "Core Error", ␍
|
||||
32 => "Core Warning", ␍
|
||||
64 => "Compile Error", ␍
|
||||
128 => "Compile Warning", ␍
|
||||
256 => "User Error", ␍
|
||||
512 => "User Warning", ␍
|
||||
1024=> "User Notice",␍
|
||||
2048=> "E_ALL",␍
|
||||
2049=> "PHP5 E_STRICT"␍
|
||||
␍
|
||||
);␍
|
||||
$str = sprintf("[%s]\n%s:\t%s\nFile:\t\t'%s'\nLine:\t\t%s\n\n", date('d-m-Y H:i:s'),(isset($errortype[@$errno])?$errortype[@$errno]:('Unknown '.$errno)),@$errstr,@$errfile,@$errline);␍
|
||||
if (error_reporting() != 0) {␍
|
||||
@fwrite($f, $str);␍
|
||||
if (@$errno == 2 && isset($already_sent) && !$already_sent==true){␍
|
||||
$error = '<ERRORS>'."\n";␍
|
||||
$error .= '<ERROR><DESCRIPTION>An Warning Type error appeared. The error is logged into the log file.</DESCRIPTION></ERROR>'."\n";␍
|
||||
$error .= '</ERRORS>'."\n";␍
|
||||
$already_sent = true;␍
|
||||
echo $error;␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
if ($debug_to_file){␍
|
||||
$old_error_handler = set_error_handler("KT_ErrorHandler");␍
|
||||
}␍
|
||||
␍
|
||||
class MySqlConnection␍
|
||||
{␍
|
||||
/*␍
|
||||
// The 'var' keyword is deprecated in PHP5 ... we will define these variables at runtime.␍
|
||||
var $isOpen;␍
|
||||
var $hostname;␍
|
||||
var $database;␍
|
||||
var $username;␍
|
||||
var $password;␍
|
||||
var $timeout;␍
|
||||
var $connectionId;␍
|
||||
var $error;␍
|
||||
*/␍
|
||||
function __construct($ConnectionString, $Timeout, $Host, $DB, $UID, $Pwd)␍
|
||||
{␍
|
||||
$this->isOpen = false;␍
|
||||
$this->timeout = $Timeout;␍
|
||||
$this->error = '';␍
|
||||
␍
|
||||
if( $Host ) { ␍
|
||||
$this->hostname = $Host;␍
|
||||
}␍
|
||||
elseif( preg_match("/host=([^;]+);/", $ConnectionString, $ret) ) {␍
|
||||
$this->hostname = $ret[1];␍
|
||||
}␍
|
||||
␍
|
||||
if( $DB ) {␍
|
||||
$this->database = $DB;␍
|
||||
}␍
|
||||
elseif( preg_match("/db=([^;]+);/", $ConnectionString, $ret) ) {␍
|
||||
$this->database = $ret[1];␍
|
||||
}␍
|
||||
␍
|
||||
if( $UID ) {␍
|
||||
$this->username = $UID;␍
|
||||
}␍
|
||||
elseif( preg_match("/uid=([^;]+);/", $ConnectionString, $ret) ) {␍
|
||||
$this->username = $ret[1];␍
|
||||
}␍
|
||||
␍
|
||||
if( $Pwd ) {␍
|
||||
$this->password = $Pwd;␍
|
||||
}␍
|
||||
elseif( preg_match("/pwd=([^;]+);/", $ConnectionString, $ret) ) {␍
|
||||
$this->password = $ret[1];␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
function Open()␍
|
||||
{␍
|
||||
$this->connectionId = mysql_connect($this->hostname, $this->username, $this->password);␍
|
||||
if (isset($this->connectionId) && $this->connectionId && is_resource($this->connectionId))␍
|
||||
{␍
|
||||
$this->isOpen = ($this->database == "") ? true : mysql_select_db($this->database, $this->connectionId);␍
|
||||
}␍
|
||||
else␍
|
||||
{␍
|
||||
$this->isOpen = false;␍
|
||||
} ␍
|
||||
}␍
|
||||
␍
|
||||
function TestOpen()␍
|
||||
{␍
|
||||
return ($this->isOpen) ? '<TEST status=true></TEST>' : $this->HandleException();␍
|
||||
}␍
|
||||
␍
|
||||
function Close()␍
|
||||
{␍
|
||||
if (is_resource($this->connectionId) && $this->isOpen)␍
|
||||
{␍
|
||||
if (mysql_close($this->connectionId))␍
|
||||
{␍
|
||||
$this->isOpen = false;␍
|
||||
unset($this->connectionId);␍
|
||||
}␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
function GetTables($table_name = '')␍
|
||||
{␍
|
||||
$xmlOutput = "";␍
|
||||
if ($this->isOpen && isset($this->connectionId) && is_resource($this->connectionId)){␍
|
||||
// 1. mysql_list_tables and mysql_tablename are deprecated in PHP5␍
|
||||
// 2. For backward compatibility GetTables don't have any parameters␍
|
||||
if ($table_name === ''){␍
|
||||
$table_name = @$_POST['Database'];␍
|
||||
}␍
|
||||
//added backtick for handling reserved words and special characters␍
|
||||
//http://dev.mysql.com/doc/refman/5.0/en/legal-names.html␍
|
||||
$sql = ' SHOW TABLES FROM ' . $this->ensureTicks($table_name) ;␍
|
||||
$results = mysql_query($sql, $this->connectionId) or $this->HandleException();␍
|
||||
␍
|
||||
$xmlOutput = "<RESULTSET><FIELDS>";␍
|
||||
␍
|
||||
// Columns are referenced by index, so Schema and␍
|
||||
// Catalog must be specified even though they are not supported␍
|
||||
␍
|
||||
$xmlOutput .= '<FIELD><NAME>TABLE_CATALOG</NAME></FIELD>'; // column 0 (zero-based)␍
|
||||
$xmlOutput .= '<FIELD><NAME>TABLE_SCHEMA</NAME></FIELD>'; // column 1␍
|
||||
$xmlOutput .= '<FIELD><NAME>TABLE_NAME</NAME></FIELD>'; // column 2␍
|
||||
␍
|
||||
$xmlOutput .= "</FIELDS><ROWS>";␍
|
||||
␍
|
||||
if (is_resource($results) && mysql_num_rows($results) > 0){␍
|
||||
while ($row = mysql_fetch_array($results)){␍
|
||||
$xmlOutput .= '<ROW><VALUE/><VALUE/><VALUE>' . $row[0]. '</VALUE></ROW>'; ␍
|
||||
}␍
|
||||
}␍
|
||||
$xmlOutput .= "</ROWS></RESULTSET>";␍
|
||||
␍
|
||||
}␍
|
||||
return $xmlOutput;␍
|
||||
}␍
|
||||
␍
|
||||
function GetViews()␍
|
||||
{␍
|
||||
// not supported␍
|
||||
return "<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>";␍
|
||||
}␍
|
||||
␍
|
||||
function GetProcedures()␍
|
||||
{␍
|
||||
// not supported␍
|
||||
return "<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>";␍
|
||||
}␍
|
||||
␍
|
||||
function GetColumnsOfTable($TableName)␍
|
||||
{␍
|
||||
$xmlOutput = "";␍
|
||||
//added backtick for handling reserved words and special characters␍
|
||||
//http://dev.mysql.com/doc/refman/5.0/en/legal-names.html␍
|
||||
$query = "DESCRIBE ".$this->ensureTicks($TableName);␍
|
||||
$result = mysql_query($query) or $this->HandleException();␍
|
||||
␍
|
||||
if ($result)␍
|
||||
{␍
|
||||
$xmlOutput = "<RESULTSET><FIELDS>";␍
|
||||
␍
|
||||
// Columns are referenced by index, so Schema and␍
|
||||
// Catalog must be specified even though they are not supported␍
|
||||
$xmlOutput .= "<FIELD><NAME>TABLE_CATALOG</NAME></FIELD>"; // column 0 (zero-based)␍
|
||||
$xmlOutput .= "<FIELD><NAME>TABLE_SCHEMA</NAME></FIELD>"; // column 1␍
|
||||
$xmlOutput .= "<FIELD><NAME>TABLE_NAME</NAME></FIELD>"; // column 2␍
|
||||
$xmlOutput .= "<FIELD><NAME>COLUMN_NAME</NAME></FIELD>";␍
|
||||
$xmlOutput .= "<FIELD><NAME>DATA_TYPE</NAME></FIELD>";␍
|
||||
$xmlOutput .= "<FIELD><NAME>IS_NULLABLE</NAME></FIELD>";␍
|
||||
$xmlOutput .= "<FIELD><NAME>COLUMN_SIZE</NAME></FIELD>";␍
|
||||
␍
|
||||
$xmlOutput .= "</FIELDS><ROWS>";␍
|
||||
␍
|
||||
// The fields returned from DESCRIBE are: Field, Type, Null, Key, Default, Extra␍
|
||||
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))␍
|
||||
{␍
|
||||
$xmlOutput .= "<ROW><VALUE/><VALUE/><VALUE/>";␍
|
||||
␍
|
||||
// Separate type from size. Format is: type(size)␍
|
||||
if (preg_match("/(.*)\((.*)\)/", $row["Type"], $ret))␍
|
||||
{␍
|
||||
$type = $ret[1];␍
|
||||
$size = $ret[2];␍
|
||||
}␍
|
||||
else␍
|
||||
{␍
|
||||
$type = $row["Type"];␍
|
||||
$size = "";␍
|
||||
}␍
|
||||
␍
|
||||
// MySQL sets nullable to "YES" or "", so we need to set "NO"␍
|
||||
$null = $row["Null"];␍
|
||||
if ($null == "")␍
|
||||
$null = "NO";␍
|
||||
␍
|
||||
$xmlOutput .= "<VALUE>" . $row["Field"] . "</VALUE>";␍
|
||||
$xmlOutput .= "<VALUE>" . $type . "</VALUE>";␍
|
||||
$xmlOutput .= "<VALUE>" . $null . "</VALUE>";␍
|
||||
$xmlOutput .= "<VALUE>" . $size . "</VALUE></ROW>";␍
|
||||
}␍
|
||||
mysql_free_result($result);␍
|
||||
␍
|
||||
$xmlOutput .= "</ROWS></RESULTSET>";␍
|
||||
}␍
|
||||
␍
|
||||
return $xmlOutput;␍
|
||||
}␍
|
||||
␍
|
||||
function GetParametersOfProcedure($ProcedureName, $SchemaName, $CatalogName)␍
|
||||
{␍
|
||||
// not supported on MySQL␍
|
||||
return '<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>';␍
|
||||
}␍
|
||||
␍
|
||||
function ExecuteSQL($aStatement, $MaxRows)␍
|
||||
{␍
|
||||
␍
|
||||
if ($aStatement == "systime") return '<RESULTSET><FIELDS><FIELD><NAME>'.time().'</NAME></FIELD></FIELDS><ROWS></ROWS></RESULTSET>';␍
|
||||
␍
|
||||
$xmlOutput = "";␍
|
||||
␍
|
||||
$result = mysql_query($aStatement) or $this->HandleException();␍
|
||||
␍
|
||||
if (isset($result) && is_resource($result))␍
|
||||
{␍
|
||||
$xmlOutput = "<RESULTSET><FIELDS>";␍
|
||||
␍
|
||||
$fieldCount = mysql_num_fields($result);␍
|
||||
for ($i=0; $i < $fieldCount; $i++)␍
|
||||
{␍
|
||||
$meta = mysql_fetch_field($result);␍
|
||||
if ($meta)␍
|
||||
{␍
|
||||
$xmlOutput .= '<FIELD';␍
|
||||
$xmlOutput .= ' type="' . $meta->type;␍
|
||||
$xmlOutput .= '" max_length="' . $meta->max_length;␍
|
||||
$xmlOutput .= '" table="' . $meta->table;␍
|
||||
$xmlOutput .= '" not_null="' . $meta->not_null;␍
|
||||
$xmlOutput .= '" numeric="' . $meta->numeric;␍
|
||||
$xmlOutput .= '" unsigned="' . $meta->unsigned;␍
|
||||
$xmlOutput .= '" zerofill="' . $meta->zerofill;␍
|
||||
$xmlOutput .= '" primary_key="' . $meta->primary_key;␍
|
||||
$xmlOutput .= '" multiple_key="'. $meta->multiple_key;␍
|
||||
$xmlOutput .= '" unique_key="' . $meta->unique_key;␍
|
||||
$xmlOutput .= '"><NAME>' . $meta->name;␍
|
||||
$xmlOutput .= '</NAME></FIELD>';␍
|
||||
}␍
|
||||
}␍
|
||||
␍
|
||||
$xmlOutput .= "</FIELDS><ROWS>";␍
|
||||
$row = mysql_fetch_assoc($result);␍
|
||||
␍
|
||||
for ($i=0; $row && ($i < $MaxRows); $i++)␍
|
||||
{␍
|
||||
$xmlOutput .= "<ROW>";␍
|
||||
␍
|
||||
foreach ($row as $key => $value)␍
|
||||
{␍
|
||||
$xmlOutput .= "<VALUE>";␍
|
||||
$xmlOutput .= htmlspecialchars($value);␍
|
||||
$xmlOutput .= "</VALUE>";␍
|
||||
}␍
|
||||
␍
|
||||
$xmlOutput .= "</ROW>";␍
|
||||
$row = mysql_fetch_assoc($result);␍
|
||||
}␍
|
||||
␍
|
||||
mysql_free_result($result);␍
|
||||
␍
|
||||
$xmlOutput .= "</ROWS></RESULTSET>";␍
|
||||
}␍
|
||||
␍
|
||||
return $xmlOutput;␍
|
||||
}␍
|
||||
␍
|
||||
function GetProviderTypes()␍
|
||||
{␍
|
||||
return '<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>';␍
|
||||
}␍
|
||||
␍
|
||||
function ExecuteSP($aProcStatement, $TimeOut, $Parameters)␍
|
||||
{␍
|
||||
return '<RESULTSET><FIELDS></FIELDS><ROWS></ROWS></RESULTSET>';␍
|
||||
}␍
|
||||
␍
|
||||
function ReturnsResultSet($ProcedureName)␍
|
||||
{␍
|
||||
return '<RETURNSRESULTSET status=false></RETURNSRESULTSET>';␍
|
||||
}␍
|
||||
␍
|
||||
function SupportsProcedure()␍
|
||||
{ ␍
|
||||
return '<SUPPORTSPROCEDURE status=false></SUPPORTSPROCEDURE>';␍
|
||||
}␍
|
||||
␍
|
||||
/*␍
|
||||
* HandleException added by InterAKT for ease in database translation answer␍
|
||||
*/␍
|
||||
function HandleException()␍
|
||||
{␍
|
||||
global $debug_to_file, $f;␍
|
||||
$this->error = create_error(' MySQL Error#: '. ((int)mysql_errno()) . "\n\n".mysql_error());␍
|
||||
log_messages($this->error);␍
|
||||
die($this->error.'</HTML>');␍
|
||||
}␍
|
||||
␍
|
||||
function ensureTicks($inputSQL)␍
|
||||
{␍
|
||||
$outSQL = $inputSQL;␍
|
||||
//added backtick for handling reserved words and special characters␍
|
||||
//http://dev.mysql.com/doc/refman/5.0/en/legal-names.html␍
|
||||
␍
|
||||
//only add ticks if not already there␍
|
||||
$oLength = strlen($outSQL);␍
|
||||
$bHasTick = false;␍
|
||||
if (($oLength > 0) && (($outSQL[0] == "`") && ($outSQL[$oLength-1] == "`")))␍
|
||||
{␍
|
||||
$bHasTick = true;␍
|
||||
}␍
|
||||
if ($bHasTick == false)␍
|
||||
{␍
|
||||
$outSQL = "`".$outSQL."`";␍
|
||||
}␍
|
||||
return $outSQL;␍
|
||||
}␍
|
||||
␍
|
||||
function GetDatabaseList()␍
|
||||
{␍
|
||||
$xmlOutput = '<RESULTSET><FIELDS><FIELD><NAME>NAME</NAME></FIELD></FIELDS><ROWS>';␍
|
||||
␍
|
||||
if (isset($this->connectionId) && is_resource($this->connectionId)){␍
|
||||
$dbList = mysql_list_dbs($this->connectionId);␍
|
||||
␍
|
||||
while ($row = mysql_fetch_object($dbList))␍
|
||||
{␍
|
||||
$xmlOutput .= '<ROW><VALUE>' . $row->Database . '</VALUE></ROW>';␍
|
||||
}␍
|
||||
}else{␍
|
||||
$this->error = CONN_NOT_OPEN_GET_DB_LIST;␍
|
||||
return $this->error;␍
|
||||
}␍
|
||||
$xmlOutput .= '</ROWS></RESULTSET>';␍
|
||||
␍
|
||||
return $xmlOutput;␍
|
||||
}␍
|
||||
␍
|
||||
function GetPrimaryKeysOfTable($TableName)␍
|
||||
{␍
|
||||
$xmlOutput = '';␍
|
||||
//added backtick for handling reserved words and special characters␍
|
||||
//http://dev.mysql.com/doc/refman/5.0/en/legal-names.html␍
|
||||
$query = "DESCRIBE ".$this->ensureTicks($TableName);␍
|
||||
$result = mysql_query($query) or $this->HandleException();␍
|
||||
␍
|
||||
␍
|
||||
if ($result)␍
|
||||
{␍
|
||||
$xmlOutput = '<RESULTSET><FIELDS>';␍
|
||||
␍
|
||||
// Columns are referenced by index, so Schema and␍
|
||||
// Catalog must be specified even though they are not supported␍
|
||||
$xmlOutput .= '<FIELD><NAME>TABLE_CATALOG</NAME></FIELD>'; // column 0 (zero-based)␍
|
||||
$xmlOutput .= '<FIELD><NAME>TABLE_SCHEMA</NAME></FIELD>'; // column 1␍
|
||||
$xmlOutput .= '<FIELD><NAME>TABLE_NAME</NAME></FIELD>'; // column 2␍
|
||||
$xmlOutput .= '<FIELD><NAME>COLUMN_NAME</NAME></FIELD>';␍
|
||||
$xmlOutput .= '<FIELD><NAME>DATA_TYPE</NAME></FIELD>';␍
|
||||
$xmlOutput .= '<FIELD><NAME>IS_NULLABLE</NAME></FIELD>';␍
|
||||
$xmlOutput .= '<FIELD><NAME>COLUMN_SIZE</NAME></FIELD>';␍
|
||||
␍
|
||||
$xmlOutput .= '</FIELDS><ROWS>';␍
|
||||
␍
|
||||
// The fields returned from DESCRIBE are: Field, Type, Null, Key, Default, Extra␍
|
||||
while ($row = mysql_fetch_array($result, MYSQL_ASSOC))␍
|
||||
{␍
|
||||
if (strtoupper($row['Key']) == 'PRI'){␍
|
||||
$xmlOutput .= '<ROW><VALUE/><VALUE/><VALUE/>';␍
|
||||
␍
|
||||
// Separate type from size. Format is: type(size)␍
|
||||
if (preg_match("/(.*)\((.*)\)/", $row['Type'], $ret))␍
|
||||
{␍
|
||||
$type = $ret[1];␍
|
||||
$size = $ret[2];␍
|
||||
}␍
|
||||
else␍
|
||||
{␍
|
||||
$type = $row['Type'];␍
|
||||
$size = '';␍
|
||||
}␍
|
||||
␍
|
||||
// MySQL sets nullable to "YES" or "", so we need to set "NO"␍
|
||||
$null = $row['Null'];␍
|
||||
if ($null == '')␍
|
||||
$null = 'NO';␍
|
||||
␍
|
||||
$xmlOutput .= '<VALUE>' . $row['Field'] . '</VALUE>';␍
|
||||
$xmlOutput .= '<VALUE>' . $type . '</VALUE>';␍
|
||||
$xmlOutput .= '<VALUE>' . $null . '</VALUE>';␍
|
||||
$xmlOutput .= '<VALUE>' . $size . '</VALUE></ROW>';␍
|
||||
}␍
|
||||
}␍
|
||||
mysql_free_result($result);␍
|
||||
␍
|
||||
$xmlOutput .= '</ROWS></RESULTSET>';␍
|
||||
}␍
|
||||
return $xmlOutput;␍
|
||||
}␍
|
||||
␍
|
||||
} // class MySqlConnection␍
|
||||
␍
|
||||
}␍
|
||||
?>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<info>
|
||||
<infoitem key="UD_langselect" value="name:idlanguages;datatype:3,name:name_languages;datatype:253,name:flag_languages;datatype:253,name:active_languages;datatype:254,name:acronym_languages;datatype:253" />
|
||||
</info>
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php require_once('../Connections/cmctrfdb.php'); ?>␍
|
||||
<?php require_once('../webassist/mysqli/rsobj.php'); ?>␍
|
||||
<?php␍
|
||||
$langselect = new WA_MySQLi_RS("langselect",$cmctrfdb,0);␍
|
||||
$langselect->setQuery("SELECT * FROM languages");␍
|
||||
$langselect->execute();␍
|
||||
?>␍
|
||||
<?php␍
|
||||
$lang=$langselect->getColumnVal("acronym_languages");␍
|
||||
?>␍
|
||||
␍
|
||||
<select>␍
|
||||
<?php␍
|
||||
while(!$langselect->atEnd()) { //dyn select␍
|
||||
?>␍
|
||||
<option value="<?php echo($langselect->getColumnVal("idlanguages")); ?>"><?php echo($langselect->getColumnVal("name_languages")); ?></option>␍
|
||||
<?php␍
|
||||
$langselect->moveNext();␍
|
||||
} //dyn select␍
|
||||
$langselect->moveFirst();␍
|
||||
?>␍
|
||||
</select>
|
||||
@@ -0,0 +1,246 @@
|
||||
<?php␍
|
||||
include('include/headscript.php'); ?>␍
|
||||
<?php ␍
|
||||
// pickup the get variable␍
|
||||
if (isset($_GET["idtrf"])) {␍
|
||||
$idtrf=$_GET["idtrf"]; }␍
|
||||
if (isset($_POST["idtrf"])) {␍
|
||||
$idtrf=$_POST["idtrf"]; }␍
|
||||
//include('include/alertcheckquery.php');␍
|
||||
if (isset($_GET["codestep"])) {␍
|
||||
$code="4"; ␍
|
||||
$InsertQuery = new WA_MySQLi_Query($cmctrfdb);␍
|
||||
$InsertQuery->Action = "insert";␍
|
||||
$InsertQuery->Table = "wheretrfstep";␍
|
||||
$InsertQuery->bindColumn("idtrf", "i", "$idtrf", "WA_DEFAULT");␍
|
||||
$InsertQuery->bindColumn("code", "i", "$code", "WA_DEFAULT");␍
|
||||
$InsertQuery->saveInSession("");␍
|
||||
$InsertQuery->execute();␍
|
||||
$InsertGoTo = "";␍
|
||||
$InsertQuery->redirect($InsertGoTo);␍
|
||||
}␍
|
||||
?>␍
|
||||
<?php /*␍
|
||||
$conn = mysqli_connect($hostname_cmctrfdb, $username_cmctrfdb, $password_cmctrfdb, $database_cmctrfdb);␍
|
||||
if (!$conn) {␍
|
||||
die("Connessione al database fallita: " . mysqli_connect_error());␍
|
||||
}␍
|
||||
␍
|
||||
// Controllo dei campi nulli␍
|
||||
␍
|
||||
$sql = "SELECT COUNT(*) AS num_rows FROM trfstandards WHERE idtrfdetails = $idtrf AND (idprotectioncategory IS NULL OR iddpicategory IS NULL)";␍
|
||||
$resultcat = mysqli_query($conn, $sql);␍
|
||||
// Controllo degli errori␍
|
||||
if (!$resultcat) {␍
|
||||
die("Errore nella query: " . mysqli_error($conn));␍
|
||||
}␍
|
||||
$row = mysqli_fetch_assoc($resultcat);␍
|
||||
if ($row['num_rows'] > 0) {␍
|
||||
// Campi nulli trovati, torna alla pagina standardstep.php e mostra il messaggio di errore␍
|
||||
header("Location: standardstep.php?idtrf=$idtrf&error=tuttiicampidevonoesserericompilati");␍
|
||||
exit;␍
|
||||
} */␍
|
||||
?>␍
|
||||
<?php␍
|
||||
$trfnumberfinal = new WA_MySQLi_RS("trfnumberfinal",$cmctrfdb,1);␍
|
||||
$trfnumberfinal->setQuery("SELECT * FROM `trf-details` WHERE `trf-details`.idtrfdetails='$idtrf'");␍
|
||||
$trfnumberfinal->execute();␍
|
||||
?>␍
|
||||
<?php␍
|
||||
$idcertn=$trfnumberfinal->getColumnVal("idcertification");␍
|
||||
$idtrf=$trfnumberfinal->getColumnVal("idtrfdetails");␍
|
||||
?>␍
|
||||
<?php $idcert=$trfnumberfinal->getColumnVal("idcertification") ?>␍
|
||||
<?php␍
|
||||
$certname = new WA_MySQLi_RS("certname",$cmctrfdb,1);␍
|
||||
$certname->setQuery("SELECT * FROM certificationtype WHERE certificationtype.idcertificationtype='$idcert'");␍
|
||||
$certname->execute();␍
|
||||
?>␍
|
||||
<!DOCTYPE html>␍
|
||||
<html lang="en">␍
|
||||
<head>␍
|
||||
<meta charset="utf-8"/>␍
|
||||
<title>TRF CIMAC </title>␍
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">␍
|
||||
<meta content="CIMAC TRF Portal" name="description"/>␍
|
||||
<meta content="" name="author"/>␍
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>␍
|
||||
<!-- App favicon -->␍
|
||||
<link rel="shortcut icon" href="../images/favicon.ico">␍
|
||||
<!--Form Wizard-->␍
|
||||
<link href="../plugins/jquery-steps/jquery.steps.css" rel="stylesheet" type="text/css">␍
|
||||
<!-- App css -->␍
|
||||
<link href="assets/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>␍
|
||||
<link href="assets/css/jquery-ui.min.css" rel="stylesheet">␍
|
||||
<link href="assets/css/icons.min.css" rel="stylesheet" type="text/css"/>␍
|
||||
<link href="assets/css/metisMenu.min.css" rel="stylesheet" type="text/css"/>␍
|
||||
<link href="assets/css/app.min.css" rel="stylesheet" type="text/css"/>␍
|
||||
<!-- submit form with button -->␍
|
||||
<script>␍
|
||||
function formSubmit() {␍
|
||||
document.forms["myForm"].submit();␍
|
||||
}␍
|
||||
</script>␍
|
||||
</head>␍
|
||||
<body>␍
|
||||
<!-- Top Bar Start -->␍
|
||||
<?php include('include/topbar.php'); ?>␍
|
||||
<!-- Top Bar End -->␍
|
||||
<!-- Left Sidenav -->␍
|
||||
<?php include('include/leftsidenav.php'); ?>␍
|
||||
<!-- end left-sidenav-->␍
|
||||
<div class="page-wrapper">␍
|
||||
<!-- Page Content-->␍
|
||||
<div class="page-content">␍
|
||||
<div class="container-fluid">␍
|
||||
<!-- Page-Title -->␍
|
||||
<div class="row">␍
|
||||
<div class="col-sm-12">␍
|
||||
<div class="page-title-box">␍
|
||||
<div class="float-right">␍
|
||||
<ol class="breadcrumb">␍
|
||||
<li class="breadcrumb-item">␍
|
||||
<a href="javascript:void(0);">TRF</a>␍
|
||||
</li>␍
|
||||
<li class="breadcrumb-item active">Starter</li>␍
|
||||
</ol>␍
|
||||
</div>␍
|
||||
<h4 class="page-title"><?php echo $titlewb; ?>␍
|
||||
</h4>␍
|
||||
</div>␍
|
||||
<!--end page-title-box-->␍
|
||||
</div>␍
|
||||
<!--end col-->␍
|
||||
</div>␍
|
||||
<div class="row">␍
|
||||
<div class="col-sm-12">␍
|
||||
<div class="card">␍
|
||||
<div class="card-body">␍
|
||||
<div class="media">␍
|
||||
␍
|
||||
<?php include('include/appform.php'); ?>␍
|
||||
</div>␍
|
||||
<!--end media-->␍
|
||||
</div>␍
|
||||
<!--end card-body-->␍
|
||||
</div>␍
|
||||
<!--end card-->␍
|
||||
<div class="progress mb-4">␍
|
||||
<div class="progress-bar" role="progressbar" style="width: 60%;" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100">60%</div>␍
|
||||
</div>␍
|
||||
<!-- card for additional info gloves -->␍
|
||||
<?php if ($trfnumberfinal->getColumnVal("idarticletype")=="2") { ?>␍
|
||||
<div class="card">␍
|
||||
<div class="card-body">␍
|
||||
<h4 class="mt-0 header-title"><?php echo $additionalinfotitle; ?>␍
|
||||
</h4>␍
|
||||
<p class="text-muted mb-3"><?php echo $additionalinfotitle_help; ?>␍
|
||||
</p>␍
|
||||
<form class="was-validated" action="addrequirements.php" method="post" name="myForm">␍
|
||||
<div class="checkbox my-2">␍
|
||||
<div class="custom-control custom-checkbox">␍
|
||||
<input type="checkbox" class="custom-control-input" id="virusprot" name="virusprot" data-parsley-multiple="groups" value="Y" data-parsley-mincheck="2" <?php if ($trfnumberfinal->getColumnVal("virusprotection")=='Y') { echo "checked"; } ?>>␍
|
||||
<label class="custom-control-label" for="virusprot"><?php echo $virusprottitle; ?>␍
|
||||
</label>␍
|
||||
</div>␍
|
||||
</div>␍
|
||||
<input type="hidden" name="addinfo" id="addinfo" value="Y">␍
|
||||
<input type="hidden" name="idtrf" id="idtrf" value="<?php echo $idtrf; ?>">␍
|
||||
<br>␍
|
||||
<br>␍
|
||||
<input type="button" onclick="formSubmit()" class="btn btn-gradient-success waves-effect waves-light" value="<?php echo $nextsteptitle; ?>">␍
|
||||
<a href="standardstep.php?idtrf=<?php echo $idtrf; ?>"␍
|
||||
<button type="button" class="btn btn-dark waves-effect waves-light"><?php echo $backstep; ?>␍
|
||||
</button>␍
|
||||
</a>␍
|
||||
</div>␍
|
||||
</form>␍
|
||||
</div>␍
|
||||
<!--end card-body-->␍
|
||||
<?php } ?>␍
|
||||
<!-- card for additional info shoes -->␍
|
||||
<?php if ($trfnumberfinal->getColumnVal("idarticletype")=="1") { ?>␍
|
||||
<div class="card">␍
|
||||
<div class="card-body">␍
|
||||
<h4 class="mt-0 header-title"><?php echo $additionalinfotitle; ?>␍
|
||||
</h4>␍
|
||||
<p class="text-muted mb-3"><?php echo $additionalinfotitle_help; ?>␍
|
||||
</p>␍
|
||||
<form class="form-parsley" action="addrequirements.php" method="post" name="myForm">␍
|
||||
<div class="form-group row">␍
|
||||
<label class="col-sm-3 col-form-label"><?php echo $slippingtitle; ?>␍
|
||||
</label>␍
|
||||
<div class="col-sm-2">␍
|
||||
<select class="form-control" id="slipping" name="slipping">␍
|
||||
<option value="" <?php if (!(strcmp("", ($trfnumberfinal->getColumnVal("slipping"))))) {echo "selected=\"selected\"";} ?>>No</option>␍
|
||||
<option value="SR" <?php if (!(strcmp("SR", ($trfnumberfinal->getColumnVal("slipping"))))) {echo "selected=\"selected\"";} ?>>SR</option>␍
|
||||
<option value="SRA" <?php if (!(strcmp("SRA", ($trfnumberfinal->getColumnVal("slipping"))))) {echo "selected=\"selected\"";} ?>>SRA</option>␍
|
||||
<option value="SRB" <?php if (!(strcmp("SRB", ($trfnumberfinal->getColumnVal("slipping"))))) {echo "selected=\"selected\"";} ?>>SRB</option>␍
|
||||
<option value="SRC" <?php if (!(strcmp("SRC", ($trfnumberfinal->getColumnVal("slipping"))))) {echo "selected=\"selected\"";} ?>>SRC</option>␍
|
||||
</select>␍
|
||||
</select>␍
|
||||
</div>␍
|
||||
</div>␍
|
||||
<div class="checkbox my-2">␍
|
||||
<div class="custom-control custom-checkbox">␍
|
||||
<input type="checkbox" class="custom-control-input" id="orthopedic" name="orthopedic" data-parsley-multiple="groups" value="Y" data-parsley-mincheck="2" <?php if ($trfnumberfinal->getColumnVal("shoesorthopedic")=='Y') { echo "checked"; } ?>>␍
|
||||
<label class="custom-control-label" for="orthopedic"><?php echo $orthopedictitle; ?> (DGUV) ␍
|
||||
</label>␍
|
||||
</div>␍
|
||||
<div class="custom-control custom-checkbox">␍
|
||||
<input type="checkbox" class="custom-control-input" id="autoclavable" name="autoclavable" data-parsley-multiple="groups" value="Y" data-parsley-mincheck="2" <?php if ($trfnumberfinal->getColumnVal("autoclavable")=='Y') { echo "checked"; } ?>>␍
|
||||
<label class="custom-control-label" for="autoclavable"><?php echo $autoclavabletitle; ?>␍
|
||||
</label>␍
|
||||
</div>␍
|
||||
<div class="custom-control custom-checkbox">␍
|
||||
<input type="checkbox" class="custom-control-input" id="esd" name="esd" data-parsley-multiple="groups" value="Y" data-parsley-mincheck="2" <?php if ($trfnumberfinal->getColumnVal("esd")=='Y') { echo "checked"; } ?>>␍
|
||||
<label class="custom-control-label" for="esd"><?php echo $esdtitle; ?>␍
|
||||
</label>␍
|
||||
</div>␍
|
||||
␍
|
||||
</div>␍
|
||||
<input type="hidden" name="addinfo" id="addinfo" value="Y">␍
|
||||
<input type="hidden" name="idtrf" id="idtrf" value="<?php echo $idtrf; ?>">␍
|
||||
<input type="hidden" name="codestep" id="codestep" value="4">␍
|
||||
<br>␍
|
||||
<br>␍
|
||||
<input type="button" onclick="formSubmit()" class="btn btn-gradient-success waves-effect waves-light" value="<?php echo $nextsteptitle; ?>">␍
|
||||
<a href="standardstep.php?idtrf=<?php echo $idtrf; ?>"␍
|
||||
<button type="button" class="btn btn-dark waves-effect waves-light"><?php echo $backstep; ?>␍
|
||||
</button>␍
|
||||
</a>␍
|
||||
</div>␍
|
||||
</form>␍
|
||||
</div>␍
|
||||
<!--end card-body-->␍
|
||||
<?php } ?>␍
|
||||
</div>␍
|
||||
<!--end card-->␍
|
||||
</div>␍
|
||||
<!--end col-->␍
|
||||
</div>␍
|
||||
<!-- end page title end breadcrumb -->␍
|
||||
</div>␍
|
||||
<!-- container -->␍
|
||||
<!-- footer start -->␍
|
||||
<?php include('include/footer.php'); ?>␍
|
||||
</footer>␍
|
||||
<!--end footer-->␍
|
||||
</div>␍
|
||||
<!-- end page content -->␍
|
||||
</div>␍
|
||||
<!-- end page-wrapper -->␍
|
||||
<!-- jQuery -->␍
|
||||
<script src="assets/js/jquery.min.js"/></script>␍
|
||||
<script src="assets/js/bootstrap.bundle.min.js"/></script>␍
|
||||
<script src="assets/js/metismenu.min.js"/></script>␍
|
||||
<script src="assets/js/waves.js"/></script>␍
|
||||
<script src="assets/js/feather.min.js"/></script>␍
|
||||
<script src="assets/js/jquery.slimscroll.min.js"/></script>␍
|
||||
<script src="assets/js/jquery-ui.min.js"/></script>␍
|
||||
<script src="../plugins/jquery-steps/jquery.steps.min.js"/></script>␍
|
||||
<script src="assets/pages/jquery.form-wizard.init.js"/></script>␍
|
||||
<!-- App js -->␍
|
||||
<script src="assets/js/app.js"/></script>␍
|
||||
</body>␍
|
||||
</html>
|
||||
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Console;
|
||||
|
||||
use Illuminate\Console\Scheduling\Schedule;
|
||||
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
|
||||
|
||||
class Kernel extends ConsoleKernel
|
||||
{
|
||||
/**
|
||||
* The Artisan commands provided by your application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $commands = [
|
||||
//
|
||||
];
|
||||
|
||||
/**
|
||||
* Define the application's command schedule.
|
||||
*
|
||||
* @param \Illuminate\Console\Scheduling\Schedule $schedule
|
||||
* @return void
|
||||
*/
|
||||
protected function schedule(Schedule $schedule)
|
||||
{
|
||||
// $schedule->command('inspire')
|
||||
// ->hourly();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the commands for the application.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function commands()
|
||||
{
|
||||
$this->load(__DIR__.'/Commands');
|
||||
|
||||
require base_path('routes/console.php');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Country extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
|
||||
protected $table = 'countries';
|
||||
|
||||
public $timestamps = false;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events;
|
||||
|
||||
abstract class Event
|
||||
{
|
||||
//
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\Permission;
|
||||
|
||||
class Created extends PermissionEvent {}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\Permission;
|
||||
|
||||
class Deleted extends PermissionEvent {}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\Permission;
|
||||
|
||||
use Vanguard\Permission;
|
||||
|
||||
abstract class PermissionEvent
|
||||
{
|
||||
/**
|
||||
* @var Permission
|
||||
*/
|
||||
protected $permission;
|
||||
|
||||
public function __construct(Permission $permission)
|
||||
{
|
||||
$this->permission = $permission;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Permission
|
||||
*/
|
||||
public function getPermission()
|
||||
{
|
||||
return $this->permission;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\Permission;
|
||||
|
||||
class Updated extends PermissionEvent {}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\Role;
|
||||
|
||||
class Created extends RoleEvent {}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\Role;
|
||||
|
||||
class Deleted extends RoleEvent {}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\Role;
|
||||
|
||||
class PermissionsUpdated {}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\Role;
|
||||
|
||||
use Vanguard\Role;
|
||||
|
||||
abstract class RoleEvent
|
||||
{
|
||||
/**
|
||||
* @var Role
|
||||
*/
|
||||
protected $role;
|
||||
|
||||
public function __construct(Role $role)
|
||||
{
|
||||
$this->role = $role;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Role
|
||||
*/
|
||||
public function getRole()
|
||||
{
|
||||
return $this->role;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\Role;
|
||||
|
||||
class Updated extends RoleEvent {}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\Settings;
|
||||
|
||||
class Updated {}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
use Vanguard\User;
|
||||
|
||||
class Banned
|
||||
{
|
||||
/**
|
||||
* @var User
|
||||
*/
|
||||
protected $bannedUser;
|
||||
|
||||
public function __construct(User $bannedUser)
|
||||
{
|
||||
$this->bannedUser = $bannedUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return User
|
||||
*/
|
||||
public function getBannedUser()
|
||||
{
|
||||
return $this->bannedUser;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
class ChangedAvatar {}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
use Vanguard\User;
|
||||
|
||||
class Created
|
||||
{
|
||||
/**
|
||||
* @var User
|
||||
*/
|
||||
protected $createdUser;
|
||||
|
||||
public function __construct(User $createdUser)
|
||||
{
|
||||
$this->createdUser = $createdUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return User
|
||||
*/
|
||||
public function getCreatedUser()
|
||||
{
|
||||
return $this->createdUser;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
use Vanguard\User;
|
||||
|
||||
class Deleted
|
||||
{
|
||||
/**
|
||||
* @var User
|
||||
*/
|
||||
protected $deletedUser;
|
||||
|
||||
public function __construct(User $deletedUser)
|
||||
{
|
||||
$this->deletedUser = $deletedUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return User
|
||||
*/
|
||||
public function getDeletedUser()
|
||||
{
|
||||
return $this->deletedUser;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
class LoggedIn {}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
class LoggedOut {}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
use Vanguard\User;
|
||||
|
||||
class RequestedPasswordResetEmail
|
||||
{
|
||||
/**
|
||||
* @var User
|
||||
*/
|
||||
private $user;
|
||||
|
||||
public function __construct(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return User
|
||||
*/
|
||||
public function getUser()
|
||||
{
|
||||
return $this->user;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
class TwoFactorDisabled {}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
use Vanguard\User;
|
||||
|
||||
class TwoFactorDisabledByAdmin
|
||||
{
|
||||
/**
|
||||
* @var User
|
||||
*/
|
||||
protected $user;
|
||||
|
||||
public function __construct(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return User
|
||||
*/
|
||||
public function getUser()
|
||||
{
|
||||
return $this->user;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
class TwoFactorEnabled {}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
use Vanguard\User;
|
||||
|
||||
class TwoFactorEnabledByAdmin
|
||||
{
|
||||
/**
|
||||
* @var User
|
||||
*/
|
||||
protected $user;
|
||||
|
||||
public function __construct(User $user)
|
||||
{
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return User
|
||||
*/
|
||||
public function getUser()
|
||||
{
|
||||
return $this->user;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
use Vanguard\User;
|
||||
|
||||
class UpdatedByAdmin
|
||||
{
|
||||
/**
|
||||
* @var User
|
||||
*/
|
||||
protected $updatedUser;
|
||||
|
||||
public function __construct(User $updatedUser)
|
||||
{
|
||||
$this->updatedUser = $updatedUser;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return User
|
||||
*/
|
||||
public function getUpdatedUser()
|
||||
{
|
||||
return $this->updatedUser;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Events\User;
|
||||
|
||||
class UpdatedProfileDetails {}
|
||||
@@ -0,0 +1,55 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Exceptions;
|
||||
|
||||
use Exception;
|
||||
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Throwable;
|
||||
|
||||
class Handler extends ExceptionHandler
|
||||
{
|
||||
/**
|
||||
* A list of the exception types that are not reported.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $dontReport = [
|
||||
//
|
||||
];
|
||||
|
||||
/**
|
||||
* A list of the inputs that are never flashed for validation exceptions.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $dontFlash = [
|
||||
'password',
|
||||
'password_confirmation',
|
||||
];
|
||||
|
||||
/**
|
||||
* Report or log an exception.
|
||||
*
|
||||
* @param Throwable $exception
|
||||
* @return void
|
||||
* @throws Exception
|
||||
*/
|
||||
public function report(Throwable $exception)
|
||||
{
|
||||
parent::report($exception);
|
||||
}
|
||||
|
||||
/**
|
||||
* Render an exception into an HTTP response.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param Throwable $e
|
||||
* @return Response
|
||||
* @throws Throwable
|
||||
*/
|
||||
public function render($request, Throwable $e)
|
||||
{
|
||||
return parent::render($request, $e);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
|
||||
abstract class ApiController extends Controller
|
||||
{
|
||||
protected $statusCode = Response::HTTP_OK;
|
||||
|
||||
/**
|
||||
* Getter for statusCode
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getStatusCode()
|
||||
{
|
||||
return $this->statusCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* Setter for statusCode
|
||||
*
|
||||
* @param int $statusCode Value to set
|
||||
*
|
||||
* @return self
|
||||
*/
|
||||
public function setStatusCode($statusCode)
|
||||
{
|
||||
$this->statusCode = $statusCode;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function respondWithSuccess($statusCode = Response::HTTP_OK)
|
||||
{
|
||||
return $this->setStatusCode($statusCode)
|
||||
->respondWithArray(['success' => true]);
|
||||
}
|
||||
|
||||
protected function respondWithArray(array $array, array $headers = [])
|
||||
{
|
||||
$response = \Response::json($array, $this->statusCode, $headers);
|
||||
|
||||
$response->header('Content-Type', 'application/json');
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
protected function respondWithError($message)
|
||||
{
|
||||
if ($this->statusCode === Response::HTTP_OK) {
|
||||
trigger_error(
|
||||
"You better have a really good reason for erroring on a 200...",
|
||||
E_USER_WARNING
|
||||
);
|
||||
}
|
||||
|
||||
return $this->respondWithArray([
|
||||
'message' => $message
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a Response with a 403 HTTP header and a given message.
|
||||
*
|
||||
* @param string $message
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function errorForbidden($message = 'Forbidden')
|
||||
{
|
||||
return $this->setStatusCode(Response::HTTP_FORBIDDEN)
|
||||
->respondWithError($message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a Response with a 500 HTTP header and a given message.
|
||||
*
|
||||
* @param string $message
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function errorInternalError($message = 'Internal Error')
|
||||
{
|
||||
return $this->setStatusCode(Response::HTTP_INTERNAL_SERVER_ERROR)
|
||||
->respondWithError($message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a Response with a 404 HTTP header and a given message.
|
||||
*
|
||||
* @param string $message
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function errorNotFound($message = 'Resource Not Found')
|
||||
{
|
||||
return $this->setStatusCode(Response::HTTP_NOT_FOUND)
|
||||
->respondWithError($message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a Response with a 401 HTTP header and a given message.
|
||||
*
|
||||
* @param string $message
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function errorUnauthorized($message = 'Unauthorized')
|
||||
{
|
||||
return $this->setStatusCode(Response::HTTP_UNAUTHORIZED)
|
||||
->respondWithError($message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Auth;
|
||||
|
||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Vanguard\Events\User\LoggedIn;
|
||||
use Vanguard\Events\User\LoggedOut;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\Auth\ApiLoginRequest;
|
||||
use Vanguard\User;
|
||||
|
||||
/**
|
||||
* Class LoginController
|
||||
* @package Vanguard\Http\Controllers\Api\Auth
|
||||
*/
|
||||
class AuthController extends ApiController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest')->only('login');
|
||||
$this->middleware('auth')->only('logout');
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to log the user in and generate unique
|
||||
* JWT token on successful authentication.
|
||||
*
|
||||
* @param ApiLoginRequest $request
|
||||
* @return JsonResponse|Response
|
||||
* @throws BindingResolutionException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function token(ApiLoginRequest $request)
|
||||
{
|
||||
$user = $this->findUser($request);
|
||||
|
||||
if ($user->isBanned()) {
|
||||
return $this->errorUnauthorized(__('Your account is banned by administrators.'));
|
||||
}
|
||||
|
||||
Auth::setUser($user);
|
||||
|
||||
event(new LoggedIn);
|
||||
|
||||
return $this->respondWithArray([
|
||||
'token' => $user->createToken($request->device_name)->plainTextToken
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the user instance from the API request.
|
||||
*
|
||||
* @param ApiLoginRequest $request
|
||||
* @return mixed
|
||||
* @throws BindingResolutionException
|
||||
* @throws ValidationException
|
||||
*/
|
||||
private function findUser(ApiLoginRequest $request)
|
||||
{
|
||||
$user = User::where($request->getCredentials())->first();
|
||||
|
||||
if (! $user || ! Hash::check($request->password, $user->password)) {
|
||||
throw ValidationException::withMessages([
|
||||
'username' => [trans('auth.failed')],
|
||||
]);
|
||||
}
|
||||
|
||||
return $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* Logout user and invalidate token.
|
||||
* @return JsonResponse
|
||||
*/
|
||||
public function logout()
|
||||
{
|
||||
event(new LoggedOut);
|
||||
|
||||
auth()->user()->currentAccessToken()->delete();
|
||||
|
||||
return $this->respondWithSuccess();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Auth\Password;
|
||||
|
||||
use Password;
|
||||
use Vanguard\Events\User\RequestedPasswordResetEmail;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\Auth\PasswordRemindRequest;
|
||||
use Vanguard\Mail\ResetPassword;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
|
||||
class RemindController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Send a reset link to the given user.
|
||||
*
|
||||
* @param PasswordRemindRequest $request
|
||||
* @param UserRepository $users
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(PasswordRemindRequest $request, UserRepository $users)
|
||||
{
|
||||
$user = $users->findByEmail($request->email);
|
||||
|
||||
$token = Password::getRepository()->create($user);
|
||||
|
||||
\Mail::to($user)->send(new ResetPassword($token));
|
||||
|
||||
event(new RequestedPasswordResetEmail($user));
|
||||
|
||||
return $this->respondWithSuccess();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Auth\Password;
|
||||
|
||||
use Illuminate\Auth\Events\PasswordReset;
|
||||
use Password;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\Auth\PasswordResetRequest;
|
||||
|
||||
class ResetController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Reset the given user's password.
|
||||
*
|
||||
* @param PasswordResetRequest $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(PasswordResetRequest $request)
|
||||
{
|
||||
$response = Password::reset($request->credentials(), function ($user, $password) {
|
||||
$this->resetPassword($user, $password);
|
||||
});
|
||||
|
||||
switch ($response) {
|
||||
case Password::PASSWORD_RESET:
|
||||
return $this->respondWithSuccess();
|
||||
|
||||
default:
|
||||
return $this->setStatusCode(400)
|
||||
->respondWithError(trans($response));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the given user's password.
|
||||
*
|
||||
* @param \Illuminate\Contracts\Auth\CanResetPassword $user
|
||||
* @param string $password
|
||||
* @return void
|
||||
*/
|
||||
protected function resetPassword($user, $password)
|
||||
{
|
||||
$user->password = $password;
|
||||
$user->save();
|
||||
|
||||
event(new PasswordReset($user));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Auth;
|
||||
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\Auth\RegisterRequest;
|
||||
use Vanguard\Repositories\Role\RoleRepository;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Support\Enum\UserStatus;
|
||||
|
||||
class RegistrationController extends ApiController
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* @var RoleRepository
|
||||
*/
|
||||
private $roles;
|
||||
|
||||
/**
|
||||
* Create a new authentication controller instance.
|
||||
* @param UserRepository $users
|
||||
* @param RoleRepository $roles
|
||||
*/
|
||||
public function __construct(UserRepository $users, RoleRepository $roles)
|
||||
{
|
||||
$this->users = $users;
|
||||
$this->roles = $roles;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param RegisterRequest $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index(RegisterRequest $request)
|
||||
{
|
||||
$role = $this->roles->findByName('User');
|
||||
|
||||
$user = $this->users->create(
|
||||
array_merge($request->validFormData(), ['role_id' => $role->id])
|
||||
);
|
||||
|
||||
event(new Registered($user));
|
||||
|
||||
return $this->setStatusCode(201)
|
||||
->respondWithArray([
|
||||
'requires_email_confirmation' => !! setting('reg_email_confirmation')
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify email via email confirmation token.
|
||||
* @param $token
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function verifyEmail($token)
|
||||
{
|
||||
if (! setting('reg_email_confirmation')) {
|
||||
return $this->errorNotFound();
|
||||
}
|
||||
|
||||
if ($user = $this->users->findByConfirmationToken($token)) {
|
||||
$this->users->update($user->id, [
|
||||
'status' => UserStatus::ACTIVE,
|
||||
'confirmation_token' => null
|
||||
]);
|
||||
|
||||
return $this->respondWithSuccess();
|
||||
}
|
||||
|
||||
return $this->setStatusCode(400)
|
||||
->respondWithError("Invalid confirmation token.");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Auth;
|
||||
|
||||
use Auth;
|
||||
use Exception;
|
||||
use Socialite;
|
||||
use Vanguard\Events\User\LoggedIn;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\Auth\Social\ApiAuthenticateRequest;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Services\Auth\Social\SocialManager;
|
||||
|
||||
class SocialLoginController extends ApiController
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* @var SocialManager
|
||||
*/
|
||||
private $socialManager;
|
||||
|
||||
/**
|
||||
* @param UserRepository $users
|
||||
* @param SocialManager $socialManager
|
||||
*/
|
||||
public function __construct(UserRepository $users, SocialManager $socialManager)
|
||||
{
|
||||
$this->users = $users;
|
||||
$this->socialManager = $socialManager;
|
||||
}
|
||||
|
||||
public function index(ApiAuthenticateRequest $request)
|
||||
{
|
||||
try {
|
||||
$socialUser = Socialite::driver($request->network)->userFromToken($request->social_token);
|
||||
} catch (Exception $e) {
|
||||
return $this->errorInternalError("Could not connect to specified social network.");
|
||||
}
|
||||
|
||||
$user = $this->users->findBySocialId(
|
||||
$request->network,
|
||||
$socialUser->getId()
|
||||
);
|
||||
|
||||
if (! $user) {
|
||||
if (! setting('reg_enabled')) {
|
||||
return $this->errorForbidden("Only users who already created an account can log in.");
|
||||
}
|
||||
|
||||
$user = $this->socialManager->associate($socialUser, $request->network);
|
||||
}
|
||||
|
||||
if ($user->isBanned()) {
|
||||
return $this->errorForbidden(__("Your account is banned by administrators."));
|
||||
}
|
||||
|
||||
Auth::setUser($user);
|
||||
|
||||
event(new LoggedIn);
|
||||
|
||||
return $this->respondWithArray([
|
||||
'token' => $user->createToken($request->device_name)->plainTextToken
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Auth;
|
||||
|
||||
use Illuminate\Auth\Access\AuthorizationException;
|
||||
use Illuminate\Auth\Events\Verified;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Illuminate\Routing\Exceptions\InvalidSignatureException;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\Auth\ApiVerifyEmailRequest;
|
||||
|
||||
class VerificationController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('throttle:6,1')->only('resend');
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark the authenticated user's email address as verified.
|
||||
*
|
||||
* @param ApiVerifyEmailRequest $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*
|
||||
* @throws AuthorizationException
|
||||
*/
|
||||
public function verify(ApiVerifyEmailRequest $request)
|
||||
{
|
||||
if (! setting('reg_email_confirmation')) {
|
||||
return $this->errorNotFound();
|
||||
}
|
||||
|
||||
$this->verifySignature($request);
|
||||
|
||||
if ($request->user()->hasVerifiedEmail()) {
|
||||
return $this->emailAlreadyVerifiedResponse();
|
||||
}
|
||||
|
||||
if ($request->user()->markEmailAsVerified()) {
|
||||
event(new Verified($request->user()));
|
||||
}
|
||||
|
||||
return $this->respondWithSuccess();
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify request signature.
|
||||
*
|
||||
* @param ApiVerifyEmailRequest $baseRequest
|
||||
* @throws AuthorizationException
|
||||
*/
|
||||
private function verifySignature(ApiVerifyEmailRequest $baseRequest)
|
||||
{
|
||||
$request = Request::create(
|
||||
route('verification.verify', $baseRequest->only('id', 'hash')),
|
||||
Request::METHOD_GET,
|
||||
$baseRequest->only('expires', 'signature')
|
||||
);
|
||||
|
||||
if (! $request->hasValidSignature()) {
|
||||
throw new InvalidSignatureException;
|
||||
}
|
||||
|
||||
if (! hash_equals((string) $baseRequest->id, (string) auth()->user()->getKey())) {
|
||||
throw new AuthorizationException;
|
||||
}
|
||||
|
||||
if (! hash_equals((string) $baseRequest->hash, sha1(auth()->user()->getEmailForVerification()))) {
|
||||
throw new AuthorizationException;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
protected function emailAlreadyVerifiedResponse()
|
||||
{
|
||||
return $this->setStatusCode(Response::HTTP_BAD_REQUEST)
|
||||
->respondWithError(__('E-Mail already verified.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Resend the email verification notification.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function resend(Request $request)
|
||||
{
|
||||
if ($request->user()->hasVerifiedEmail()) {
|
||||
return $this->emailAlreadyVerifiedResponse();
|
||||
}
|
||||
|
||||
$request->user()->sendEmailVerificationNotification();
|
||||
|
||||
return $this->respondWithSuccess(Response::HTTP_ACCEPTED);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Authorization;
|
||||
|
||||
use Spatie\QueryBuilder\AllowedFilter;
|
||||
use Spatie\QueryBuilder\QueryBuilder;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\Permission\CreatePermissionRequest;
|
||||
use Vanguard\Http\Requests\Permission\RemovePermissionRequest;
|
||||
use Vanguard\Http\Requests\Permission\UpdatePermissionRequest;
|
||||
use Vanguard\Http\Resources\PermissionResource;
|
||||
use Vanguard\Permission;
|
||||
use Vanguard\Repositories\Permission\PermissionRepository;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api\Users
|
||||
*/
|
||||
class PermissionsController extends ApiController
|
||||
{
|
||||
/**
|
||||
* @var PermissionRepository
|
||||
*/
|
||||
private $permissions;
|
||||
|
||||
public function __construct(PermissionRepository $permissions)
|
||||
{
|
||||
$this->permissions = $permissions;
|
||||
$this->middleware('permission:permissions.manage');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all system permissions.
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$permissions = QueryBuilder::for(Permission::class)
|
||||
->allowedFilters([
|
||||
AllowedFilter::partial('name'),
|
||||
AllowedFilter::partial('display_name'),
|
||||
AllowedFilter::exact('role', 'role_id'),
|
||||
])
|
||||
->allowedSorts(['name', 'created_at'])
|
||||
->defaultSort('created_at')
|
||||
->paginate();
|
||||
|
||||
return PermissionResource::collection($permissions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new permission from request.
|
||||
* @param CreatePermissionRequest $request
|
||||
* @return PermissionResource
|
||||
*/
|
||||
public function store(CreatePermissionRequest $request)
|
||||
{
|
||||
$permission = $this->permissions->create(
|
||||
$request->only(['name', 'display_name', 'description'])
|
||||
);
|
||||
|
||||
return new PermissionResource($permission);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get info about specified permission.
|
||||
* @param Permission $permission
|
||||
* @return PermissionResource
|
||||
*/
|
||||
public function show(Permission $permission)
|
||||
{
|
||||
return new PermissionResource($permission);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update specified permission.
|
||||
* @param Permission $permission
|
||||
* @param UpdatePermissionRequest $request
|
||||
* @return PermissionResource
|
||||
*/
|
||||
public function update(Permission $permission, UpdatePermissionRequest $request)
|
||||
{
|
||||
$input = collect($request->all());
|
||||
|
||||
$permission = $this->permissions->update(
|
||||
$permission->id,
|
||||
$input->only(['name', 'display_name', 'description'])->toArray()
|
||||
);
|
||||
|
||||
return new PermissionResource($permission);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove specified permission from storage.
|
||||
* @param Permission $permission
|
||||
* @param RemovePermissionRequest $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Permission $permission, RemovePermissionRequest $request)
|
||||
{
|
||||
$this->permissions->delete($permission->id);
|
||||
|
||||
return $this->respondWithSuccess();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Authorization;
|
||||
|
||||
use Vanguard\Events\Role\PermissionsUpdated;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\Role\UpdateRolePermissionsRequest;
|
||||
use Vanguard\Http\Resources\PermissionResource;
|
||||
use Vanguard\Repositories\Role\RoleRepository;
|
||||
use Vanguard\Role;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api
|
||||
*/
|
||||
class RolePermissionsController extends ApiController
|
||||
{
|
||||
/**
|
||||
* @var RoleRepository
|
||||
*/
|
||||
private $roles;
|
||||
|
||||
public function __construct(RoleRepository $roles)
|
||||
{
|
||||
$this->roles = $roles;
|
||||
$this->middleware('permission:permissions.manage');
|
||||
}
|
||||
|
||||
public function show(Role $role)
|
||||
{
|
||||
return PermissionResource::collection($role->cachedPermissions());
|
||||
}
|
||||
|
||||
/**
|
||||
* Update specified role.
|
||||
* @param Role $role
|
||||
* @param UpdateRolePermissionsRequest $request
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function update(Role $role, UpdateRolePermissionsRequest $request)
|
||||
{
|
||||
$this->roles->updatePermissions(
|
||||
$role->id,
|
||||
$request->permissions
|
||||
);
|
||||
|
||||
event(new PermissionsUpdated);
|
||||
|
||||
return PermissionResource::collection($role->cachedPermissions());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Authorization;
|
||||
|
||||
use Cache;
|
||||
use Spatie\QueryBuilder\QueryBuilder;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\Role\CreateRoleRequest;
|
||||
use Vanguard\Http\Requests\Role\RemoveRoleRequest;
|
||||
use Vanguard\Http\Requests\Role\UpdateRoleRequest;
|
||||
use Vanguard\Http\Resources\RoleResource;
|
||||
use Vanguard\Repositories\Role\RoleRepository;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Role;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api\Users
|
||||
*/
|
||||
class RolesController extends ApiController
|
||||
{
|
||||
/**
|
||||
* @var RoleRepository
|
||||
*/
|
||||
private $roles;
|
||||
|
||||
public function __construct(RoleRepository $roles)
|
||||
{
|
||||
$this->roles = $roles;
|
||||
$this->middleware('permission:roles.manage');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all system roles with users count for each role.
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$roles = QueryBuilder::for(Role::class)
|
||||
->allowedIncludes(RoleResource::allowedIncludes())
|
||||
->allowedFilters(['name'])
|
||||
->allowedSorts(['name', 'created_at'])
|
||||
->defaultSort('created_at')
|
||||
->paginate();
|
||||
|
||||
return RoleResource::collection($roles);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new role from the request.
|
||||
* @param CreateRoleRequest $request
|
||||
* @return RoleResource
|
||||
*/
|
||||
public function store(CreateRoleRequest $request)
|
||||
{
|
||||
$role = $this->roles->create(
|
||||
$request->only(['name', 'display_name', 'description'])
|
||||
);
|
||||
|
||||
return new RoleResource($role);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return info about specified role.
|
||||
* @param $id
|
||||
* @return RoleResource
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
$role = QueryBuilder::for(Role::where('id', $id))
|
||||
->allowedIncludes(RoleResource::allowedIncludes())
|
||||
->first();
|
||||
|
||||
return new RoleResource($role);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update specified role.
|
||||
* @param Role $role
|
||||
* @param UpdateRoleRequest $request
|
||||
* @return RoleResource
|
||||
*/
|
||||
public function update(Role $role, UpdateRoleRequest $request)
|
||||
{
|
||||
$input = collect($request->all());
|
||||
|
||||
$role = $this->roles->update(
|
||||
$role->id,
|
||||
$input->only(['name', 'display_name', 'description'])->toArray()
|
||||
);
|
||||
|
||||
return new RoleResource($role);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove specified role (if role is removable).
|
||||
* @param Role $role
|
||||
* @param UserRepository $users
|
||||
* @param RemoveRoleRequest $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(Role $role, UserRepository $users, RemoveRoleRequest $request)
|
||||
{
|
||||
$userRole = $this->roles->findByName('User');
|
||||
|
||||
$users->switchRolesForUsers($role->id, $userRole->id);
|
||||
|
||||
$this->roles->delete($role->id);
|
||||
|
||||
Cache::flush();
|
||||
|
||||
return $this->respondWithSuccess();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api;
|
||||
|
||||
use Vanguard\Http\Resources\CountryResource;
|
||||
use Vanguard\Repositories\Country\CountryRepository;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api
|
||||
*/
|
||||
class CountriesController extends ApiController
|
||||
{
|
||||
/**
|
||||
* @var CountryRepository
|
||||
*/
|
||||
private $countries;
|
||||
|
||||
public function __construct(CountryRepository $countries)
|
||||
{
|
||||
$this->countries = $countries;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get list of all available countries.
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return CountryResource::collection($this->countries->all());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Profile;
|
||||
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\User\UpdateProfileLoginDetailsRequest;
|
||||
use Vanguard\Http\Resources\UserResource;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api\Profile
|
||||
*/
|
||||
class AuthDetailsController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Updates user profile details.
|
||||
*
|
||||
* @param UpdateProfileLoginDetailsRequest $request
|
||||
* @param UserRepository $users
|
||||
* @return UserResource
|
||||
*/
|
||||
public function update(UpdateProfileLoginDetailsRequest $request, UserRepository $users)
|
||||
{
|
||||
$user = $request->user();
|
||||
|
||||
$data = $request->only(['email', 'username', 'password']);
|
||||
|
||||
$user = $users->update($user->id, $data);
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Profile;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Vanguard\Events\User\ChangedAvatar;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\User\UploadAvatarRawRequest;
|
||||
use Vanguard\Http\Resources\UserResource;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Services\Upload\UserAvatarManager;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api\Profile
|
||||
*/
|
||||
class AvatarController extends ApiController
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* @var UserAvatarManager
|
||||
*/
|
||||
private $avatarManager;
|
||||
|
||||
public function __construct(UserRepository $users, UserAvatarManager $avatarManager)
|
||||
{
|
||||
$this->users = $users;
|
||||
$this->avatarManager = $avatarManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param UploadAvatarRawRequest $request
|
||||
* @return UserResource
|
||||
*/
|
||||
public function update(UploadAvatarRawRequest $request)
|
||||
{
|
||||
$name = $this->avatarManager->uploadAndCropAvatar(
|
||||
$request->file('file')
|
||||
);
|
||||
|
||||
$user = $this->users->update(
|
||||
auth()->id(),
|
||||
['avatar' => $name]
|
||||
);
|
||||
|
||||
event(new ChangedAvatar);
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @return UserResource
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function updateExternal(Request $request)
|
||||
{
|
||||
$this->validate($request, [
|
||||
'url' => 'required|url'
|
||||
]);
|
||||
|
||||
$this->avatarManager->deleteAvatarIfUploaded(
|
||||
auth()->user()
|
||||
);
|
||||
|
||||
$user = $this->users->update(
|
||||
auth()->id(),
|
||||
['avatar' => $request->url]
|
||||
);
|
||||
|
||||
event(new ChangedAvatar);
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove avatar for currently authenticated user and set it to null.
|
||||
* @return UserResource
|
||||
*/
|
||||
public function destroy()
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
$this->avatarManager->deleteAvatarIfUploaded($user);
|
||||
|
||||
$user = $this->users->update(
|
||||
$user->id,
|
||||
['avatar' => null]
|
||||
);
|
||||
|
||||
event(new ChangedAvatar);
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Profile;
|
||||
|
||||
use Vanguard\Events\User\UpdatedProfileDetails;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\User\UpdateProfileDetailsRequest;
|
||||
use Vanguard\Http\Resources\UserResource;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api\Profile
|
||||
*/
|
||||
class DetailsController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Handle user details request.
|
||||
* @return UserResource
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return new UserResource(auth()->user());
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates user profile details.
|
||||
* @param UpdateProfileDetailsRequest $request
|
||||
* @param UserRepository $users
|
||||
* @return UserResource
|
||||
*/
|
||||
public function update(UpdateProfileDetailsRequest $request, UserRepository $users)
|
||||
{
|
||||
$user = $request->user();
|
||||
|
||||
$data = collect($request->all());
|
||||
|
||||
$data = $data->only([
|
||||
'first_name', 'last_name', 'birthday',
|
||||
'phone', 'address', 'country_id', 'langid'
|
||||
])->toArray();
|
||||
|
||||
if (! isset($data['country_id'])) {
|
||||
$data['country_id'] = $user->country_id;
|
||||
}
|
||||
|
||||
$user = $users->update($user->id, $data);
|
||||
|
||||
event(new UpdatedProfileDetails);
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Profile;
|
||||
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Resources\SessionResource;
|
||||
use Vanguard\Repositories\Session\SessionRepository;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api\Profile
|
||||
*/
|
||||
class SessionsController extends ApiController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
$this->middleware('session.database');
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle user details request.
|
||||
* @param SessionRepository $sessions
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index(SessionRepository $sessions)
|
||||
{
|
||||
$sessions = $sessions->getUserSessions(auth()->id());
|
||||
|
||||
return SessionResource::collection($sessions);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Profile;
|
||||
|
||||
use Authy;
|
||||
use Vanguard\Events\User\TwoFactorDisabled;
|
||||
use Vanguard\Events\User\TwoFactorEnabled;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\TwoFactor\EnableTwoFactorRequest;
|
||||
use Vanguard\Http\Requests\TwoFactor\VerifyTwoFactorTokenRequest;
|
||||
use Vanguard\Http\Resources\UserResource;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api\Profile
|
||||
*/
|
||||
class TwoFactorController extends ApiController
|
||||
{
|
||||
/**
|
||||
* Enable 2FA for specified user.
|
||||
* @param EnableTwoFactorRequest $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(EnableTwoFactorRequest $request)
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
if (Authy::isEnabled($user)) {
|
||||
return $this->setStatusCode(422)
|
||||
->respondWithError("2FA is already enabled for this user.");
|
||||
}
|
||||
|
||||
$user->setAuthPhoneInformation(
|
||||
$request->country_code,
|
||||
$request->phone_number
|
||||
);
|
||||
|
||||
Authy::register($user);
|
||||
|
||||
$user->save();
|
||||
|
||||
Authy::sendTwoFactorVerificationToken($user);
|
||||
|
||||
return $this->respondWithArray([
|
||||
'message' => 'Verification token sent.'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify provided 2FA token.
|
||||
*
|
||||
* @param VerifyTwoFactorTokenRequest $request
|
||||
* @return \Illuminate\Http\JsonResponse|UserResource
|
||||
*/
|
||||
public function verify(VerifyTwoFactorTokenRequest $request)
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
if (! Authy::tokenIsValid($user, $request->token)) {
|
||||
return $this->setStatusCode(422)
|
||||
->respondWithError("Invalid 2FA token.");
|
||||
}
|
||||
|
||||
$user->setTwoFactorAuthProviderOptions(array_merge(
|
||||
$user->getTwoFactorAuthProviderOptions(),
|
||||
['enabled' => true]
|
||||
));
|
||||
|
||||
$user->save();
|
||||
|
||||
event(new TwoFactorEnabled);
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable 2FA for currently authenticated user.
|
||||
* @return \Illuminate\Http\JsonResponse|UserResource
|
||||
*/
|
||||
public function destroy()
|
||||
{
|
||||
$user = auth()->user();
|
||||
|
||||
if (! Authy::isEnabled($user)) {
|
||||
return $this->setStatusCode(422)
|
||||
->respondWithError("2FA is not enabled for this user.");
|
||||
}
|
||||
|
||||
Authy::delete($user);
|
||||
|
||||
$user->save();
|
||||
|
||||
event(new TwoFactorDisabled);
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api;
|
||||
|
||||
use Vanguard\Http\Resources\SessionResource;
|
||||
use Vanguard\Repositories\Session\SessionRepository;
|
||||
|
||||
/**
|
||||
* Class SessionsController
|
||||
* @package Vanguard\Http\Controllers\Api\Users
|
||||
*/
|
||||
class SessionsController extends ApiController
|
||||
{
|
||||
/**
|
||||
* @var SessionRepository
|
||||
*/
|
||||
private $sessions;
|
||||
|
||||
public function __construct(SessionRepository $sessions)
|
||||
{
|
||||
$this->middleware('session.database');
|
||||
$this->sessions = $sessions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get info about specified session.
|
||||
* @param $session
|
||||
* @return SessionResource
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function show($session)
|
||||
{
|
||||
$this->authorize('manage-session', $session);
|
||||
|
||||
return new SessionResource($session);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy specified session.
|
||||
* @param $session
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||
*/
|
||||
public function destroy($session)
|
||||
{
|
||||
$this->authorize('manage-session', $session);
|
||||
|
||||
$this->sessions->invalidateSession($session->id);
|
||||
|
||||
return $this->respondWithSuccess();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api;
|
||||
|
||||
use Setting;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api\Settings
|
||||
*/
|
||||
class SettingsController extends ApiController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:settings.general');
|
||||
}
|
||||
/**
|
||||
* System settings.
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return response()->json(Setting::all());
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Vanguard\Http\Resources\UserResource;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Support\Enum\UserStatus;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api
|
||||
*/
|
||||
class StatsController extends ApiController
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->middleware('role:Admin');
|
||||
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Illuminate\Http\JsonResponse|mixed
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
$usersPerMonth = $this->users->countOfNewUsersPerMonth(
|
||||
Carbon::now()->subYear()->startOfMonth(),
|
||||
Carbon::now()->endOfMonth()
|
||||
);
|
||||
|
||||
$usersPerStatus = [
|
||||
'total' => $this->users->count(),
|
||||
'new' => $this->users->newUsersCount(),
|
||||
'banned' => $this->users->countByStatus(UserStatus::BANNED),
|
||||
'unconfirmed' => $this->users->countByStatus(UserStatus::UNCONFIRMED)
|
||||
];
|
||||
|
||||
$users = UserResource::collection($this->users->latest(7));
|
||||
|
||||
return $this->respondWithArray([
|
||||
'users_per_month' => $usersPerMonth,
|
||||
'users_per_status' => $usersPerStatus,
|
||||
'latest_registrations' => $users->resolve()
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Users;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Vanguard\Events\User\UpdatedByAdmin;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\User\UploadAvatarRawRequest;
|
||||
use Vanguard\Http\Resources\UserResource;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Services\Upload\UserAvatarManager;
|
||||
use Vanguard\User;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api\Users
|
||||
*/
|
||||
class AvatarController extends ApiController
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* @var UserAvatarManager
|
||||
*/
|
||||
private $avatarManager;
|
||||
|
||||
public function __construct(UserRepository $users, UserAvatarManager $avatarManager)
|
||||
{
|
||||
$this->middleware('permission:users.manage');
|
||||
|
||||
$this->users = $users;
|
||||
$this->avatarManager = $avatarManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
* @param UploadAvatarRawRequest $request
|
||||
* @return UserResource
|
||||
*/
|
||||
public function update(User $user, UploadAvatarRawRequest $request)
|
||||
{
|
||||
$name = $this->avatarManager->uploadAndCropAvatar($request->file('file'));
|
||||
|
||||
$user = $this->users->update($user->id, ['avatar' => $name]);
|
||||
|
||||
event(new UpdatedByAdmin($user));
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update user's avatar to external resource.
|
||||
*
|
||||
* @param User $user
|
||||
* @param Request $request
|
||||
* @return UserResource
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function updateExternal(User $user, Request $request)
|
||||
{
|
||||
$this->validate($request, ['url' => 'required|url']);
|
||||
|
||||
$this->avatarManager->deleteAvatarIfUploaded($user);
|
||||
|
||||
$user = $this->users->update($user->id, ['avatar' => $request->url]);
|
||||
|
||||
event(new UpdatedByAdmin($user));
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove user's avatar and set it to null.
|
||||
*
|
||||
* @param User $user
|
||||
* @return UserResource
|
||||
*/
|
||||
public function destroy(User $user)
|
||||
{
|
||||
$this->avatarManager->deleteAvatarIfUploaded($user);
|
||||
|
||||
$user = $this->users->update($user->id, ['avatar' => null]);
|
||||
|
||||
event(new UpdatedByAdmin($user));
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Users;
|
||||
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Resources\SessionResource;
|
||||
use Vanguard\Repositories\Session\SessionRepository;
|
||||
use Vanguard\User;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api\Users
|
||||
*/
|
||||
class SessionsController extends ApiController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:users.manage');
|
||||
$this->middleware('session.database');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get sessions for specified user.
|
||||
* @param User $user
|
||||
* @param SessionRepository $sessions
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index(User $user, SessionRepository $sessions)
|
||||
{
|
||||
return SessionResource::collection(
|
||||
$sessions->getUserSessions($user->id)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Users;
|
||||
|
||||
use Authy;
|
||||
use Vanguard\Events\User\TwoFactorDisabledByAdmin;
|
||||
use Vanguard\Events\User\TwoFactorEnabledByAdmin;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Requests\TwoFactor\EnableTwoFactorRequest;
|
||||
use Vanguard\Http\Requests\TwoFactor\VerifyTwoFactorTokenRequest;
|
||||
use Vanguard\Http\Resources\UserResource;
|
||||
use Vanguard\User;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api\Users
|
||||
*/
|
||||
class TwoFactorController extends ApiController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('permission:users.manage');
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable 2FA for specified user.
|
||||
* @param User $user
|
||||
* @param EnableTwoFactorRequest $request
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function update(User $user, EnableTwoFactorRequest $request)
|
||||
{
|
||||
if (Authy::isEnabled($user)) {
|
||||
return $this->setStatusCode(422)
|
||||
->respondWithError("2FA is already enabled for this user.");
|
||||
}
|
||||
|
||||
$user->setAuthPhoneInformation($request->country_code, $request->phone_number);
|
||||
|
||||
Authy::register($user);
|
||||
|
||||
$user->save();
|
||||
|
||||
Authy::sendTwoFactorVerificationToken($user);
|
||||
|
||||
return $this->respondWithArray([
|
||||
'message' => 'Verification token sent.'
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify provided 2FA token.
|
||||
*
|
||||
* @param VerifyTwoFactorTokenRequest $request
|
||||
* @param User $user
|
||||
* @return \Illuminate\Http\JsonResponse|UserResource
|
||||
*/
|
||||
public function verify(VerifyTwoFactorTokenRequest $request, User $user)
|
||||
{
|
||||
if (! Authy::tokenIsValid($user, $request->token)) {
|
||||
return $this->setStatusCode(422)
|
||||
->respondWithError("Invalid 2FA token.");
|
||||
}
|
||||
|
||||
$user->setTwoFactorAuthProviderOptions(array_merge(
|
||||
$user->getTwoFactorAuthProviderOptions(),
|
||||
['enabled' => true]
|
||||
));
|
||||
|
||||
$user->save();
|
||||
|
||||
event(new TwoFactorEnabledByAdmin($user));
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable 2FA for specified user.
|
||||
* @param User $user
|
||||
* @return \Illuminate\Http\JsonResponse|UserResource
|
||||
*/
|
||||
public function destroy(User $user)
|
||||
{
|
||||
if (! Authy::isEnabled($user)) {
|
||||
return $this->setStatusCode(422)
|
||||
->respondWithError("2FA is not enabled for this user.");
|
||||
}
|
||||
|
||||
Authy::delete($user);
|
||||
|
||||
$user->save();
|
||||
|
||||
event(new TwoFactorDisabledByAdmin($user));
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Api\Users;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Spatie\QueryBuilder\AllowedFilter;
|
||||
use Spatie\QueryBuilder\QueryBuilder;
|
||||
use Vanguard\Events\User\Banned;
|
||||
use Vanguard\Events\User\Deleted;
|
||||
use Vanguard\Events\User\UpdatedByAdmin;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Http\Filters\UserKeywordSearch;
|
||||
use Vanguard\Http\Requests\User\CreateUserRequest;
|
||||
use Vanguard\Http\Requests\User\UpdateUserRequest;
|
||||
use Vanguard\Http\Resources\UserResource;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Support\Enum\UserStatus;
|
||||
use Vanguard\User;
|
||||
|
||||
/**
|
||||
* @package Vanguard\Http\Controllers\Api\Users
|
||||
*/
|
||||
class UsersController extends ApiController
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->middleware('permission:users.manage');
|
||||
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Paginate all users.
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\Resources\Json\AnonymousResourceCollection
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$users = QueryBuilder::for(User::class)
|
||||
->allowedIncludes(UserResource::allowedIncludes())
|
||||
->allowedFilters([
|
||||
AllowedFilter::custom('search', new UserKeywordSearch),
|
||||
AllowedFilter::exact('status'),
|
||||
])
|
||||
->allowedSorts(['id', 'first_name', 'last_name', 'email', 'created_at', 'updated_at'])
|
||||
->defaultSort('id')
|
||||
->paginate($request->per_page ?: 20);
|
||||
|
||||
return UserResource::collection($users);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create new user record.
|
||||
* @param CreateUserRequest $request
|
||||
* @return UserResource
|
||||
*/
|
||||
public function store(CreateUserRequest $request)
|
||||
{
|
||||
$data = $request->only([
|
||||
'email', 'password', 'username', 'first_name', 'last_name',
|
||||
'phone', 'address', 'country_id', 'birthday', 'role_id', 'langid'
|
||||
]);
|
||||
|
||||
$data += [
|
||||
'status' => UserStatus::ACTIVE,
|
||||
'email_verified_at' => $request->verified ? now() : null
|
||||
];
|
||||
|
||||
$user = $this->users->create($data);
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the info about requested user.
|
||||
* @param $id
|
||||
* @return UserResource
|
||||
*/
|
||||
public function show($id)
|
||||
{
|
||||
$user = QueryBuilder::for(User::where('id', $id))
|
||||
->allowedIncludes(UserResource::allowedIncludes())
|
||||
->firstOrFail();
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
* @param UpdateUserRequest $request
|
||||
* @return UserResource
|
||||
*/
|
||||
public function update(User $user, UpdateUserRequest $request)
|
||||
{
|
||||
$data = $request->only([
|
||||
'email', 'password', 'username', 'first_name', 'last_name',
|
||||
'phone', 'address', 'country_id', 'birthday', 'status', 'role_id'
|
||||
]);
|
||||
|
||||
$user = $this->users->update($user->id, $data);
|
||||
|
||||
event(new UpdatedByAdmin($user));
|
||||
|
||||
// If user status was updated to "Banned",
|
||||
// fire the appropriate event.
|
||||
if ($this->userIsBanned($user, $request)) {
|
||||
event(new Banned($user));
|
||||
}
|
||||
|
||||
return new UserResource($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if user is banned during last update.
|
||||
*
|
||||
* @param User $user
|
||||
* @param Request $request
|
||||
* @return bool
|
||||
*/
|
||||
private function userIsBanned(User $user, Request $request)
|
||||
{
|
||||
return $user->status != $request->status && $request->status == UserStatus::BANNED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove specified user from storage.
|
||||
* @param User $user
|
||||
* @return \Illuminate\Http\JsonResponse
|
||||
*/
|
||||
public function destroy(User $user)
|
||||
{
|
||||
if ($user->id == auth()->id()) {
|
||||
return $this->errorForbidden(__("You cannot delete yourself."));
|
||||
}
|
||||
|
||||
event(new Deleted($user));
|
||||
|
||||
$this->users->delete($user->id);
|
||||
|
||||
return $this->respondWithSuccess();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers;
|
||||
|
||||
use Illuminate\Foundation\Bus\DispatchesJobs;
|
||||
use Illuminate\Routing\Controller as BaseController;
|
||||
use Illuminate\Foundation\Validation\ValidatesRequests;
|
||||
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
||||
|
||||
abstract class Controller extends BaseController
|
||||
{
|
||||
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Auth;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset emails and
|
||||
| includes a trait which assists in sending these notifications from
|
||||
| your application to your users. Feel free to explore this trait.
|
||||
|
|
||||
*/
|
||||
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the response for a successful password reset link.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param string $response
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
|
||||
*/
|
||||
protected function sendResetLinkResponse(Request $request, $response)
|
||||
{
|
||||
return back()->with('success', trans($response));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Auth;
|
||||
|
||||
use Auth;
|
||||
use Authy;
|
||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Vanguard\Events\User\LoggedIn;
|
||||
use Vanguard\Events\User\LoggedOut;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Http\Requests\Auth\LoginRequest;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Services\Auth\ThrottlesLogins;
|
||||
use Vanguard\Services\Auth\TwoFactor\Contracts\Authenticatable;
|
||||
|
||||
class LoginController extends Controller
|
||||
{
|
||||
use ThrottlesLogins;
|
||||
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* Create a new authentication controller instance.
|
||||
* @param UserRepository $users
|
||||
*/
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->middleware('guest')->except('logout');
|
||||
$this->middleware('auth')->only('logout');
|
||||
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the application login form.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
return view('auth.login', [
|
||||
'socialProviders' => config('auth.social.providers')
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param LoginRequest $request
|
||||
* @return RedirectResponse|Response
|
||||
* @throws BindingResolutionException
|
||||
*/
|
||||
public function login(LoginRequest $request)
|
||||
{
|
||||
// In case that request throttling is enabled, we have to check if user can perform this request.
|
||||
// We'll key this by the username and the IP address of the client making these requests into this application.
|
||||
$throttles = setting('throttle_enabled');
|
||||
|
||||
//Redirect URL that can be passed as hidden field.
|
||||
$to = $request->has('to') ? "?to=" . $request->get('to') : '';
|
||||
|
||||
if ($throttles && $this->hasTooManyLoginAttempts($request)) {
|
||||
return $this->sendLockoutResponse($request);
|
||||
}
|
||||
|
||||
$credentials = $request->getCredentials();
|
||||
|
||||
if (! Auth::validate($credentials)) {
|
||||
// If the login attempt was unsuccessful we will increment the number of attempts
|
||||
// to login and redirect the user back to the login form. Of course, when this
|
||||
// user surpasses their maximum number of attempts they will get locked out.
|
||||
if ($throttles) {
|
||||
$this->incrementLoginAttempts($request);
|
||||
}
|
||||
|
||||
return redirect()->to('login' . $to)
|
||||
->withErrors(trans('auth.failed'));
|
||||
}
|
||||
|
||||
$user = Auth::getProvider()->retrieveByCredentials($credentials);
|
||||
|
||||
if ($user->isBanned()) {
|
||||
return redirect()->to('login' . $to)
|
||||
->withErrors(__('Your account is banned by administrator.'));
|
||||
}
|
||||
|
||||
Auth::login($user, setting('remember_me') && $request->get('remember'));
|
||||
|
||||
return $this->authenticated($request, $throttles, $user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the response after the user was authenticated.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param bool $throttles
|
||||
* @param $user
|
||||
* @return RedirectResponse|Response
|
||||
*/
|
||||
protected function authenticated(Request $request, $throttles, $user)
|
||||
{
|
||||
if ($throttles) {
|
||||
$this->clearLoginAttempts($request);
|
||||
}
|
||||
|
||||
if (setting('2fa.enabled') && Authy::isEnabled($user)) {
|
||||
return $this->logoutAndRedirectToTokenPage($request, $user);
|
||||
}
|
||||
|
||||
event(new LoggedIn);
|
||||
|
||||
if ($request->has('to')) {
|
||||
return redirect()->to($request->get('to'));
|
||||
}
|
||||
|
||||
|
||||
|
||||
// redirection based on user profile: User, Admin, Superuser, owner
|
||||
if ($user->hasRole('Owner')) {
|
||||
return redirect()->to("ownerdashboard.php"); }
|
||||
if ($user->hasRole('Admin')) {
|
||||
return redirect()->intended('/'); }
|
||||
if ($user->hasRole('User')) {
|
||||
return redirect()->to("dashboard.php"); }
|
||||
if ($user->hasRole('Superuser')) {
|
||||
return redirect()->to("dashboard.php"); }
|
||||
if ($user->hasRole('Certification')) {
|
||||
return redirect()->to("cstd.php"); }
|
||||
if ($user->hasRole('CustomerService')) {
|
||||
return redirect()->to("cstrf.php"); }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Authenticatable $user
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
protected function logoutAndRedirectToTokenPage(Request $request, Authenticatable $user)
|
||||
{
|
||||
Auth::logout();
|
||||
|
||||
$request->session()->put('auth.2fa.id', $user->id);
|
||||
|
||||
return redirect()->route('auth.token');
|
||||
}
|
||||
|
||||
/**
|
||||
* Log the user out of the application.
|
||||
*
|
||||
* @return RedirectResponse|\Illuminate\Routing\Redirector
|
||||
*/
|
||||
public function logout()
|
||||
{
|
||||
event(new LoggedOut);
|
||||
|
||||
Auth::logout();
|
||||
|
||||
return redirect('login');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Auth;
|
||||
|
||||
use Illuminate\Auth\Events\Registered;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Http\Requests\Auth\RegisterRequest;
|
||||
use Vanguard\Repositories\Role\RoleRepository;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Support\Enum\UserStatus;
|
||||
|
||||
class RegisterController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* Create a new authentication controller instance.
|
||||
* @param UserRepository $users
|
||||
*/
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->middleware('registration')->only('show', 'register');
|
||||
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the application registration form.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
return view('auth.register', [
|
||||
'socialProviders' => config('auth.social.providers')
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle a registration request for the application.
|
||||
*
|
||||
* @param RegisterRequest $request
|
||||
* @param RoleRepository $roles
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function register(RegisterRequest $request, RoleRepository $roles)
|
||||
{
|
||||
$user = $this->users->create(
|
||||
array_merge($request->validFormData(), ['role_id' => $roles->findByName('User')->id])
|
||||
);
|
||||
|
||||
event(new Registered($user));
|
||||
|
||||
$message = setting('reg_email_confirmation')
|
||||
? __('Your account is created successfully! Please confirm your email.')
|
||||
: __('Your account is created successfully!');
|
||||
|
||||
\Auth::login($user);
|
||||
|
||||
return redirect('/')->with('success', $message);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Auth;
|
||||
|
||||
use Illuminate\Auth\Events\PasswordReset;
|
||||
use Illuminate\Support\Str;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\ResetsPasswords;
|
||||
|
||||
class ResetPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset requests
|
||||
| and uses a simple trait to include this behavior. You're free to
|
||||
| explore this trait and override any methods you wish to tweak.
|
||||
|
|
||||
*/
|
||||
|
||||
use ResetsPasswords;
|
||||
|
||||
/**
|
||||
* Where to redirect users after resetting their password.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = 'dashboard.php';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest');
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the given user's password.
|
||||
*
|
||||
* @param \Illuminate\Contracts\Auth\CanResetPassword $user
|
||||
* @param string $password
|
||||
* @return void
|
||||
*/
|
||||
protected function resetPassword($user, $password)
|
||||
{
|
||||
$user->password = $password;
|
||||
|
||||
$user->setRememberToken(Str::random(60));
|
||||
|
||||
$user->save();
|
||||
|
||||
event(new PasswordReset($user));
|
||||
|
||||
$this->guard()->login($user);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Auth;
|
||||
|
||||
use Auth;
|
||||
use Authy;
|
||||
use Laravel\Socialite\Contracts\User as SocialUser;
|
||||
use Socialite;
|
||||
use Vanguard\Events\User\LoggedIn;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Services\Auth\Social\SocialManager;
|
||||
|
||||
class SocialAuthController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* @var SocialManager
|
||||
*/
|
||||
private $socialManager;
|
||||
|
||||
public function __construct(UserRepository $users, SocialManager $socialManager)
|
||||
{
|
||||
$this->middleware('guest');
|
||||
|
||||
$this->users = $users;
|
||||
$this->socialManager = $socialManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Redirect user to specified provider in order to complete the authentication process.
|
||||
*
|
||||
* @param $provider
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function redirectToProvider($provider)
|
||||
{
|
||||
if (strtolower($provider) == 'facebook') {
|
||||
return Socialite::driver('facebook')->with(['auth_type' => 'rerequest'])->redirect();
|
||||
}
|
||||
|
||||
return Socialite::driver($provider)->redirect();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle response authentication provider.
|
||||
*
|
||||
* @param $provider
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function handleProviderCallback($provider)
|
||||
{
|
||||
if (request()->get('error')) {
|
||||
return redirect('login')
|
||||
->withErrors(__('Something went wrong during the authentication process. Please try again.'));
|
||||
}
|
||||
|
||||
$socialUser = $this->getUserFromProvider($provider);
|
||||
|
||||
$user = $this->users->findBySocialId($provider, $socialUser->getId());
|
||||
|
||||
if (! $user) {
|
||||
if (! setting('reg_enabled')) {
|
||||
return redirect('login')
|
||||
->withErrors(__('Only users who already created an account can log in.'));
|
||||
}
|
||||
|
||||
if (! $socialUser->getEmail()) {
|
||||
return redirect('login')
|
||||
->withErrors(__('You have to provide your email address.'));
|
||||
}
|
||||
|
||||
$user = $this->socialManager->associate($socialUser, $provider);
|
||||
|
||||
event(new \Illuminate\Auth\Events\Registered($user));
|
||||
}
|
||||
|
||||
return $this->loginAndRedirect($user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user from authentication provider.
|
||||
*
|
||||
* @param $provider
|
||||
* @return SocialUser
|
||||
*/
|
||||
private function getUserFromProvider($provider)
|
||||
{
|
||||
return Socialite::driver($provider)->user();
|
||||
}
|
||||
|
||||
/**
|
||||
* Log provided user in and redirect him to intended page.
|
||||
*
|
||||
* @param $user
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
private function loginAndRedirect($user)
|
||||
{
|
||||
if ($user->isBanned()) {
|
||||
return redirect()->to('login')
|
||||
->withErrors(__('Your account is banned by administrator.'));
|
||||
}
|
||||
|
||||
if (setting('2fa.enabled') && Authy::isEnabled($user)) {
|
||||
session()->put('auth.2fa.id', $user->id);
|
||||
return redirect()->route('auth.token');
|
||||
}
|
||||
|
||||
Auth::login($user);
|
||||
|
||||
event(new LoggedIn);
|
||||
|
||||
return redirect()->intended('/');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Auth;
|
||||
|
||||
use Auth;
|
||||
use Authy;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
use Vanguard\Events\User\LoggedIn;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Services\Auth\ThrottlesLogins;
|
||||
|
||||
class TwoFactorTokenController extends Controller
|
||||
{
|
||||
use ThrottlesLogins;
|
||||
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* Create a new authentication controller instance.
|
||||
* @param UserRepository $users
|
||||
*/
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show Two-Factor Token form.
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\View\View
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
return session('auth.2fa.id') ? view('auth.token') : redirect('login');
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle Two-Factor token form submission.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
||||
* @throws \Illuminate\Validation\ValidationException
|
||||
*/
|
||||
public function update(Request $request)
|
||||
{
|
||||
$this->validate($request, ['token' => 'required']);
|
||||
|
||||
if (! session('auth.2fa.id')) {
|
||||
return redirect('login');
|
||||
}
|
||||
|
||||
$user = $this->users->find(
|
||||
$request->session()->pull('auth.2fa.id')
|
||||
);
|
||||
|
||||
if (! $user) {
|
||||
throw new NotFoundHttpException;
|
||||
}
|
||||
|
||||
if (! Authy::tokenIsValid($user, $request->token)) {
|
||||
return redirect()->to('login')
|
||||
->withErrors(__('2FA Token is invalid!'));
|
||||
}
|
||||
|
||||
Auth::login($user);
|
||||
|
||||
event(new LoggedIn);
|
||||
|
||||
return redirect()->intended('/');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Auth;
|
||||
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\VerifiesEmails;
|
||||
|
||||
class VerificationController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Email Verification Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling email verification for any
|
||||
| user that recently registered with the application. Emails may also
|
||||
| be re-sent if the user didn't receive the original email message.
|
||||
|
|
||||
*/
|
||||
|
||||
use VerifiesEmails;
|
||||
|
||||
/**
|
||||
* Where to redirect users after verification.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
$this->middleware('signed')->only('verify');
|
||||
$this->middleware('throttle:6,1')->only('verify', 'resend');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Auth;
|
||||
|
||||
use Auth;
|
||||
use Authy;
|
||||
use Illuminate\Contracts\Container\BindingResolutionException;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Vanguard\Events\User\LoggedIn;
|
||||
use Vanguard\Events\User\LoggedOut;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Http\Requests\Auth\LoginRequest;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Services\Auth\ThrottlesLogins;
|
||||
use Vanguard\Services\Auth\TwoFactor\Contracts\Authenticatable;
|
||||
|
||||
class LoginController extends Controller
|
||||
{
|
||||
use ThrottlesLogins;
|
||||
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* Create a new authentication controller instance.
|
||||
* @param UserRepository $users
|
||||
*/
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->middleware('guest')->except('logout');
|
||||
$this->middleware('auth')->only('logout');
|
||||
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the application login form.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
return view('auth.login', [
|
||||
'socialProviders' => config('auth.social.providers')
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param LoginRequest $request
|
||||
* @return RedirectResponse|Response
|
||||
* @throws BindingResolutionException
|
||||
*/
|
||||
public function login(LoginRequest $request)
|
||||
{
|
||||
// In case that request throttling is enabled, we have to check if user can perform this request.
|
||||
// We'll key this by the username and the IP address of the client making these requests into this application.
|
||||
$throttles = setting('throttle_enabled');
|
||||
|
||||
//Redirect URL that can be passed as hidden field.
|
||||
$to = $request->has('to') ? "?to=" . $request->get('to') : '';
|
||||
|
||||
if ($throttles && $this->hasTooManyLoginAttempts($request)) {
|
||||
return $this->sendLockoutResponse($request);
|
||||
}
|
||||
|
||||
$credentials = $request->getCredentials();
|
||||
|
||||
if (! Auth::validate($credentials)) {
|
||||
// If the login attempt was unsuccessful we will increment the number of attempts
|
||||
// to login and redirect the user back to the login form. Of course, when this
|
||||
// user surpasses their maximum number of attempts they will get locked out.
|
||||
if ($throttles) {
|
||||
$this->incrementLoginAttempts($request);
|
||||
}
|
||||
|
||||
return redirect()->to('login' . $to)
|
||||
->withErrors(trans('auth.failed'));
|
||||
}
|
||||
|
||||
$user = Auth::getProvider()->retrieveByCredentials($credentials);
|
||||
|
||||
if ($user->isBanned()) {
|
||||
return redirect()->to('login' . $to)
|
||||
->withErrors(__('Your account is banned by administrator.'));
|
||||
}
|
||||
|
||||
Auth::login($user, setting('remember_me') && $request->get('remember'));
|
||||
|
||||
return $this->authenticated($request, $throttles, $user);
|
||||
}
|
||||
|
||||
/**
|
||||
* Send the response after the user was authenticated.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param bool $throttles
|
||||
* @param $user
|
||||
* @return RedirectResponse|Response
|
||||
*/
|
||||
protected function authenticated(Request $request, $throttles, $user)
|
||||
{
|
||||
if ($throttles) {
|
||||
$this->clearLoginAttempts($request);
|
||||
}
|
||||
|
||||
if (setting('2fa.enabled') && Authy::isEnabled($user)) {
|
||||
return $this->logoutAndRedirectToTokenPage($request, $user);
|
||||
}
|
||||
|
||||
event(new LoggedIn);
|
||||
|
||||
if ($request->has('to')) {
|
||||
return redirect()->to($request->get('to'));
|
||||
}
|
||||
|
||||
|
||||
|
||||
// redirection based on user profile: User, Admin, Superuser, owner
|
||||
if ($user->hasRole('Owner')) {
|
||||
return redirect()->to("ownerdashboard.php"); }
|
||||
if ($user->hasRole('Admin')) {
|
||||
return redirect()->intended('/'); }
|
||||
if ($user->hasRole('User')) {
|
||||
return redirect()->to("dashboard.php"); }
|
||||
if ($user->hasRole('Superuser')) {
|
||||
return redirect()->to("dashboard.php"); }
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param Authenticatable $user
|
||||
* @return RedirectResponse
|
||||
*/
|
||||
protected function logoutAndRedirectToTokenPage(Request $request, Authenticatable $user)
|
||||
{
|
||||
Auth::logout();
|
||||
|
||||
$request->session()->put('auth.2fa.id', $user->id);
|
||||
|
||||
return redirect()->route('auth.token');
|
||||
}
|
||||
|
||||
/**
|
||||
* Log the user out of the application.
|
||||
*
|
||||
* @return RedirectResponse|\Illuminate\Routing\Redirector
|
||||
*/
|
||||
public function logout()
|
||||
{
|
||||
event(new LoggedOut);
|
||||
|
||||
Auth::logout();
|
||||
|
||||
return redirect('login');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Authorization;
|
||||
|
||||
use Exception;
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\View\View;
|
||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Http\Requests\Permission\CreatePermissionRequest;
|
||||
use Vanguard\Http\Requests\Permission\UpdatePermissionRequest;
|
||||
use Vanguard\Permission;
|
||||
use Vanguard\Repositories\Permission\PermissionRepository;
|
||||
use Vanguard\Repositories\Role\RoleRepository;
|
||||
|
||||
/**
|
||||
* Class PermissionsController
|
||||
* @package Vanguard\Http\Controllers
|
||||
*/
|
||||
class PermissionsController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var RoleRepository
|
||||
*/
|
||||
private $roles;
|
||||
/**
|
||||
* @var PermissionRepository
|
||||
*/
|
||||
private $permissions;
|
||||
|
||||
/**
|
||||
* PermissionsController constructor.
|
||||
* @param RoleRepository $roles
|
||||
* @param PermissionRepository $permissions
|
||||
*/
|
||||
public function __construct(RoleRepository $roles, PermissionRepository $permissions)
|
||||
{
|
||||
$this->roles = $roles;
|
||||
$this->permissions = $permissions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays the page with all available permissions.
|
||||
*
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('permission.index', [
|
||||
'roles' => $this->roles->all(),
|
||||
'permissions' => $this->permissions->all()
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays the form for creating new permission.
|
||||
*
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('permission.add-edit', ['edit' => false]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store permission to database.
|
||||
*
|
||||
* @param CreatePermissionRequest $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function store(CreatePermissionRequest $request)
|
||||
{
|
||||
$this->permissions->create($request->all());
|
||||
|
||||
return redirect()->route('permissions.index')
|
||||
->withSuccess(__('Permission created successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays the form for editing specific permission.
|
||||
*
|
||||
* @param Permission $permission
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function edit(Permission $permission)
|
||||
{
|
||||
return view('permission.add-edit', [
|
||||
'edit' => true,
|
||||
'permission' => $permission
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update specified permission.
|
||||
*
|
||||
* @param Permission $permission
|
||||
* @param UpdatePermissionRequest $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(Permission $permission, UpdatePermissionRequest $request)
|
||||
{
|
||||
$this->permissions->update($permission->id, $request->all());
|
||||
|
||||
return redirect()->route('permissions.index')
|
||||
->withSuccess(__('Permission updated successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy the permission if it is removable.
|
||||
*
|
||||
* @param Permission $permission
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
public function destroy(Permission $permission)
|
||||
{
|
||||
if (! $permission->removable) {
|
||||
throw new NotFoundHttpException;
|
||||
}
|
||||
|
||||
$this->permissions->delete($permission->id);
|
||||
|
||||
return redirect()->route('permissions.index')
|
||||
->withSuccess(__('Permission deleted successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Authorization;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Arr;
|
||||
use Vanguard\Events\Role\PermissionsUpdated;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Repositories\Role\RoleRepository;
|
||||
|
||||
/**
|
||||
* Class RolePermissionsController
|
||||
* @package Vanguard\Http\Controllers
|
||||
*/
|
||||
class RolePermissionsController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var RoleRepository
|
||||
*/
|
||||
private $roles;
|
||||
|
||||
/**
|
||||
* RolePermissionsController constructor.
|
||||
* @param RoleRepository $roles
|
||||
*/
|
||||
public function __construct(RoleRepository $roles)
|
||||
{
|
||||
$this->roles = $roles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update permissions for each role.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(Request $request)
|
||||
{
|
||||
$roles = $request->get('roles');
|
||||
|
||||
$allRoles = $this->roles->lists('id');
|
||||
|
||||
foreach ($allRoles as $roleId) {
|
||||
$permissions = Arr::get($roles, $roleId, []);
|
||||
$this->roles->updatePermissions($roleId, $permissions);
|
||||
}
|
||||
|
||||
event(new PermissionsUpdated);
|
||||
|
||||
return redirect()->route('permissions.index')
|
||||
->withSuccess(__('Permissions saved successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Authorization;
|
||||
|
||||
use Cache;
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\View\View;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Http\Requests\Role\CreateRoleRequest;
|
||||
use Vanguard\Http\Requests\Role\UpdateRoleRequest;
|
||||
use Vanguard\Repositories\Role\RoleRepository;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Role;
|
||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
|
||||
/**
|
||||
* Class RolesController
|
||||
* @package Vanguard\Http\Controllers
|
||||
*/
|
||||
class RolesController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var RoleRepository
|
||||
*/
|
||||
private $roles;
|
||||
|
||||
/**
|
||||
* RolesController constructor.
|
||||
* @param RoleRepository $roles
|
||||
*/
|
||||
public function __construct(RoleRepository $roles)
|
||||
{
|
||||
$this->roles = $roles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display page with all available roles.
|
||||
*
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('role.index', ['roles' => $this->roles->getAllWithUsersCount()]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Display form for creating new role.
|
||||
*
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function create()
|
||||
{
|
||||
return view('role.add-edit', ['edit' => false]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store newly created role to database.
|
||||
*
|
||||
* @param CreateRoleRequest $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function store(CreateRoleRequest $request)
|
||||
{
|
||||
$this->roles->create($request->all());
|
||||
|
||||
return redirect()->route('roles.index')
|
||||
->withSuccess(__('Role created successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Display for for editing specified role.
|
||||
*
|
||||
* @param Role $role
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function edit(Role $role)
|
||||
{
|
||||
return view('role.add-edit', [
|
||||
'role' => $role,
|
||||
'edit' => true
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update specified role with provided data.
|
||||
*
|
||||
* @param Role $role
|
||||
* @param UpdateRoleRequest $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(Role $role, UpdateRoleRequest $request)
|
||||
{
|
||||
$this->roles->update($role->id, $request->all());
|
||||
|
||||
return redirect()->route('roles.index')
|
||||
->withSuccess(__('Role updated successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove specified role from system.
|
||||
*
|
||||
* @param Role $role
|
||||
* @param UserRepository $userRepository
|
||||
* @return mixed
|
||||
*/
|
||||
public function destroy(Role $role, UserRepository $userRepository)
|
||||
{
|
||||
if (! $role->removable) {
|
||||
throw new NotFoundHttpException;
|
||||
}
|
||||
|
||||
$userRole = $this->roles->findByName('User');
|
||||
|
||||
$userRepository->switchRolesForUsers($role->id, $userRole->id);
|
||||
|
||||
$this->roles->delete($role->id);
|
||||
|
||||
Cache::flush();
|
||||
|
||||
return redirect()->route('roles.index')
|
||||
->withSuccess(__('Role deleted successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web;
|
||||
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\View\View;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
/**
|
||||
* Displays the application dashboard.
|
||||
*
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
if (session()->has('verified')) {
|
||||
session()->flash('success', __('E-Mail verified successfully.'));
|
||||
}
|
||||
|
||||
return view('dashboard.index');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,237 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web;
|
||||
|
||||
use Artisan;
|
||||
use DB;
|
||||
use Illuminate\Foundation\Bootstrap\LoadEnvironmentVariables;
|
||||
use Illuminate\Http\Request;
|
||||
use Session;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
|
||||
class InstallController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
return view('install.start');
|
||||
}
|
||||
|
||||
public function requirements()
|
||||
{
|
||||
$requirements = $this->getRequirements();
|
||||
$allLoaded = $this->allRequirementsLoaded();
|
||||
|
||||
return view('install.requirements', compact('requirements', 'allLoaded'));
|
||||
}
|
||||
|
||||
public function permissions()
|
||||
{
|
||||
if (! $this->allRequirementsLoaded()) {
|
||||
return redirect()->route('install.requirements');
|
||||
}
|
||||
|
||||
$folders = $this->getPermissions();
|
||||
$allGranted = $this->allPermissionsGranted();
|
||||
|
||||
return view('install.permissions', compact('folders', 'allGranted'));
|
||||
}
|
||||
|
||||
public function databaseInfo()
|
||||
{
|
||||
if (! $this->allRequirementsLoaded()) {
|
||||
return redirect()->route('install.requirements');
|
||||
}
|
||||
|
||||
if (! $this->allPermissionsGranted()) {
|
||||
return redirect()->route('install.permissions');
|
||||
}
|
||||
|
||||
return view('install.database');
|
||||
}
|
||||
|
||||
public function installation(Request $request)
|
||||
{
|
||||
if (! $this->allRequirementsLoaded()) {
|
||||
return redirect()->route('install.requirements');
|
||||
}
|
||||
|
||||
if (! $this->allPermissionsGranted()) {
|
||||
return redirect()->route('install.permissions');
|
||||
}
|
||||
|
||||
$dbCredentials = $request->only('host', 'username', 'password', 'database', 'prefix');
|
||||
|
||||
if (! $this->dbCredentialsAreValid($dbCredentials)) {
|
||||
return redirect()->route('install.database')
|
||||
->withInput(array_except($dbCredentials, 'password'))
|
||||
->withErrors("Connection to your database cannot be established.
|
||||
Please provide correct database credentials.");
|
||||
}
|
||||
|
||||
Session::put('install.db_credentials', $dbCredentials);
|
||||
|
||||
return view('install.installation');
|
||||
}
|
||||
|
||||
public function install()
|
||||
{
|
||||
try {
|
||||
$db = Session::pull('install.db_credentials');
|
||||
|
||||
copy(base_path('.env.example'), base_path('.env'));
|
||||
|
||||
$this->reloadEnv();
|
||||
|
||||
$path = base_path('.env');
|
||||
$env = file_get_contents($path);
|
||||
|
||||
$env = str_replace('DB_HOST='.env('DB_HOST'), sprintf('DB_HOST="%s"', $db['host']), $env);
|
||||
$env = str_replace('DB_DATABASE='.env('DB_DATABASE'), sprintf('DB_DATABASE="%s"', $db['database']), $env);
|
||||
$env = str_replace('DB_USERNAME='.env('DB_USERNAME'), sprintf('DB_USERNAME="%s"', $db['username']), $env);
|
||||
$env = str_replace('DB_PASSWORD='.env('DB_PASSWORD'), sprintf('DB_PASSWORD="%s"', $db['password']), $env);
|
||||
$env = str_replace('DB_PREFIX='.env('DB_PREFIX'), sprintf('DB_PREFIX="%s"', $db['prefix']), $env);
|
||||
|
||||
file_put_contents($path, $env);
|
||||
|
||||
$this->setDatabaseCredentials($db);
|
||||
config(['app.debug' => true]);
|
||||
|
||||
\Setting::set('app_name', \request('app_name'));
|
||||
\Setting::save();
|
||||
|
||||
Artisan::call('key:generate', ['--force' => true]);
|
||||
Artisan::call('migrate', ['--force' => true]);
|
||||
Artisan::call('db:seed', ['--force' => true]);
|
||||
Artisan::call('db:seed', [
|
||||
'--force' => true,
|
||||
'--quiet' => true,
|
||||
'--class' => '\\Vanguard\\Announcements\\Database\\Seeders\\AnnouncementsDatabaseSeeder'
|
||||
]);
|
||||
|
||||
return redirect()->route('install.complete');
|
||||
} catch (\Exception $e) {
|
||||
@unlink(base_path('.env'));
|
||||
\Log::error($e->getMessage());
|
||||
\Log::error($e->getTraceAsString());
|
||||
return redirect()->route('install.error');
|
||||
}
|
||||
}
|
||||
|
||||
private function reloadEnv()
|
||||
{
|
||||
(new LoadEnvironmentVariables)->bootstrap(app());
|
||||
}
|
||||
|
||||
public function complete()
|
||||
{
|
||||
return view('install.complete');
|
||||
}
|
||||
|
||||
public function error()
|
||||
{
|
||||
return view('install.error');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
private function getRequirements()
|
||||
{
|
||||
$requirements = [
|
||||
'PHP Version (>= 7.3.0)' => version_compare(phpversion(), '7.3.0', '>='),
|
||||
'BCMath Extension' => extension_loaded('bcmath'),
|
||||
'OpenSSL Extension' => extension_loaded('openssl'),
|
||||
'PDO Extension' => extension_loaded('PDO'),
|
||||
'PDO MySQL Extension' => extension_loaded('pdo_mysql'),
|
||||
'Mbstring Extension' => extension_loaded('mbstring'),
|
||||
'Tokenizer Extension' => extension_loaded('tokenizer'),
|
||||
'XML Extension' => extension_loaded('xml'),
|
||||
'Ctype PHP Extension' => extension_loaded('ctype'),
|
||||
'JSON PHP Extension' => extension_loaded('json'),
|
||||
'GD Extension' => extension_loaded('gd'),
|
||||
'Fileinfo Extension' => extension_loaded('fileinfo')
|
||||
];
|
||||
|
||||
if (extension_loaded('xdebug')) {
|
||||
$requirements['Xdebug Max Nesting Level (>= 500)'] = (int)ini_get('xdebug.max_nesting_level') >= 500;
|
||||
}
|
||||
|
||||
return $requirements;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
private function allRequirementsLoaded()
|
||||
{
|
||||
$allLoaded = true;
|
||||
|
||||
foreach ($this->getRequirements() as $loaded) {
|
||||
if ($loaded == false) {
|
||||
$allLoaded = false;
|
||||
}
|
||||
}
|
||||
|
||||
return $allLoaded;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
private function getPermissions()
|
||||
{
|
||||
return [
|
||||
'public/upload/users' => is_writable(public_path('upload/users')),
|
||||
'storage/app' => is_writable(storage_path('app')),
|
||||
'storage/framework/cache' => is_writable(storage_path('framework/cache')),
|
||||
'storage/framework/sessions' => is_writable(storage_path('framework/sessions')),
|
||||
'storage/framework/views' => is_writable(storage_path('framework/views')),
|
||||
'storage/logs' => is_writable(storage_path('logs')),
|
||||
'bootstrap/cache' => is_writable(base_path('bootstrap/cache')),
|
||||
'Base Directory' => is_writable(base_path('')),
|
||||
];
|
||||
}
|
||||
|
||||
private function allPermissionsGranted()
|
||||
{
|
||||
$allGranted = true;
|
||||
|
||||
foreach ($this->getPermissions() as $permission => $granted) {
|
||||
if ($granted == false) {
|
||||
$allGranted = false;
|
||||
}
|
||||
}
|
||||
|
||||
return $allGranted;
|
||||
}
|
||||
|
||||
private function dbCredentialsAreValid($credentials)
|
||||
{
|
||||
$this->setDatabaseCredentials($credentials);
|
||||
|
||||
try {
|
||||
DB::statement("SHOW TABLES");
|
||||
} catch (\Exception $e) {
|
||||
\Log::info($e->getMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $credentials
|
||||
*/
|
||||
private function setDatabaseCredentials($credentials)
|
||||
{
|
||||
$default = config('database.default');
|
||||
|
||||
config([
|
||||
"database.connections.{$default}.host" => $credentials['host'],
|
||||
"database.connections.{$default}.database" => $credentials['database'],
|
||||
"database.connections.{$default}.username" => $credentials['username'],
|
||||
"database.connections.{$default}.password" => $credentials['password'],
|
||||
"database.connections.{$default}.prefix" => $credentials['prefix']
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Profile;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Vanguard\Events\User\ChangedAvatar;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Services\Upload\UserAvatarManager;
|
||||
|
||||
/**
|
||||
* Class ProfileController
|
||||
* @package Vanguard\Http\Controllers
|
||||
*/
|
||||
class AvatarController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* UsersController constructor.
|
||||
* @param UserRepository $users
|
||||
*/
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload and update user's avatar.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param UserAvatarManager $avatarManager
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(Request $request, UserAvatarManager $avatarManager)
|
||||
{
|
||||
$request->validate(['avatar' => 'image']);
|
||||
|
||||
$name = $avatarManager->uploadAndCropAvatar(
|
||||
$request->file('avatar'),
|
||||
$request->get('points')
|
||||
);
|
||||
|
||||
if ($name) {
|
||||
return $this->handleAvatarUpdate($name);
|
||||
}
|
||||
|
||||
return redirect()->route('profile')
|
||||
->withErrors(__('Avatar image cannot be updated. Please try again.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update avatar for currently logged in user
|
||||
* and fire appropriate event.
|
||||
*
|
||||
* @param $avatar
|
||||
* @return mixed
|
||||
*/
|
||||
private function handleAvatarUpdate($avatar)
|
||||
{
|
||||
$this->users->update(auth()->id(), ['avatar' => $avatar]);
|
||||
|
||||
event(new ChangedAvatar);
|
||||
|
||||
return redirect()->route('profile')
|
||||
->withSuccess(__('Avatar changed successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update user's avatar from external location/url.
|
||||
*
|
||||
* @param Request $request
|
||||
* @param UserAvatarManager $avatarManager
|
||||
* @return mixed
|
||||
*/
|
||||
public function updateExternal(Request $request, UserAvatarManager $avatarManager)
|
||||
{
|
||||
$avatarManager->deleteAvatarIfUploaded(auth()->user());
|
||||
|
||||
return $this->handleAvatarUpdate($request->get('url'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Profile;
|
||||
|
||||
use Vanguard\Events\User\UpdatedProfileDetails;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Http\Requests\User\UpdateProfileDetailsRequest;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
|
||||
/**
|
||||
* Class DetailsController
|
||||
* @package Vanguard\Http\Controllers
|
||||
*/
|
||||
class DetailsController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* DetailsController constructor.
|
||||
* @param UserRepository $users
|
||||
*/
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update profile details.
|
||||
*
|
||||
* @param UpdateProfileDetailsRequest $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(UpdateProfileDetailsRequest $request)
|
||||
{
|
||||
$this->users->update(auth()->id(), $request->except('role_id', 'status'));
|
||||
|
||||
event(new UpdatedProfileDetails);
|
||||
|
||||
return redirect()->back()
|
||||
->withSuccess(__('Profile updated successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Profile;
|
||||
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Http\Requests\User\UpdateProfileLoginDetailsRequest;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
|
||||
/**
|
||||
* Class LoginDetailsController
|
||||
* @package Vanguard\Http\Controllers
|
||||
*/
|
||||
class LoginDetailsController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* LoginDetailsController constructor.
|
||||
* @param UserRepository $users
|
||||
*/
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update user's login details.
|
||||
*
|
||||
* @param UpdateProfileLoginDetailsRequest $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(UpdateProfileLoginDetailsRequest $request)
|
||||
{
|
||||
$data = $request->except('role', 'status');
|
||||
|
||||
// If password is not provided, then we will
|
||||
// just remove it from $data array and do not change it
|
||||
if (! data_get($data, 'password')) {
|
||||
unset($data['password']);
|
||||
unset($data['password_confirmation']);
|
||||
}
|
||||
|
||||
$this->users->update(auth()->id(), $data);
|
||||
|
||||
return redirect()->route('profile')
|
||||
->withSuccess(__('Login details updated successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Profile;
|
||||
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\View\View;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Repositories\Country\CountryRepository;
|
||||
use Vanguard\Repositories\Role\RoleRepository;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Support\Enum\UserStatus;
|
||||
|
||||
/**
|
||||
* Class ProfileController
|
||||
* @package Vanguard\Http\Controllers
|
||||
*/
|
||||
class ProfileController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
/**
|
||||
* @var RoleRepository
|
||||
*/
|
||||
private $roles;
|
||||
/**
|
||||
* @var CountryRepository
|
||||
*/
|
||||
private $countries;
|
||||
|
||||
/**
|
||||
* @param UserRepository $users
|
||||
* @param RoleRepository $roles
|
||||
* @param CountryRepository $countries
|
||||
*/
|
||||
public function __construct(UserRepository $users, RoleRepository $roles, CountryRepository $countries)
|
||||
{
|
||||
$this->users = $users;
|
||||
$this->roles = $roles;
|
||||
$this->countries = $countries;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display user's profile page.
|
||||
*
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function show()
|
||||
{
|
||||
$roles = $this->roles->all()->filter(function ($role) {
|
||||
return $role->id == auth()->user()->role_id;
|
||||
})->pluck('name', 'id');
|
||||
|
||||
return view('user.profile', [
|
||||
'user' => auth()->user(),
|
||||
'edit' => true,
|
||||
'roles' => $roles,
|
||||
'countries' => [0 => __('Select a Country')] + $this->countries->lists()->toArray(),
|
||||
'socialLogins' => $this->users->getUserSocialLogins(auth()->id()),
|
||||
'statuses' => UserStatus::lists()
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Profile;
|
||||
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Repositories\Session\SessionRepository;
|
||||
|
||||
/**
|
||||
* Class SessionsController
|
||||
* @package Vanguard\Http\Controllers\Web\Profile
|
||||
*/
|
||||
class SessionsController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var SessionRepository
|
||||
*/
|
||||
private $sessions;
|
||||
|
||||
/**
|
||||
* @param SessionRepository $sessions
|
||||
*/
|
||||
public function __construct(SessionRepository $sessions)
|
||||
{
|
||||
$this->sessions = $sessions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get sessions for specified user.
|
||||
*/
|
||||
public function index()
|
||||
{
|
||||
return view('user.sessions', [
|
||||
'profile' => true,
|
||||
'user' => auth()->user(),
|
||||
'sessions' => $this->sessions->getUserSessions(auth()->id())
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invalidate user's session.
|
||||
*
|
||||
* @param $session \stdClass Session object.
|
||||
* @return mixed
|
||||
*/
|
||||
public function destroy($session)
|
||||
{
|
||||
$this->sessions->invalidateSession($session->id);
|
||||
|
||||
return redirect()->route('profile.sessions')
|
||||
->withSuccess(__('Session invalidated successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web;
|
||||
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\View\View;
|
||||
use Vanguard\Events\Settings\Updated as SettingsUpdated;
|
||||
use Illuminate\Http\Request;
|
||||
use Setting;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
|
||||
/**
|
||||
* Class SettingsController
|
||||
* @package Vanguard\Http\Controllers
|
||||
*/
|
||||
class SettingsController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('auth');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display general settings page.
|
||||
*
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function general()
|
||||
{
|
||||
return view('settings.general');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display Authentication & Registration settings page.
|
||||
*
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function auth()
|
||||
{
|
||||
return view('settings.auth');
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle application settings update.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(Request $request)
|
||||
{
|
||||
$this->updatesetting($request->except("_token"));
|
||||
|
||||
return back()->withSuccess(__('Settings updated successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update settings and fire appropriate event.
|
||||
*
|
||||
* @param $input
|
||||
*/
|
||||
private function updatesetting($input)
|
||||
{
|
||||
foreach ($input as $key => $value) {
|
||||
Setting::set($key, $value);
|
||||
}
|
||||
|
||||
Setting::save();
|
||||
|
||||
event(new SettingsUpdated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable system 2FA.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function enableTwoFactor()
|
||||
{
|
||||
$this->updatesetting(['2fa.enabled' => true]);
|
||||
|
||||
return back()->withSuccess(__('Two-Factor Authentication enabled successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable system 2FA.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function disableTwoFactor()
|
||||
{
|
||||
$this->updatesetting(['2fa.enabled' => false]);
|
||||
|
||||
return back()->withSuccess(__('Two-Factor Authentication disabled successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable registration captcha.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function enableCaptcha()
|
||||
{
|
||||
$this->updatesetting(['registration.captcha.enabled' => true]);
|
||||
|
||||
return back()->withSuccess(__('reCAPTCHA enabled successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable registration captcha.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function disableCaptcha()
|
||||
{
|
||||
$this->updatesetting(['registration.captcha.enabled' => false]);
|
||||
|
||||
return back()->withSuccess(__('reCAPTCHA disabled successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Display notification settings page.
|
||||
*
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function notifications()
|
||||
{
|
||||
return view('settings.notifications');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web;
|
||||
|
||||
use Vanguard\Events\User\TwoFactorDisabled;
|
||||
use Vanguard\Events\User\TwoFactorEnabled;
|
||||
use Vanguard\Events\User\TwoFactorEnabledByAdmin;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Http\Requests\TwoFactor\DisableTwoFactorRequest;
|
||||
use Vanguard\Http\Requests\TwoFactor\EnableTwoFactorRequest;
|
||||
use Vanguard\Http\Requests\TwoFactor\ReSendTwoFactorTokenRequest;
|
||||
use Vanguard\Http\Requests\TwoFactor\VerifyTwoFactorTokenRequest;
|
||||
use Authy;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
|
||||
/**
|
||||
* Class ProfileController
|
||||
* @package Vanguard\Http\Controllers
|
||||
*/
|
||||
class TwoFactorController extends Controller
|
||||
{
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->middleware('auth');
|
||||
|
||||
$this->middleware(function ($request, $next) use ($users) {
|
||||
$user = $request->get('user')
|
||||
? $users->find($request->get('user'))
|
||||
: auth()->user();
|
||||
|
||||
return Authy::isEnabled($user) ? abort(404) : $next($request);
|
||||
})->only('enable', 'verification', 'resend', 'verify');
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable 2FA for currently logged user.
|
||||
*
|
||||
* @param EnableTwoFactorRequest $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function enable(EnableTwoFactorRequest $request)
|
||||
{
|
||||
$user = $request->theUser();
|
||||
|
||||
$user->setAuthPhoneInformation($request->country_code, $request->phone_number);
|
||||
|
||||
Authy::register($user);
|
||||
|
||||
$user->save();
|
||||
|
||||
Authy::sendTwoFactorVerificationToken($user);
|
||||
|
||||
return $user->is(auth()->user())
|
||||
? redirect()->route('two-factor.verification')
|
||||
: redirect()->route('two-factor.verification', ['user' => $user->id]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show the phone verification page.
|
||||
*
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function verification()
|
||||
{
|
||||
return view('user.two-factor-verification', [
|
||||
'user' => request('user')
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-send phone verification token.
|
||||
* @param ReSendTwoFactorTokenRequest $request
|
||||
*/
|
||||
public function resend(ReSendTwoFactorTokenRequest $request)
|
||||
{
|
||||
Authy::sendTwoFactorVerificationToken($request->theUser());
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify 2FA token and enable 2FA if token is valid.
|
||||
*
|
||||
* @param VerifyTwoFactorTokenRequest $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function verify(VerifyTwoFactorTokenRequest $request)
|
||||
{
|
||||
$user = $request->theUser();
|
||||
|
||||
if (! Authy::tokenIsValid($user, $request->token)) {
|
||||
return redirect()->route('two-factor.verification')
|
||||
->withErrors(['token' => 'Invalid 2FA token.']);
|
||||
}
|
||||
|
||||
$user->setTwoFactorAuthProviderOptions(array_merge(
|
||||
$user->getTwoFactorAuthProviderOptions(),
|
||||
['enabled' => true]
|
||||
));
|
||||
|
||||
$user->save();
|
||||
|
||||
$message = __('Two-Factor Authentication enabled successfully.');
|
||||
|
||||
if ($user->is(auth()->user())) {
|
||||
event(new TwoFactorEnabled);
|
||||
|
||||
return redirect()->route('profile')->withSuccess($message);
|
||||
}
|
||||
|
||||
event(new TwoFactorEnabledByAdmin($user));
|
||||
|
||||
return redirect()->route('users.edit', $user)->withSuccess($message);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable 2FA for currently logged user.
|
||||
*
|
||||
* @param DisableTwoFactorRequest $request
|
||||
* @return \Illuminate\Http\RedirectResponse
|
||||
*/
|
||||
public function disable(DisableTwoFactorRequest $request)
|
||||
{
|
||||
$user = $request->theUser();
|
||||
|
||||
if (! Authy::isEnabled($user)) {
|
||||
abort(404);
|
||||
}
|
||||
|
||||
Authy::delete($user);
|
||||
|
||||
$user->save();
|
||||
|
||||
event(new TwoFactorDisabled);
|
||||
|
||||
return redirect()->back()
|
||||
->withSuccess(__('Two-Factor Authentication disabled successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Users;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
use Vanguard\Events\User\UpdatedByAdmin;
|
||||
use Vanguard\Http\Controllers\Api\ApiController;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Services\Upload\UserAvatarManager;
|
||||
use Vanguard\User;
|
||||
|
||||
/**
|
||||
* Class AvatarController
|
||||
* @package Vanguard\Http\Controllers\Api\Users
|
||||
*/
|
||||
class AvatarController extends ApiController
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* @var UserAvatarManager
|
||||
*/
|
||||
private $avatarManager;
|
||||
|
||||
public function __construct(UserRepository $users, UserAvatarManager $avatarManager)
|
||||
{
|
||||
$this->users = $users;
|
||||
$this->avatarManager = $avatarManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update user's avatar from uploaded image.
|
||||
*
|
||||
* @param User $user
|
||||
* @param Request $request
|
||||
* @return mixed
|
||||
* @throws ValidationException
|
||||
*/
|
||||
public function update(User $user, Request $request)
|
||||
{
|
||||
$this->validate($request, ['avatar' => 'image']);
|
||||
|
||||
$name = $this->avatarManager->uploadAndCropAvatar(
|
||||
$request->file('avatar'),
|
||||
$request->get('points')
|
||||
);
|
||||
|
||||
if ($name) {
|
||||
$this->users->update($user->id, ['avatar' => $name]);
|
||||
|
||||
event(new UpdatedByAdmin($user));
|
||||
|
||||
return redirect()->route('users.edit', $user)
|
||||
->withSuccess(__('Avatar changed successfully.'));
|
||||
}
|
||||
|
||||
return redirect()->route('users.edit', $user)
|
||||
->withErrors(__('Avatar image cannot be updated. Please try again.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Update user's avatar from some external source (Gravatar, Facebook, Twitter...)
|
||||
*
|
||||
* @param User $user
|
||||
* @param Request $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function updateExternal(User $user, Request $request)
|
||||
{
|
||||
$this->avatarManager->deleteAvatarIfUploaded($user);
|
||||
|
||||
$this->users->update($user->id, ['avatar' => $request->get('url')]);
|
||||
|
||||
event(new UpdatedByAdmin($user));
|
||||
|
||||
return redirect()->route('users.edit', $user)
|
||||
->withSuccess(__('Avatar changed successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Users;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Vanguard\Events\User\Banned;
|
||||
use Vanguard\Events\User\UpdatedByAdmin;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Http\Requests\User\UpdateDetailsRequest;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Support\Enum\UserStatus;
|
||||
use Vanguard\User;
|
||||
|
||||
/**
|
||||
* Class UserDetailsController
|
||||
* @package Vanguard\Http\Controllers\Users
|
||||
*/
|
||||
class DetailsController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* UsersController constructor.
|
||||
* @param UserRepository $users
|
||||
*/
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates user details.
|
||||
*
|
||||
* @param User $user
|
||||
* @param UpdateDetailsRequest $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(User $user, UpdateDetailsRequest $request)
|
||||
{
|
||||
$data = $request->all();
|
||||
|
||||
if (! data_get($data, 'country_id')) {
|
||||
$data['country_id'] = null;
|
||||
}
|
||||
|
||||
$this->users->update($user->id, $data);
|
||||
$this->users->setRole($user->id, $request->role_id);
|
||||
|
||||
event(new UpdatedByAdmin($user));
|
||||
|
||||
// If user status was updated to "Banned",
|
||||
// fire the appropriate event.
|
||||
if ($this->userWasBanned($user, $request)) {
|
||||
event(new Banned($user));
|
||||
}
|
||||
|
||||
return redirect()->back()
|
||||
->withSuccess(__('User updated successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if user is banned during last update.
|
||||
*
|
||||
* @param User $user
|
||||
* @param Request $request
|
||||
* @return bool
|
||||
*/
|
||||
private function userWasBanned(User $user, Request $request)
|
||||
{
|
||||
return $user->status != $request->status
|
||||
&& $request->status == UserStatus::BANNED;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Users;
|
||||
|
||||
use Vanguard\Events\User\UpdatedByAdmin;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Http\Requests\User\UpdateLoginDetailsRequest;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\User;
|
||||
|
||||
/**
|
||||
* Class UserDetailsController
|
||||
* @package Vanguard\Http\Controllers\Users
|
||||
*/
|
||||
class LoginDetailsController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* UsersController constructor.
|
||||
* @param UserRepository $users
|
||||
*/
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update user's login details.
|
||||
*
|
||||
* @param User $user
|
||||
* @param UpdateLoginDetailsRequest $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function update(User $user, UpdateLoginDetailsRequest $request)
|
||||
{
|
||||
$data = $request->all();
|
||||
|
||||
if (! $data['password']) {
|
||||
unset($data['password']);
|
||||
unset($data['password_confirmation']);
|
||||
}
|
||||
|
||||
$this->users->update($user->id, $data);
|
||||
|
||||
event(new UpdatedByAdmin($user));
|
||||
|
||||
return redirect()->route('users.edit', $user->id)
|
||||
->withSuccess(__('Login details updated successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Users;
|
||||
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\View\View;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Repositories\Session\SessionRepository;
|
||||
use Vanguard\User;
|
||||
|
||||
/**
|
||||
* Class SessionsController
|
||||
* @package Vanguard\Http\Controllers\Web\Users
|
||||
*/
|
||||
class SessionsController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var SessionRepository
|
||||
*/
|
||||
private $sessions;
|
||||
|
||||
/**
|
||||
* SessionsController constructor.
|
||||
* @param SessionRepository $sessions
|
||||
*/
|
||||
public function __construct(SessionRepository $sessions)
|
||||
{
|
||||
$this->middleware('permission:users.manage');
|
||||
|
||||
$this->sessions = $sessions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays the list with all active sessions for the selected user.
|
||||
*
|
||||
* @param User $user
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function index(User $user)
|
||||
{
|
||||
return view('user.sessions', [
|
||||
'adminView' => true,
|
||||
'user' => $user,
|
||||
'sessions' => $this->sessions->getUserSessions($user->id)
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invalidate specified session for selected user.
|
||||
*
|
||||
* @param User $user
|
||||
* @param $session
|
||||
* @return mixed
|
||||
*/
|
||||
public function destroy(User $user, $session)
|
||||
{
|
||||
$this->sessions->invalidateSession($session->id);
|
||||
|
||||
return redirect()->route('user.sessions', $user->id)
|
||||
->withSuccess(__('Session invalidated successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,163 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Controllers\Web\Users;
|
||||
|
||||
use Illuminate\Contracts\View\Factory;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\View;
|
||||
use Vanguard\Events\User\Deleted;
|
||||
use Vanguard\Http\Controllers\Controller;
|
||||
use Vanguard\Http\Requests\User\CreateUserRequest;
|
||||
use Vanguard\Repositories\Activity\ActivityRepository;
|
||||
use Vanguard\Repositories\Country\CountryRepository;
|
||||
use Vanguard\Repositories\Role\RoleRepository;
|
||||
use Vanguard\Repositories\User\UserRepository;
|
||||
use Vanguard\Support\Enum\UserStatus;
|
||||
use Vanguard\User;
|
||||
|
||||
/**
|
||||
* Class UsersController
|
||||
* @package Vanguard\Http\Controllers
|
||||
*/
|
||||
class UsersController extends Controller
|
||||
{
|
||||
/**
|
||||
* @var UserRepository
|
||||
*/
|
||||
private $users;
|
||||
|
||||
/**
|
||||
* UsersController constructor.
|
||||
* @param UserRepository $users
|
||||
*/
|
||||
public function __construct(UserRepository $users)
|
||||
{
|
||||
$this->users = $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display paginated list of all users.
|
||||
*
|
||||
* @param Request $request
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$users = $this->users->paginate($perPage = 20, $request->search, $request->status);
|
||||
|
||||
$statuses = ['' => __('All')] + UserStatus::lists();
|
||||
|
||||
return view('user.list', compact('users', 'statuses'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays user profile page.
|
||||
*
|
||||
* @param User $user
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function show(User $user)
|
||||
{
|
||||
return view('user.view', compact('user'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays form for creating a new user.
|
||||
*
|
||||
* @param CountryRepository $countryRepository
|
||||
* @param RoleRepository $roleRepository
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function create(CountryRepository $countryRepository, RoleRepository $roleRepository)
|
||||
{
|
||||
return view('user.add', [
|
||||
'countries' => $this->parseCountries($countryRepository),
|
||||
'roles' => $roleRepository->lists(),
|
||||
'statuses' => UserStatus::lists()
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse countries into an array that also has a blank
|
||||
* item as first element, which will allow users to
|
||||
* leave the country field unpopulated.
|
||||
*
|
||||
* @param CountryRepository $countryRepository
|
||||
* @return array
|
||||
*/
|
||||
private function parseCountries(CountryRepository $countryRepository)
|
||||
{
|
||||
return [0 => __('Select a Country')] + $countryRepository->lists()->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Stores new user into the database.
|
||||
*
|
||||
* @param CreateUserRequest $request
|
||||
* @return mixed
|
||||
*/
|
||||
public function store(CreateUserRequest $request)
|
||||
{
|
||||
// When user is created by administrator, we will set his
|
||||
// status to Active by default.
|
||||
$data = $request->all() + [
|
||||
'status' => UserStatus::ACTIVE,
|
||||
'email_verified_at' => now()
|
||||
];
|
||||
|
||||
if (! data_get($data, 'country_id')) {
|
||||
$data['country_id'] = null;
|
||||
}
|
||||
|
||||
// Username should be updated only if it is provided.
|
||||
if (! data_get($data, 'username')) {
|
||||
$data['username'] = null;
|
||||
}
|
||||
|
||||
$this->users->create($data);
|
||||
|
||||
return redirect()->route('users.index')
|
||||
->withSuccess(__('User created successfully.'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Displays edit user form.
|
||||
*
|
||||
* @param User $user
|
||||
* @param CountryRepository $countryRepository
|
||||
* @param RoleRepository $roleRepository
|
||||
* @return Factory|View
|
||||
*/
|
||||
public function edit(User $user, CountryRepository $countryRepository, RoleRepository $roleRepository)
|
||||
{
|
||||
return view('user.edit', [
|
||||
'edit' => true,
|
||||
'user' => $user,
|
||||
'countries' => $this->parseCountries($countryRepository),
|
||||
'roles' => $roleRepository->lists(),
|
||||
'statuses' => UserStatus::lists(),
|
||||
'socialLogins' => $this->users->getUserSocialLogins($user->id)
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes the user from database.
|
||||
*
|
||||
* @param User $user
|
||||
* @return $this
|
||||
*/
|
||||
public function destroy(User $user)
|
||||
{
|
||||
if ($user->is(auth()->user())) {
|
||||
return redirect()->route('users.index')
|
||||
->withErrors(__('You cannot delete yourself.'));
|
||||
}
|
||||
|
||||
$this->users->delete($user->id);
|
||||
|
||||
event(new Deleted($user));
|
||||
|
||||
return redirect()->route('users.index')
|
||||
->withSuccess(__('User deleted successfully.'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Filters;
|
||||
|
||||
use Illuminate\Database\Eloquent\Builder;
|
||||
use Spatie\QueryBuilder\Filters\Filter;
|
||||
|
||||
class UserKeywordSearch implements Filter
|
||||
{
|
||||
public function __invoke(Builder $query, $search, string $property = '')
|
||||
{
|
||||
$query->where(function ($q) use ($search) {
|
||||
$q->where('username', "like", "%{$search}%");
|
||||
$q->orWhere('email', 'like', "%{$search}%");
|
||||
$q->orWhere('first_name', 'like', "%{$search}%");
|
||||
$q->orWhere('last_name', 'like', "%{$search}%");
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http;
|
||||
|
||||
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
||||
|
||||
class Kernel extends HttpKernel
|
||||
{
|
||||
/**
|
||||
* The application's global HTTP middleware stack.
|
||||
*
|
||||
* These middleware are run during every request to your application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [
|
||||
\Vanguard\Http\Middleware\TrustProxies::class,
|
||||
\Fruitcake\Cors\HandleCors::class,
|
||||
\Vanguard\Http\Middleware\VerifyInstallation::class,
|
||||
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
||||
\Vanguard\Http\Middleware\TrimStrings::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||
];
|
||||
/**
|
||||
* The application's route middleware groups.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middlewareGroups = [
|
||||
'web' => [
|
||||
\Vanguard\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
// \Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\Vanguard\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
'banned',
|
||||
],
|
||||
'api' => [
|
||||
\Vanguard\Http\Middleware\UseApiGuard::class,
|
||||
\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class,
|
||||
'throttle:60,1',
|
||||
'bindings',
|
||||
'banned',
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $routeMiddleware = [
|
||||
'auth' => \Vanguard\Http\Middleware\Authenticate::class,
|
||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
|
||||
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
||||
'guest' => \Vanguard\Http\Middleware\RedirectIfAuthenticated::class,
|
||||
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
|
||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||
'registration' => \Vanguard\Http\Middleware\RegistrationEnabled::class,
|
||||
'social.login' => \Vanguard\Http\Middleware\SocialLogin::class,
|
||||
'role' => \Vanguard\Http\Middleware\CheckRole::class,
|
||||
'permission' => \Vanguard\Http\Middleware\CheckPermissions::class,
|
||||
'session.database' => \Vanguard\Http\Middleware\DatabaseSession::class,
|
||||
'two-factor' => \Vanguard\Http\Middleware\TwoFactorEnabled::class,
|
||||
'verify-2fa-phone' => \Vanguard\Http\Middleware\VerifyTwoFactorPhone::class,
|
||||
'password-reset' => \Vanguard\Http\Middleware\PasswordResetEnabled::class,
|
||||
'banned' => \Vanguard\Http\Middleware\CheckIfBanned::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* The priority-sorted list of middleware.
|
||||
*
|
||||
* This forces non-global middleware to always be in the given order.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middlewarePriority = [
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\Vanguard\Http\Middleware\Authenticate::class,
|
||||
\Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
\Illuminate\Auth\Middleware\Authorize::class,
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Contracts\Auth\Guard;
|
||||
|
||||
class Authenticate
|
||||
{
|
||||
/**
|
||||
* The Guard implementation.
|
||||
*
|
||||
* @var Guard
|
||||
*/
|
||||
protected $auth;
|
||||
|
||||
/**
|
||||
* Create a new filter instance.
|
||||
*
|
||||
* @param Guard $auth
|
||||
* @return void
|
||||
*/
|
||||
public function __construct(Guard $auth)
|
||||
{
|
||||
$this->auth = $auth;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if ($this->auth->guest()) {
|
||||
return $request->expectsJson()
|
||||
? response('Unauthorized.', 401)
|
||||
: redirect()->guest('login');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
|
||||
class CheckIfBanned
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if ($request->user() && $request->user()->isBanned()) {
|
||||
abort(403, __("Your account is banned by administrator."));
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Contracts\Auth\Guard;
|
||||
|
||||
class CheckPermissions
|
||||
{
|
||||
protected $auth;
|
||||
/**
|
||||
* Creates a new instance of the middleware.
|
||||
*
|
||||
* @param Guard $auth
|
||||
*/
|
||||
public function __construct(Guard $auth)
|
||||
{
|
||||
$this->auth = $auth;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @param $permissions
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next, $permissions)
|
||||
{
|
||||
if (! is_array($permissions)) {
|
||||
$permissions = explode("|", $permissions);
|
||||
}
|
||||
|
||||
if ($this->auth->guest() || ! $request->user()->hasPermission($permissions)) {
|
||||
abort(403, "Forbidden.");
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace Vanguard\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Contracts\Auth\Guard;
|
||||
|
||||
class CheckRole
|
||||
{
|
||||
protected $auth;
|
||||
/**
|
||||
* Creates a new instance of the middleware.
|
||||
*
|
||||
* @param Guard $auth
|
||||
*/
|
||||
public function __construct(Guard $auth)
|
||||
{
|
||||
$this->auth = $auth;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next, $role)
|
||||
{
|
||||
if ($this->auth->guest() || ! $request->user()->hasRole($role)) {
|
||||
abort(403);
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user