Use Zoho for auth
This commit is contained in:
parent
bc6740ca63
commit
6ed0f49cce
29
doors.py
29
doors.py
|
@ -15,6 +15,9 @@ YELLOW_LED = 7
|
||||||
GREEN_LED = 11
|
GREEN_LED = 11
|
||||||
RED_LED = 13
|
RED_LED = 13
|
||||||
DOOR_STRIKE = 15
|
DOOR_STRIKE = 15
|
||||||
|
ZOHO_CLIENT_ID = "Ask George"
|
||||||
|
ZOHO_CLIENT_SECRET = "Or Check"
|
||||||
|
ZOHO_REFRESH_TOKEN = "The Wiki"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,7 +95,7 @@ def blink_leds():
|
||||||
|
|
||||||
import time
|
import time
|
||||||
import datetime
|
import datetime
|
||||||
from urllib import request
|
from zoho_auth import ZohoToken, authenticate
|
||||||
from slacker import Slacker
|
from slacker import Slacker
|
||||||
#############################################
|
#############################################
|
||||||
# #
|
# #
|
||||||
|
@ -105,19 +108,19 @@ NEED_FLUSH = []
|
||||||
THIS_MONTH = datetime.date.today().month
|
THIS_MONTH = datetime.date.today().month
|
||||||
THIS_DAY = datetime.date.today().day
|
THIS_DAY = datetime.date.today().day
|
||||||
|
|
||||||
def ping_server(key):
|
zoho_token = ZohoToken(ZOHO_CLIENT_ID, ZOHO_CLIENT_SECRET, ZOHO_REFRESH_TOKEN)
|
||||||
ret = False
|
|
||||||
|
|
||||||
print("Pinging server with key: %s (%s/%s)" % (key, SERVER, key))
|
def ping_server(key):
|
||||||
GPIO.output(YELLOW_LED, ON);
|
GPIO.output(YELLOW_LED, ON)
|
||||||
with request.urlopen("%s/%s" % (SERVER, key)) as f:
|
authorized = authenticate(zoho_token, key)
|
||||||
ret = f.read().decode() == "OK"
|
GPIO.output(YELLOW_LED, OFF)
|
||||||
if ret:
|
|
||||||
CACHED_KEYS.add(key)
|
if authorized:
|
||||||
else:
|
CACHED_KEYS.add(key)
|
||||||
CACHED_KEYS.remove(key)
|
elif key in CACHED_KEYS:
|
||||||
GPIO.output(YELLOW_LED, OFF);
|
CACHED_KEYS.remove(key)
|
||||||
return ret
|
|
||||||
|
return authorized
|
||||||
|
|
||||||
def notify_slack(count):
|
def notify_slack(count):
|
||||||
slack = Slacker(SLACK_TOKEN)
|
slack = Slacker(SLACK_TOKEN)
|
||||||
|
|
4
doorsrc
4
doorsrc
|
@ -15,3 +15,7 @@ YELLOW_LED = 7
|
||||||
GREEN_LED = 11
|
GREEN_LED = 11
|
||||||
RED_LED = 13
|
RED_LED = 13
|
||||||
DOOR_STRIKE = 15
|
DOOR_STRIKE = 15
|
||||||
|
|
||||||
|
ZOHO_CLIENT_ID = "Ask George"
|
||||||
|
ZOHO_CLIENT_SECRET = "Ask George"
|
||||||
|
ZOHO_REFRESH_TOKEN = "Ask George"
|
|
@ -2,7 +2,6 @@
|
||||||
import importlib
|
import importlib
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import urllib
|
|
||||||
#######################################################
|
#######################################################
|
||||||
# #
|
# #
|
||||||
# Add simulator/ directory to the module search path. #
|
# Add simulator/ directory to the module search path. #
|
||||||
|
@ -11,7 +10,6 @@ import urllib
|
||||||
sys.path.insert(0, os.path.join(os.getcwd(), "simulator"))
|
sys.path.insert(0, os.path.join(os.getcwd(), "simulator"))
|
||||||
|
|
||||||
|
|
||||||
import fake_urllib
|
|
||||||
import doors
|
import doors
|
||||||
from doors import *
|
from doors import *
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
import datetime
|
||||||
|
import json
|
||||||
|
from urllib import request
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
from urllib.error import HTTPError
|
||||||
|
|
||||||
|
class ZohoToken:
|
||||||
|
def __init__(self, client_id, client_secret, refresh_token):
|
||||||
|
self.client_id = client_id
|
||||||
|
self.client_secret = client_secret
|
||||||
|
self.refresh_token = refresh_token
|
||||||
|
self.access_token = None
|
||||||
|
self.expires_at = None
|
||||||
|
self.update_token()
|
||||||
|
|
||||||
|
def update_token(self):
|
||||||
|
url = "https://accounts.zoho.com/oauth/v2/token?%s" % urlencode({
|
||||||
|
"refresh_token": self.refresh_token,
|
||||||
|
"client_id": self.client_id,
|
||||||
|
"client_secret": self.client_secret,
|
||||||
|
"grant_type": "refresh_token",
|
||||||
|
})
|
||||||
|
req = request.Request(url, method="POST")
|
||||||
|
with request.urlopen(req) as f:
|
||||||
|
data = json.loads(f.read().decode())
|
||||||
|
self.access_token = data["access_token"]
|
||||||
|
self.expires_at = datetime.datetime.now() + datetime.timedelta(seconds=int(data["expires_in"]))
|
||||||
|
|
||||||
|
def get_token(self):
|
||||||
|
if self.access_token is None or self.expires_at <= datetime.datetime.now():
|
||||||
|
self.update_token()
|
||||||
|
return self.access_token
|
||||||
|
|
||||||
|
zoho_token = ZohoToken(ZOHO_CLIENT_ID, ZOHO_CLIENT_SECRET, ZOHO_REFRESH_TOKEN)
|
||||||
|
|
||||||
|
def authenticate(token, key):
|
||||||
|
ret = False
|
||||||
|
|
||||||
|
url = "https://www.zohoapis.com/crm/v2/Contacts/search?%s" % urlencode({
|
||||||
|
"criteria": "(Key_ID:equals:%s)" % key,
|
||||||
|
})
|
||||||
|
req = request.Request(url, method="GET", headers={
|
||||||
|
"Authorization": "Zoho-oauthtoken %s" % token.get_token(),
|
||||||
|
})
|
||||||
|
print("Pinging server with key: %s (%s)" % (key, url))
|
||||||
|
try:
|
||||||
|
with request.urlopen(req) as response:
|
||||||
|
response_body = response.read()
|
||||||
|
if len(response_body) > 0:
|
||||||
|
ret = True
|
||||||
|
except HTTPError as e:
|
||||||
|
print("Error pinging server: %s" % e)
|
||||||
|
|
||||||
|
return ret
|
Loading…
Reference in New Issue