@@ -60,7 +60,7 @@ public function create($server, $options)
6060 try {
6161 $ db = new Models \Database ;
6262 $ db ->fill ([
63- 'server ' => $ server ->id ,
63+ 'server_id ' => $ server ->id ,
6464 'db_server ' => $ options ['db_server ' ],
6565 'database ' => $ server ->uuidShort . '_ ' . $ options ['database ' ],
6666 'username ' => $ server ->uuidShort . '_ ' . str_random (7 ),
@@ -103,6 +103,54 @@ public function create($server, $options)
103103 }
104104 }
105105
106+ /**
107+ * Updates the password for a given database.
108+ * @param int $database The ID of the database to modify.
109+ * @param string $password The new password to use for the database.
110+ * @return bool
111+ */
112+ public function modifyPassword ($ database , $ password )
113+ {
114+ $ db = Models \Database::findOrFail ($ database );
115+ $ dbr = Models \DatabaseServer::findOrFail ($ db ->db_server );
116+
117+ DB ::beginTransaction ();
118+ try {
119+
120+ $ db ->password = Crypt::encrypt ($ password );
121+ $ db ->save ();
122+
123+ $ capsule = new Capsule ;
124+ $ capsule ->addConnection ([
125+ 'driver ' => 'mysql ' ,
126+ 'host ' => $ dbr ->host ,
127+ 'port ' => $ dbr ->port ,
128+ 'database ' => 'mysql ' ,
129+ 'username ' => $ dbr ->username ,
130+ 'password ' => Crypt::decrypt ($ dbr ->password ),
131+ 'charset ' => 'utf8 ' ,
132+ 'collation ' => 'utf8_unicode_ci ' ,
133+ 'prefix ' => '' ,
134+ 'options ' => [
135+ \PDO ::ATTR_TIMEOUT => 3 ,
136+ ]
137+ ]);
138+
139+ $ capsule ->setAsGlobal ();
140+ Capsule::statement (sprintf (
141+ 'ALTER USER \'%s \'@ \'%s \' IDENTIFIED BY \'%s \'' ,
142+ $ db ->username ,
143+ $ db ->remote ,
144+ $ password
145+ ));
146+
147+ DB ::commit ();
148+ } catch (\Exception $ ex ) {
149+ DB ::rollback ();
150+ throw $ ex ;
151+ }
152+ }
153+
106154 /**
107155 * Drops a database from the associated MySQL Server
108156 * @param int $database The ID of the database to drop.
0 commit comments