Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 627b90bf authored by Ricki Hirner's avatar Ricki Hirner
Browse files

Process authorization

parent 466b1632
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ import android.content.Intent;
import android.content.SyncResult;
import android.os.Bundle;
import android.support.v7.app.NotificationCompat;
import android.util.Base64;
import android.util.Log;

import org.apache.commons.codec.Charsets;
@@ -69,6 +70,10 @@ public class SyncAdapter extends AbstractThreadedSyncAdapter {
            Log.i(TAG, "Fetching remote calendar " + calendar.getUrl());
            @Cleanup("disconnect") HttpURLConnection conn = (HttpURLConnection)new URL(calendar.getUrl()).openConnection();
            conn.setRequestProperty("User-Agent", "ICSdroid/" + Constants.VERSION + " (Android)");
            if (calendar.getUsername() != null && calendar.getPassword() != null) {
                String basicCredentials = calendar.getUsername() + ":" + calendar.getPassword();
                conn.setRequestProperty("Authorization", "Basic " + Base64.encodeToString(basicCredentials.getBytes(), 0));
            }

            if (calendar.getETag()!= null)
                conn.setRequestProperty("If-None-Match", calendar.getETag());
+11 −5
Original line number Diff line number Diff line
@@ -20,15 +20,19 @@ import lombok.Getter;

public class LocalCalendar extends AndroidCalendar {

    protected static final String
    public static final String
            COLUMN_ETAG = Calendars.CAL_SYNC1,
            COLUMN_LAST_MODIFIED = Calendars.CAL_SYNC2,
            COLUMN_LAST_SYNC = Calendars.CAL_SYNC3,
            COLUMN_ERROR_MESSAGE = Calendars.CAL_SYNC4;
            COLUMN_USERNAME = Calendars.CAL_SYNC2,
            COLUMN_PASSWORD = Calendars.CAL_SYNC3,
            COLUMN_LAST_MODIFIED = Calendars.CAL_SYNC4,
            COLUMN_LAST_SYNC = Calendars.CAL_SYNC5,
            COLUMN_ERROR_MESSAGE = Calendars.CAL_SYNC6;

    @Getter protected String
            url,                    // URL of iCalendar file
            eTag;                   // iCalendar ETag at last successful sync
            eTag,                   // iCalendar ETag at last successful sync
            username,               // HTTP username (or null if no auth. required)
            password;               // HTTP password (or null if no auth. required)
    @Getter long lastModified,      // iCalendar Last-Modified at last successful sync (or 0)
            lastSync;               // time of last sync
    @Getter String errorMessage;    // error message (HTTP status or exception name) of last sync (or null)
@@ -50,6 +54,8 @@ public class LocalCalendar extends AndroidCalendar {
    protected void populate(ContentValues info) {
        super.populate(info);
        url = info.getAsString(Calendars.NAME);
        username = info.getAsString(COLUMN_USERNAME);
        password = info.getAsString(COLUMN_PASSWORD);

        eTag = info.getAsString(COLUMN_ETAG);
        if (info.containsKey(COLUMN_LAST_MODIFIED))
+3 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import at.bitfire.ical4android.AndroidCalendar;
import at.bitfire.ical4android.CalendarStorageException;
import at.bitfire.icsdroid.AppAccount;
import at.bitfire.icsdroid.R;
import at.bitfire.icsdroid.db.LocalCalendar;
import yuku.ambilwarna.AmbilWarnaDialog;

public class AddCalendarDetailsFragment extends Fragment implements TextWatcher {
@@ -145,6 +146,8 @@ public class AddCalendarDetailsFragment extends Fragment implements TextWatcher
        calInfo.put(Calendars.OWNER_ACCOUNT, AppAccount.account.name);
        calInfo.put(Calendars.SYNC_EVENTS, 1);
        calInfo.put(Calendars.VISIBLE, 1);
        calInfo.put(LocalCalendar.COLUMN_USERNAME, activity.authRequired ? activity.username : null);
        calInfo.put(LocalCalendar.COLUMN_PASSWORD, activity.authRequired ? activity.password : null);
        calInfo.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_READ);
        try {
            AndroidCalendar.create(AppAccount.account, activity.getContentResolver(), calInfo);
+16 −8
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ import android.support.v4.app.DialogFragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.AsyncTaskLoader;
import android.support.v4.content.Loader;
import android.util.Base64;
import android.widget.Toast;

import java.io.IOException;
@@ -22,15 +23,18 @@ import at.bitfire.icsdroid.R;
import lombok.Cleanup;

public class AddCalendarValidationFragment extends DialogFragment implements LoaderManager.LoaderCallbacks<ResourceInfo> {
    public static final String ARG_URL = "url";

    AddCalendarActivity activity;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        activity = (AddCalendarActivity)getActivity();
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        activity = (AddCalendarActivity)getActivity();
        Loader<ResourceInfo> loader = getLoaderManager().initLoader(0, null, this);
    }

@@ -47,7 +51,7 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa

    @Override
    public Loader<ResourceInfo> onCreateLoader(int id, Bundle args) {
        return new ResourceInfoLoader(getActivity(), activity.url);
        return new ResourceInfoLoader(activity);
    }

    @Override
@@ -78,14 +82,14 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa

    // loader

    static class ResourceInfoLoader extends AsyncTaskLoader<ResourceInfo> {
    protected static class ResourceInfoLoader extends AsyncTaskLoader<ResourceInfo> {
        ResourceInfo info;
        boolean started;

        public ResourceInfoLoader(Context context, URL url) {
            super(context);
        public ResourceInfoLoader(AddCalendarActivity activity) {
            super(activity);

            info = new ResourceInfo(url);
            info = new ResourceInfo(activity.url, activity.authRequired, activity.username, activity.password);
        }

        @Override
@@ -102,6 +106,10 @@ public class AddCalendarValidationFragment extends DialogFragment implements Loa
            HttpURLConnection conn;
            try {
                conn = (HttpURLConnection) info.url.openConnection();
                if (info.authRequired) {
                    String basicCredentials = info.username + ":" + info.password;
                    conn.setRequestProperty("Authorization", "Basic " + Base64.encodeToString(basicCredentials.getBytes(), 0));
                }

                info.statusCode = conn.getResponseCode();
                info.statusMessage = conn.getResponseMessage();
+7 −1
Original line number Diff line number Diff line
@@ -5,6 +5,9 @@ import java.net.URL;
public class ResourceInfo {

    final URL url;
    final boolean authRequired;
    final String username;
    final String password;

    Exception exception;

@@ -13,8 +16,11 @@ public class ResourceInfo {

    int eventsFound = -1;

    ResourceInfo(URL url) {
    ResourceInfo(URL url, boolean authRequired, String username, String password) {
        this.url = url;
        this.authRequired = authRequired;
        this.username = username;
        this.password = password;
    }

}
Loading