Технически говоря, у меня запущена авторизация, и моя программа может использовать созданный BoxAPIConnection для загрузки / выгрузки из облачного хранилища.
Но я могу заставить его работать только в этой части:
public void loginButtonClicked() throws IOException, URISyntaxException
{
if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
Desktop.getDesktop().browse(new URI("http://localhost:4567/start"));
}
get("/start", (req, res) -> {
// Redirect user to login with Box
String box_redirect = ConfigAuth.box_redirect
+ "?response_type=code"
+ "&client_id=" + ConfigAuth.client_id
+ "&client_secret=" + ConfigAuth.client_secret
+ "&redirect_uri=" + ConfigAuth.redirect_uri;
res.redirect(box_redirect);
return "redirecting...";
});
get("/return", (req, res) -> {
// Capture authentication code
String code = req.queryParams("code");
// Instantiate new Box API connection object
BoxAPIConnection api = new BoxAPIConnection(ConfigAuth.client_id,ConfigAuth.client_secret,code);
String rootID = "0";
String targetDir = "F:\\eclipse\\khjbgl\\Downloaded Files\\";
DownloadAll(rootID, targetDir, api);
return "display page";
});
Эта кнопка предназначена только для входа в систему и авторизации Программного обеспечения, поэтому она не должна сразу загружать что-либо.
Теперь актуальная проблема: если я вызываю функцию загрузки в другом месте, то я не могу получить доступ к API BoxAPIConnection, созданному в процессе входа в систему.
API находится локально в части аутентификации, но я также нуждаюсь в других функциях.
Я попытался сохранить состояние подключения API в файле, а затем восстановить его в функции загрузки, но это дает мне исключение json.ParseException.
public void loginButtonClicked() throws IOException, URISyntaxException
{
if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
Desktop.getDesktop().browse(new URI("http://localhost:4567/start"));
}
get("/start", (req, res) -> {
// Redirect user to login with Box
String box_redirect = ConfigAuth.box_redirect
+ "?response_type=code"
+ "&client_id=" + ConfigAuth.client_id
+ "&client_secret=" + ConfigAuth.client_secret
+ "&redirect_uri=" + ConfigAuth.redirect_uri;
res.redirect(box_redirect);
return "redirecting...";
});
get("/return", (req, res) -> {
// Capture authentication code
String code = req.queryParams("code");
// Instantiate new Box API connection object
BoxAPIConnection api = new BoxAPIConnection(ConfigAuth.client_id,ConfigAuth.client_secret,code);
JSONParser parser = new JSONParser();
JSONObject obj = (JSONObject) parser.parse(api.save());
FileWriter file = new FileWriter("API.txt");
try {
file.write(obj.toJSONString());
System.out.println("successfully copied json object to file");
System.out.println("\nJSON Object: " + obj);
} catch (IOException e)
{
e.printStackTrace();
}
finally {
file.flush();
file.close();
}
//String rootID = "0";
//String targetDir = "F:\\eclipse\\khjbgl\\Downloaded Files\\";
//DownloadAll(rootID, targetDir, api);
return "display page";
});
}
public void DownloadAllClick (ActionEvent event) throws FileNotFoundException, IOException {
File file = new File ("API.txt");
BufferedReader br = new BufferedReader(new FileReader(file));
StringBuilder sb = new StringBuilder();
String line = null;
String ls = System.getProperty("line.seperator");
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append(ls);
}
//sb.deleteCharAt(sb.length() -1);
br.close();
String apiString = sb.toString();
BoxAPIConnection api = BoxAPIConnection.restore(ConfigAuth.client_id, ConfigAuth.client_secret, apiString);
String rootID = "0";
String targetDir = "F:\\eclipse\\khjbgl\\Downloaded Files\\";
DownloadAll(rootID, targetDir, api);
}
Как использовать созданные API в других моих функциях, не предлагая пользователю снова авторизовать все программное обеспечение?