Skip to content

Commit

Permalink
added end points
Browse files Browse the repository at this point in the history
  • Loading branch information
unknown authored and unknown committed Aug 6, 2015
1 parent c82046b commit e563a1e
Show file tree
Hide file tree
Showing 13 changed files with 199 additions and 65 deletions.
4 changes: 4 additions & 0 deletions .settings/org.eclipse.core.resources.prefs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
eclipse.preferences.version=1
encoding//controllers/AESCipher.py=utf-8
encoding//controllers/api.py=utf-8
encoding//controllers/server.py=utf-8
encoding//decorators/decorator.py=utf-8
encoding//model/application.py=utf-8
encoding/appengine_config.py=utf-8
encoding/endpoints.py=utf-8
encoding/main.py=utf-8
4 changes: 4 additions & 0 deletions app.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,13 @@ handlers:
static_dir: scripts
- url: /img
static_dir: img
- url: /api/.*
script: endpoints.endpoints
secure: always
- url: /.*
script: main.app
secure: always



libraries:
Expand Down
36 changes: 21 additions & 15 deletions controllers/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@

from decorators import decorator

SCOPES = ["https://www.googleapis.com/auth/admin.directory.user",
SCOPES = [
"https://www.googleapis.com/auth/admin.directory.user.readonly"]

FIELDS = ['nextPageToken',
'users(name,relations,organizations,phones,thumbnailPhotoUrl,primaryEmail,addresses,emails)'
'users(name,relations,organizations,phones,thumbnailPhotoUrl,primaryEmail,addresses,emails,externalIds)'
]
U_FIELDS = ['name',
'relations',
Expand All @@ -53,7 +53,7 @@

class RootPage(webapp2.RequestHandler):
@decorator.custom_login_required
def get(self):
def get(self,param = ""):
# check for user active session
user = users.get_current_user()
if user:
Expand All @@ -71,6 +71,7 @@ def get(self):
'user': user,
'url': url,
'url_linktext': url_linktext,
'param':param,
}
jinja_environment = self.jinja_environment
template = jinja_environment.get_template("/index.html")
Expand All @@ -90,21 +91,21 @@ def jinja_environment(self):

class Search(webapp2.RequestHandler):
all_users = []

@decorator.custom_login_required
def post(self):
jsonstring = self.request.body
jsonobject = json.loads(jsonstring)
self.all_users = []
query = jsonobject.get('query')

keepcharacters = (' ','.','_')
query = "".join(c for c in query if c.isalnum() or c in keepcharacters).rstrip()
# check query has space and then search with word with more number of chars
q_l = query.split(' ')
if len(q_l) > 1:
query = max(q_l)

logging.info(query)
logging.info(q_l)


params = {'domain': 'globalfoundries.com',
'orderBy':'email',
'viewType':'admin_view',
Expand Down Expand Up @@ -133,11 +134,17 @@ def post(self):


def filterResults(self,x,value):
if ( ( bool(re.match(max(value),x.get('name').get('givenName'), re.I)) and bool(re.match(min(value), x.get('name').get('familyName'), re.I)) ) \
'''if ( ( bool(re.match(max(value),x.get('name').get('givenName'), re.I)) and bool(re.match(min(value), x.get('name').get('familyName'), re.I)) ) \
or (bool(re.match( min(value),x.get('name').get('givenName'), re.I)) and bool(re.match(max(value), x.get('name').get('familyName'), re.I)) ) ):
return True
else :
return False
return False'''

if ( ( bool(re.search(r"\b"+max(value),x.get('name').get('givenName'), re.I)) and bool(re.search(r"\b"+min(value), x.get('name').get('familyName'), re.I)) ) \
or (bool(re.search( r"\b"+min(value),x.get('name').get('givenName'), re.I)) and bool(re.search(r"\b"+max(value), x.get('name').get('familyName'), re.I)) ) ):
return True
else :
return False


@decorator.get_oauth_build
Expand Down Expand Up @@ -173,7 +180,7 @@ def post(self,directory_service):
jsonstring = self.request.body
jsonobject = json.loads(jsonstring)
email = jsonobject.get('email')
logging.info (email);

'''region = self.request.get('region')
manager = self.request.get('manager')
fname = self.request.get('fname')
Expand All @@ -191,15 +198,15 @@ def post(self,directory_service):
current_page = directory_service.users().get(**params).execute()
all_users = current_page
#current_page = directory_service.files().list(maxResults=10).execute()
logging.info( current_page)
#logging.info( current_page)

page_token = current_page.get('nextPageToken')
if not page_token:
break
except HTTPError as error:
logging.error( 'An error occurred: %s' % error)
break
logging.info(json.dumps(all_users))

self.response.headers['Content-Type'] = 'application/json'
self.response.headers.add_header("Access-Control-Allow-Origin", "*")
self.response.write(json.dumps(all_users))
Expand All @@ -221,7 +228,6 @@ def post(self,directory_service):
if dest['type'] == 'manager':
manager = dest['value']

logging.info ("email"+email);

# no manager for him - to handle CEOs chart
all_users = []
Expand All @@ -238,7 +244,7 @@ def post(self,directory_service):
current_page = directory_service.users().get(**params).execute()
all_users = current_page
#current_page = directory_service.files().list(maxResults=10).execute()
logging.info( current_page)
#logging.info( current_page)

page_token = current_page.get('nextPageToken')
if not page_token:
Expand Down Expand Up @@ -267,7 +273,7 @@ def post(self,directory_service):
if( 'users' in current_page ):
reportees.extend(current_page['users'])
#current_page = directory_service.files().list(maxResults=10).execute()
logging.info( reportees)
#logging.info( reportees)

page_token = current_page.get('nextPageToken')
if not page_token:
Expand Down
Binary file modified controllers/server.pyc
Binary file not shown.
14 changes: 10 additions & 4 deletions css/main.css
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ body {
/* Required padding for .navbar-fixed-top. Change if height of navigation changes. */
}



.navbar-fixed-top .nav {
padding: 15px 0;
}
Expand Down Expand Up @@ -81,19 +83,23 @@ body {
}


#orgChart .popup {
#orgChart .contextpopup {
position: absolute;
left: 0;
top: 0;
background-color: #fff;
width: 200px;
width: 160px;
height: 30px;
border: 1px #ccc solid;
border-radius: 6px;
box-shadow: #333 2px 2px 4px;
padding: 8px;
font-family: arial, helvetica, sans-serif;
}


#orgChart .contextpopup a {
color: inherit;
}

/* ERROR message */
#Error {
display : none;
Expand Down
52 changes: 47 additions & 5 deletions decorators/decorator.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,18 @@
from oauth2client.client import SignedJwtAssertionCredentials
import httplib2
from apiclient.discovery import build

import logging
from controllers.AESCipher import Cipher
from google.appengine.ext import db
import json
from model.application import Application
import datetime


SCOPES = ["https://www.googleapis.com/auth/admin.directory.user",
"https://www.googleapis.com/auth/admin.directory.user.readonly"]

sub = 'nuthankumar.mallavaram@globalfoundries.com'
sub = 'People.Search_App@globalfoundries.com'
service_account_email = '1025736752504-ublfj5g4am94o31ihnger3c5f6avfd5v@developer.gserviceaccount.com'

def custom_login_required(handler_method):
Expand All @@ -37,6 +42,7 @@ def check_login(self, *args):
#if self.request.method != 'GET':
#raise HTTPError('The check_login decorator can only be used for GET equests')
user = users.get_current_user()

if not user:
self.redirect(users.create_login_url(self.request.uri))
return
Expand All @@ -59,7 +65,7 @@ def get_oauth_build(handler_method):
Returns:
handler method
"""
def get_token(self,*args):
def get_token(*args):
key_file_location = './privatekey.pem'
f = open(key_file_location, 'rb')
key = f.read()
Expand All @@ -69,6 +75,42 @@ def get_token(self,*args):
http = credentials.authorize(httplib2.Http())

directory_service = build('admin', 'directory_v1',http=http)
return handler_method( directory_service=directory_service,*args)
return get_token


def app_auth_required(handler_method):
"""decorator function to get app authentication
parameter lsit::
*args
Returns:
handler method
"""
def check_app(self,*args):

'''for app in Application.query():
logging.info(app)'''



employee = Application(name='Baldy',
key_value='30268571906095969171095037735651',
owner='John Ruby',
registered=datetime.datetime.now())

employee.put()

q = db.Query(Application)
for app in q:
KEY = app.key_value
msg = Cipher.decrypt(self.request.headers['app-identifier'],KEY)
if self.request.path == msg:
return handler_method(self, *args)

handler_method(self, directory_service=directory_service,*args)
return get_token
error_msg = '{"error": "401 Not a Registered APP"}'
self.response.headers['Content-Type'] = 'application/json'
self.response.out.write(json.dumps(error_msg))
return check_app
Binary file modified decorators/decorator.pyc
Binary file not shown.
7 changes: 4 additions & 3 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@

app = webapp2.WSGIApplication([
('/', server.RootPage),
('/search', server.Search),
('/advsearch', server.AdvSearch),
('/search', server.Search),
('/advsearch', server.AdvSearch),
('/getHeirarchy', server.HeirarchyDetails),

('/([^/]+)/?',server.RootPage),

], debug=True)


Expand Down
Binary file modified main.pyc
Binary file not shown.
10 changes: 10 additions & 0 deletions scripts/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,4 +153,14 @@ $(document)
$("#temp").remove();
}


// modified to call quick search function in order to support home page
var query = $("#people_search").val();

if(query.length >= 3)
{
qSearchRequest(query);
} else if(query.length > 0) {
$('#Error').html('<strong>Hmm, We can\'t find what you want !!!</strong> Enter 3 or more characters').show().delay(5000).fadeOut();
}
});
Loading

0 comments on commit e563a1e

Please sign in to comment.