55namespace PhpMyAdmin ;
66
77use PhpMyAdmin \Config \Settings ;
8+ use PhpMyAdmin \Config \Settings \Server ;
89use PhpMyAdmin \Dbal \Connection ;
910use PhpMyAdmin \Exceptions \ConfigException ;
1011use PhpMyAdmin \Theme \ThemeManager ;
@@ -86,17 +87,15 @@ class Config
8687
8788 public bool $ errorConfigFile = false ;
8889
89- /** @var mixed[] */
90- public array $ defaultServer ;
91-
9290 private bool $ isHttps = false ;
9391
94- private Settings $ config ;
92+ public Settings $ config ;
93+ /** @var int<0, max> */
94+ public int $ server = 0 ;
9595
9696 public function __construct ()
9797 {
9898 $ this ->config = new Settings ([]);
99- $ this ->defaultServer = $ this ->config ->Servers [1 ]->asArray ();
10099 $ config = $ this ->config ->asArray ();
101100 $ this ->default = $ config ;
102101 $ this ->settings = $ config ;
@@ -1063,34 +1062,27 @@ public function getUploadTempDir(): string|null
10631062 return null ;
10641063 }
10651064
1066- /**
1067- * Selects server based on request parameters.
1068- */
1069- public function selectServer (): int
1065+ /** @return int<0, max> */
1066+ public function selectServer (mixed $ serverParamFromRequest ): int
10701067 {
1071- $ request = empty ($ _REQUEST ['server ' ]) ? 0 : $ _REQUEST ['server ' ];
1072-
1073- /**
1074- * Lookup server by name
1075- * (see FAQ 4.8)
1076- */
1077- if (! is_numeric ($ request )) {
1078- foreach ($ this ->settings ['Servers ' ] as $ i => $ server ) {
1079- $ verboseToLower = mb_strtolower ($ server ['verbose ' ]);
1080- $ serverToLower = mb_strtolower ($ request );
1081- if (
1082- $ server ['host ' ] == $ request
1083- || $ server ['verbose ' ] == $ request
1084- || $ verboseToLower === $ serverToLower
1085- || md5 ($ verboseToLower ) === $ serverToLower
1086- ) {
1087- $ request = $ i ;
1068+ $ serverNumber = 0 ;
1069+ if (is_numeric ($ serverParamFromRequest )) {
1070+ $ serverNumber = (int ) $ serverParamFromRequest ;
1071+ $ serverNumber = $ serverNumber >= 1 ? $ serverNumber : 0 ;
1072+ } elseif (is_string ($ serverParamFromRequest ) && $ serverParamFromRequest !== '' ) {
1073+ /** Lookup server by name (see FAQ 4.8) */
1074+ foreach ($ this ->config ->Servers as $ i => $ server ) {
1075+ if ($ server ->host === $ serverParamFromRequest || $ server ->verbose === $ serverParamFromRequest ) {
1076+ $ serverNumber = $ i ;
10881077 break ;
10891078 }
1090- }
10911079
1092- if (is_string ($ request )) {
1093- $ request = 0 ;
1080+ $ verboseToLower = mb_strtolower ($ server ->verbose );
1081+ $ serverToLower = mb_strtolower ($ serverParamFromRequest );
1082+ if ($ verboseToLower === $ serverToLower || md5 ($ verboseToLower ) === $ serverToLower ) {
1083+ $ serverNumber = $ i ;
1084+ break ;
1085+ }
10941086 }
10951087 }
10961088
@@ -1102,21 +1094,19 @@ public function selectServer(): int
11021094 * present a choice of servers in the case that there are multiple servers
11031095 * and '$this->settings['ServerDefault'] = 0' is set.
11041096 */
1105-
1106- if (is_numeric ($ request ) && ! empty ($ request ) && ! empty ($ this ->settings ['Servers ' ][$ request ])) {
1107- $ server = $ request ;
1108- $ this ->settings ['Server ' ] = $ this ->settings ['Servers ' ][$ server ];
1097+ if (isset ($ this ->config ->Servers [$ serverNumber ])) {
1098+ $ this ->settings ['Server ' ] = $ this ->config ->Servers [$ serverNumber ]->asArray ();
1099+ } elseif (isset ($ this ->config ->Servers [$ this ->config ->ServerDefault ])) {
1100+ $ serverNumber = $ this ->config ->ServerDefault ;
1101+ $ this ->settings ['Server ' ] = $ this ->config ->Servers [$ this ->config ->ServerDefault ]->asArray ();
11091102 } else {
1110- if (! empty ($ this ->settings ['Servers ' ][$ this ->settings ['ServerDefault ' ]])) {
1111- $ server = $ this ->settings ['ServerDefault ' ];
1112- $ this ->settings ['Server ' ] = $ this ->settings ['Servers ' ][$ server ];
1113- } else {
1114- $ server = 0 ;
1115- $ this ->settings ['Server ' ] = [];
1116- }
1103+ $ serverNumber = 0 ;
1104+ $ this ->settings ['Server ' ] = [];
11171105 }
11181106
1119- return (int ) $ server ;
1107+ $ this ->server = $ serverNumber ;
1108+
1109+ return $ this ->server ;
11201110 }
11211111
11221112 /**
@@ -1252,4 +1242,9 @@ public function getSettings(): Settings
12521242 {
12531243 return $ this ->config ;
12541244 }
1245+
1246+ public function getCurrentServer (): Server |null
1247+ {
1248+ return $ this ->config ->Servers [$ this ->server ] ?? null ;
1249+ }
12551250}
0 commit comments