Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

appcfg.py shows You must be logged in as an administrator

When I try to upload a sample csv data to my GAE app through appcfg.py, it shows the below 401 error.

2015-11-04 10:44:41,820 INFO client.py:571 Refreshing due to a 401 (attempt 2/2) 
2015-11-04 10:44:41,821 INFO client.py:797 Refreshing access_token 

Error 401: --- begin server output ---
You must be logged in as an administrator to access this.
--- end server output ---

Here is the command I tried,

appcfg.py upload_data --application=dev~app --url=http://localhost:8080/_ah/remote_api --filename=data/sample.csv
like image 462
Avinash Raj Avatar asked Nov 04 '15 05:11

Avinash Raj


1 Answers

This is how we do it in order to use custom authentication.

Custom handler in app.yaml

- url: /remoteapi.*
  script: remote_api.app

Custom wsgi app in remote_api.py to override CheckIsAdmin

from google.appengine.ext.remote_api import handler
from google.appengine.ext import webapp
import re

MY_SECRET_KEY = 'MAKE UP PASSWORD HERE'  # make one up, use the same one in the shell command
cookie_re = re.compile('^"?([^:]+):.*"?$')


class ApiCallHandler(handler.ApiCallHandler):
    def CheckIsAdmin(self):
        """Determine if admin access should be granted based on the
           auth cookie passed with the request."""
        login_cookie = self.request.cookies.get('dev_appserver_login', '')
        match = cookie_re.search(login_cookie)
        if (match and match.group(1) == MY_SECRET_KEY
            and 'X-appcfg-api-version' in self.request.headers):
            return True
        else:
            self.redirect('/_ah/login')
            return False


app = webapp.WSGIApplication([('.*', ApiCallHandler)])

From here we script the uploading of data that was exported from our live app. Use the same password that you made up in the python script above.

echo "MAKE UP PASSWORD HERE" | appcfg.py upload_data [email protected] --passin --url=http://localhost:8080/remoteapi --num_threads=4 --kind=WebHook --filename=webhook.data --db_filename=bulkloader-progress-webhook.sql3

WebHook and webhook.data are specific to the Kind that we exported from production.

like image 136
Josh J Avatar answered Sep 28 '22 00:09

Josh J