android login to onlyoffice

184
09 января 2019, 08:00

Никак не могу добиться JSON ответа от сервера OnlyOffice, приходит plain/text, всю голову сломал, использую async-http:1.4.9 client.

https://api.onlyoffice.com/portals/auth

     String url = "https://biojack.onlyoffice.com/post/api/2.0/authentication.json";
        RequestParams params = new RequestParams();
        params.setUseJsonStreamer(true);
        params.put("userName", "мой емейл-логин");
        params.put("password", "мой пароль");
        AsyncHttpClient client = new AsyncHttpClient();
// client.setBasicAuth("емейл", "пароль"); вот так работает, но не возвращает json :(
        client.addHeader("content-type", "application/json");
        client.addHeader("accept", "application/json");
        PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
        client.setCookieStore(myCookieStore);
        client.get(appContext, url, params, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                Log.d(TAG, "onSuccess: ");     
            }
            @Override
            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                Log.d(TAG, "onFailure: ");
            }
        });

с client.post вообще не работает, возвращает Location: https://www.onlyoffice.com/wrongportalname.aspx?url=biojack.onlyoffice.com

а client.get возвращает не json и не отдает токен, хотя страничка грузится в чистом тексте, будто я залогинился.

Можно сделать через asyncTask и всё заработает, но не хочу, хотел через готовую библиотеку...

Если использовать client.get(appContext, url, params, new JsonHttpResponseHandler()... , то приходит ответ org.json.JSONException: Response cannot be parsed as JSON data так как там html страничка прилетает.

Answer 1

Как я понимаю документацию, там написано, что POST запрос надо отправлять на

String url = "https://biojack.onlyoffice.com/api/2.0/authentication.json";

В остальном все выглядит верно.

Answer 2

Уф, два дня и разрыв мозга, оказалось надо не на .com стучать, а на .eu (это я в настройках личного кабинета подсмотрел где мой поддомен расположен), плюс параметры запроса тоже в json должны быть :(

  void loginProcess(String loginEmailText, String passwordText, String portalName) {
     String url = "https://biojack.onlyoffice.eu/api/2.0/authentication.json";
     JSONObject jsonParams = new JSONObject();
     StringEntity entity = null;
     try {
       jsonParams.put("userName", "мой емейл");
       jsonParams.put("password", "мой пароль");
       entity = new StringEntity(jsonParams.toString());
       entity.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, String.valueOf(ContentType.APPLICATION_JSON)));
            } catch (JSONException | UnsupportedEncodingException | NullPointerException e) {
                e.printStackTrace();
            }
      AsyncHttpClient client = new AsyncHttpClient();
     // вот эти две строки тут не особо и нужны, так как тип контента я указываю в запросе, но пусть будут
      client.addHeader("Content-Type", String.valueOf(ContentType.APPLICATION_JSON));
      client.addHeader("Accept", String.valueOf(ContentType.APPLICATION_JSON));
      PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
            client.setCookieStore(myCookieStore);
      client.post(getApplicationContext(), url, entity, String.valueOf(ContentType.APPLICATION_JSON), new JsonHttpResponseHandler() {
                @Override
                public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                    super.onSuccess(statusCode, headers, response);
                }
                @Override
                public void onSuccess(int statusCode, Header[] headers, JSONArray response) {
                    super.onSuccess(statusCode, headers, response);
                }
                @Override
                public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
                    super.onFailure(statusCode, headers, throwable, errorResponse);
                }
                @Override
                public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONArray errorResponse) {
                    super.onFailure(statusCode, headers, throwable, errorResponse);
                }
                @Override
                public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
                    super.onFailure(statusCode, headers, responseString, throwable);
                }
                @Override
                public void onSuccess(int statusCode, Header[] headers, String responseString) {
                    super.onSuccess(statusCode, headers, responseString);
                }
                @Override
                protected Object parseResponse(byte[] responseBody) throws JSONException {
                    return super.parseResponse(responseBody);
                }
            });
        }
READ ALSO
Laravel css и .htaccess RewriteRule

Laravel css и .htaccess RewriteRule

Поставил свежий Laravel 55, переименовал server

135
Как сделать видимыми другие теги, когда тег canvas html 5 растянут на весь экран?

Как сделать видимыми другие теги, когда тег canvas html 5 растянут на весь экран?

Игра отрисовывается в canvas, для удобства есть кнопка сделать на весь экран

194
Не получается назначить класс

Не получается назначить класс

Не получает назначит классы делаю так :

166