1
1
package directadmin
2
2
3
3
import (
4
+ "bytes"
4
5
"fmt"
6
+ "mime/multipart"
5
7
"net/http"
6
8
"os"
7
9
"strconv"
57
59
func (c * UserContext ) CreateDatabase (database * Database ) error {
58
60
database .Name = c .addUsernamePrefix (database .Name )
59
61
60
- if _ , err := c .api . makeRequestN (http .MethodPost , "db-manage/create-db" , c . credentials , database , nil ); err != nil {
62
+ if _ , err := c .makeRequestNew (http .MethodPost , "db-manage/create-db" , database , nil ); err != nil {
61
63
return err
62
64
}
63
65
@@ -68,7 +70,7 @@ func (c *UserContext) CreateDatabaseWithUser(database *DatabaseWithUser) error {
68
70
database .Name = c .addUsernamePrefix (database .Name )
69
71
database .User = c .addUsernamePrefix (database .User )
70
72
71
- if _ , err := c .api . makeRequestN (http .MethodPost , "db-manage/create-db-with-user" , c . credentials , database , nil ); err != nil {
73
+ if _ , err := c .makeRequestNew (http .MethodPost , "db-manage/create-db-with-user" , database , nil ); err != nil {
72
74
return err
73
75
}
74
76
@@ -78,7 +80,7 @@ func (c *UserContext) CreateDatabaseWithUser(database *DatabaseWithUser) error {
78
80
func (c * UserContext ) CreateDatabaseUser (databaseUser * DatabaseUser ) error {
79
81
databaseUser .User = c .addUsernamePrefix (databaseUser .User )
80
82
81
- if _ , err := c .api . makeRequestN (http .MethodPost , "db-manage/create-user" , c . credentials , databaseUser , nil ); err != nil {
83
+ if _ , err := c .makeRequestNew (http .MethodPost , "db-manage/create-user" , databaseUser , nil ); err != nil {
82
84
return err
83
85
}
84
86
@@ -88,16 +90,14 @@ func (c *UserContext) CreateDatabaseUser(databaseUser *DatabaseUser) error {
88
90
func (c * UserContext ) DeleteDatabase (databaseName string ) error {
89
91
databaseName = c .addUsernamePrefix (databaseName )
90
92
91
- if _ , err := c .api . makeRequestN (http .MethodDelete , "db-manage/databases/" + databaseName , c . credentials , nil , nil ); err != nil {
93
+ if _ , err := c .makeRequestNew (http .MethodDelete , "db-manage/databases/" + databaseName , nil , nil ); err != nil {
92
94
return err
93
95
}
94
96
95
97
return nil
96
98
}
97
99
98
100
func (c * UserContext ) DownloadDatabase (name string , format DatabaseFormat , filePath string ) error {
99
- var response apiGenericResponse
100
-
101
101
name = name + "." + string (format )
102
102
103
103
if ! strings .Contains (name , c .GetMyUsername ()+ "_" ) {
@@ -119,18 +119,23 @@ func (c *UserContext) DownloadDatabase(name string, format DatabaseFormat, fileP
119
119
}
120
120
}
121
121
122
- if _ , err := c .api .makeRequest (http .MethodPost , "DB/" + name , c .credentials , nil , & response , file ); err != nil {
122
+ resp , err := c .makeRequestOld (http .MethodPost , "DB/" + name , nil , nil )
123
+ if err != nil {
123
124
return fmt .Errorf ("failed to download database: %v" , err )
124
125
}
125
126
127
+ if _ , err = file .Write (resp ); err != nil {
128
+ return fmt .Errorf ("error writing to file: %w" , err )
129
+ }
130
+
126
131
return nil
127
132
}
128
133
129
134
// ExportDatabase (user) returns an export of the given database
130
135
func (c * UserContext ) ExportDatabase (databaseName string , gzip bool ) ([]byte , error ) {
131
136
databaseName = c .addUsernamePrefix (databaseName )
132
137
133
- export , err := c .api . makeRequestN (http .MethodGet , "db-manage/databases/" + databaseName + "/export?gzip=" + strconv .FormatBool (gzip ), c . credentials , nil , nil )
138
+ export , err := c .makeRequestNew (http .MethodGet , "db-manage/databases/" + databaseName + "/export?gzip=" + strconv .FormatBool (gzip ), nil , nil )
134
139
if err != nil {
135
140
return nil , err
136
141
}
@@ -144,7 +149,7 @@ func (c *UserContext) GetDatabase(databaseName string) (*Database, error) {
144
149
145
150
var database Database
146
151
147
- if _ , err := c .api . makeRequestN (http .MethodGet , "db-show/databases/" + databaseName , c . credentials , nil , & database ); err != nil {
152
+ if _ , err := c .makeRequestNew (http .MethodGet , "db-show/databases/" + databaseName , nil , & database ); err != nil {
148
153
return nil , err
149
154
}
150
155
@@ -155,7 +160,7 @@ func (c *UserContext) GetDatabase(databaseName string) (*Database, error) {
155
160
func (c * UserContext ) GetDatabases () ([]* Database , error ) {
156
161
var databases []* Database
157
162
158
- if _ , err := c .api . makeRequestN (http .MethodGet , "db-show/databases" , c . credentials , nil , & databases ); err != nil {
163
+ if _ , err := c .makeRequestNew (http .MethodGet , "db-show/databases" , nil , & databases ); err != nil {
159
164
return nil , err
160
165
}
161
166
@@ -166,7 +171,7 @@ func (c *UserContext) GetDatabases() ([]*Database, error) {
166
171
func (c * UserContext ) GetDatabaseProcesses () ([]* DatabaseProcess , error ) {
167
172
var databaseProcesses []* DatabaseProcess
168
173
169
- if _ , err := c .api . makeRequestN (http .MethodGet , "db-monitor/processes" , c . credentials , nil , & databaseProcesses ); err != nil {
174
+ if _ , err := c .makeRequestNew (http .MethodGet , "db-monitor/processes" , nil , & databaseProcesses ); err != nil {
170
175
return nil , err
171
176
}
172
177
@@ -177,7 +182,23 @@ func (c *UserContext) GetDatabaseProcesses() ([]*DatabaseProcess, error) {
177
182
func (c * UserContext ) ImportDatabase (databaseName string , emptyExistingDatabase bool , sql []byte ) error {
178
183
databaseName = c .addUsernamePrefix (databaseName )
179
184
180
- if _ , err := c .api .makeRequestN (http .MethodPost , "db-manage/databases/" + databaseName + "/import?clean=" + strconv .FormatBool (emptyExistingDatabase ), c .credentials , sql , nil , true ); err != nil {
185
+ var byteBuffer bytes.Buffer
186
+ multipartWriter := multipart .NewWriter (& byteBuffer )
187
+
188
+ formFile , err := multipartWriter .CreateFormFile ("sqlfile" , "filename" )
189
+ if err != nil {
190
+ return fmt .Errorf ("failed to create form file: %w" , err )
191
+ }
192
+
193
+ if _ , err = formFile .Write (sql ); err != nil {
194
+ return fmt .Errorf ("failed to write to form file: %w" , err )
195
+ }
196
+
197
+ if err = multipartWriter .Close (); err != nil {
198
+ return fmt .Errorf ("failed to close multipart writer: %w" , err )
199
+ }
200
+
201
+ if _ , err = c .uploadFile (http .MethodPost , "/api/db-manage/databases/" + databaseName + "/import?clean=" + strconv .FormatBool (emptyExistingDatabase ), byteBuffer .Bytes (), nil , multipartWriter .FormDataContentType ()); err != nil {
181
202
return err
182
203
}
183
204
@@ -188,7 +209,7 @@ func (c *UserContext) ImportDatabase(databaseName string, emptyExistingDatabase
188
209
func (c * UserContext ) UpdateDatabaseUserHosts (username string , hosts []string ) error {
189
210
username = c .addUsernamePrefix (username )
190
211
191
- if _ , err := c .api . makeRequestN (http .MethodPost , "db-manage/users/" + username + "/change-hosts" , c . credentials , hosts , nil ); err != nil {
212
+ if _ , err := c .makeRequestNew (http .MethodPost , "db-manage/users/" + username + "/change-hosts" , hosts , nil ); err != nil {
192
213
return err
193
214
}
194
215
@@ -205,7 +226,7 @@ func (c *UserContext) UpdateDatabaseUserPassword(username string, password strin
205
226
password ,
206
227
}
207
228
208
- if _ , err := c .api . makeRequestN (http .MethodPost , "db-manage/users/" + username + "/change-password" , c . credentials , newPassword , nil ); err != nil {
229
+ if _ , err := c .makeRequestNew (http .MethodPost , "db-manage/users/" + username + "/change-password" , newPassword , nil ); err != nil {
209
230
return err
210
231
}
211
232
0 commit comments