开发者

Which URL to be used for app engine client in cloud computing?

开发者 https://www.devze.com 2023-02-20 17:30 出处:网络
I am using cloud computing in my app for push notification. I have a problem in client auth token. I am using the following for authenticating client login token

I am using cloud computing in my app for push notification. I have a problem in client auth token. I am using the following for authenticating client login token

public class AppEngineClient {
    private static final String TAG = "AppEngineClient";

    public static final String BASE_URL = " <Don't know which URL to use here>";
    public static final String AUTH_URL = BASE_URL + "/_ah/login";
    public static final String AUTH_TOKEN_TYPE = "ah";

    public final Context mContext;
    public final String mAccountName;

    public AppEngineClient(Context context, String accountName) {
        this.mContext = context;
        this.mAccountName = accountName;
    }

    public HttpResponse makeRequest(String urlPath, List<NameValuePair> params) throws Exception {
        HttpResponse res = makeRequestNoRetry(urlPath, params, false);
        if (res.getStatusLine().getStatusCode() == 500) {
            res = makeRequestNoRetry(urlPath, params, true);
        }
        return res;
    }

    public HttpResponse makeRequestNoRetry(String urlPath, List<NameValuePair> params, boolean newToken)
            throws Exception {

        // Get auth token for account
        Account account = new Account(mAccountName, "com.google");
        String authToken = getAuthToken(mContext, account);
        if (authToken == null) throw new PendingAuthException(mAccountName);
        if (newToken) {  // invalidate the cached token
            AccountManager accountManager = AccountManager.get(mContext);
            accountManager.invalidateAuthToken(account.type, authToken);
            authToken = getAuthToken(mContext, account);
        }

        // Get ACSID cookie
        DefaultHttpClient client = new DefaultHttpClient();
        String continueURL = BASE_URL;
        URI uri = new URI(AUTH_URL + "?continue=" +
                URLEncoder.encode(continueURL, "UTF-8") +
                "&auth=" + authToken);
        HttpGet method = new HttpGet(uri);
        final HttpParams getParams = new BasicHttpParams();
        HttpClientParams.setRedirecting(getParams, false);  // continue is not used
        method.setParams(getParams);

        HttpResponse res = client.execute(method);
        Header[] headers = res.getHeaders("Set-Cookie");
        if (res.getStatusLine().getStatusCode() != 302 ||
                headers.length == 0) {
            return res;
        }

        String ascidCookie = null;
        for (Header header: headers) {
            if (header.getValue().indexOf("ACSID=") >=0) {
                // let's parse it
                String value = header.getValue();
                String[] pairs = value.split(";");
                ascidCookie = pairs[0];
            }
        }

        // Make POST request
        uri = new URI(BASE_URL + urlPath);
        HttpPost post = new HttpPost(uri);
        UrlEncodedFormEntity entity =
            new UrlEncodedFormEntity(params, "UTF-8");
        post.setEntity(entity);
        post.setHeader("Cookie", ascidCookie);
        post.setHeader("X-Same-Domain", "1");  // XSRF
        res = client.execute(post);
        return res;
    }

    public String getAuthToken(Context context, Account account) {
        String authToken = null;
        AccountManager accountManager = AccountManager.get(context);
        try {
            AccountManagerFuture<Bundle> future =
                    accountManager.getAuthToken (account, AUTH_TOKEN_TYPE, false, null, null);
            Bundle bundle = future.getResult();
            authToken = bund开发者_StackOverflow中文版le.getString(AccountManager.KEY_AUTHTOKEN);
            // User will be asked for "App Engine" permission.
            if (authToken == null) {
                // No auth token - will need to ask permission from user.
                Intent intent = new Intent("com.google.ctp.AUTH_PERMISSION");
                intent.putExtra("AccountManagerBundle", bundle);
                context.sendBroadcast(intent);
            }
        } catch (OperationCanceledException e) {
            Log.w(TAG, e.getMessage());
        } catch (AuthenticatorException e) {
            Log.w(TAG, e.getMessage());
        } catch (IOException e) {
            Log.w(TAG, e.getMessage());
        }
        return authToken;
    }

    public class PendingAuthException extends Exception {
        private static final long serialVersionUID = 1L;
        public PendingAuthException(String message) {
            super(message);
        }
    }
}

This is the class I am using for user authentication through app engine client through Chrome to phone example of cloud computing but I don't understand while using this class which BASE_URL, I have to give in this class. Please, tell me which URL to use and what to be done on server side if URL is from server side.

Thanks in advance


The pattern for AppEngine base URLs is either

http://<<appname>>.appspot.com or https://<<appname>>.appspot.com

0

精彩评论

暂无评论...
验证码 换一张
取 消