def deauth(req, service): # this is RK-specific deauthData = json.loads(req.body.decode("ASCII")) token = deauthData["access_token"] svc = Service.FromID(service) svcRecord = Service.GetServiceRecordWithAuthDetails(svc, {"Token": token}) Service.DeleteServiceRecord(svcRecord) User.DisconnectService(svcRecord) return HttpResponse(status=200)
def auth_disconnect_do(req, service): svc = Service.FromID(service) svcId = [ x["ID"] for x in req.user["ConnectedServices"] if x["Service"] == svc.ID ] if len(svcId) == 0: return else: svcId = svcId[0] svcRec = Service.GetServiceRecordByID(svcId) Service.DeleteServiceRecord(svcRec) User.DisconnectService(svcRec) return True
def diag_user(req, user): try: userRec = db.users.find_one({"_id": ObjectId(user)}) except: userRec = None if not userRec: searchOpts = [{"Payments.Txn": user}, {"Payments.Email": user}] try: searchOpts.append({"AncestorAccounts": ObjectId(user)}) searchOpts.append({"ConnectedServices.ID": ObjectId(user)}) except: pass # Invalid format for ObjectId userRec = db.users.find_one({"$or": searchOpts}) if not userRec: searchOpts = [{"ExternalID": user}] try: searchOpts.append({"ExternalID": int(user)}) except: pass # Not an int svcRec = db.connections.find_one({"$or": searchOpts}) if svcRec: userRec = db.users.find_one( {"ConnectedServices.ID": svcRec["_id"]}) if userRec: return redirect("diagnostics_user", user=userRec["_id"]) if not userRec: return render(req, "diag/error_user_not_found.html") delta = True # Easier to set this to false in the one no-change case. if "sync" in req.POST: Sync.ScheduleImmediateSync(userRec, req.POST["sync"] == "Full") elif "unlock" in req.POST: db.users.update({"_id": ObjectId(user)}, {"$unset": { "SynchronizationWorker": None }}) elif "lock" in req.POST: db.users.update({"_id": ObjectId(user)}, {"$set": { "SynchronizationWorker": 1 }}) elif "hostrestrict" in req.POST: host = req.POST["host"] if host: db.users.update({"_id": ObjectId(user)}, {"$set": { "SynchronizationHostRestriction": host }}) else: db.users.update( {"_id": ObjectId(user)}, {"$unset": { "SynchronizationHostRestriction": None }}) elif "substitute" in req.POST: req.session["substituteUserid"] = user return redirect("dashboard") elif "svc_setauth" in req.POST and len(req.POST["authdetails"]): db.connections.update( {"_id": ObjectId(req.POST["id"])}, {"$set": { "Authorization": json.loads(req.POST["authdetails"]) }}) elif "svc_unlink" in req.POST: from tapiriik.services import Service from tapiriik.auth import User svcRec = Service.GetServiceRecordByID(req.POST["id"]) try: Service.DeleteServiceRecord(svcRec) except: pass try: User.DisconnectService(svcRec) except: pass elif "svc_marksync" in req.POST: db.connections.update( {"_id": ObjectId(req.POST["id"])}, {"$addToSet": { "SynchronizedActivities": req.POST["uid"] }}, multi=False) elif "svc_clearexc" in req.POST: db.connections.update({"_id": ObjectId(req.POST["id"])}, {"$unset": { "ExcludedActivities": 1 }}) elif "svc_clearacts" in req.POST: db.connections.update({"_id": ObjectId(req.POST["id"])}, {"$unset": { "SynchronizedActivities": 1 }}) Sync.SetNextSyncIsExhaustive(userRec, True) else: delta = False if delta: return redirect("diagnostics_user", user=user) return render(req, "diag/user.html", {"user": userRec})
def diag_user(req, user): try: userRec = db.users.find_one({"_id": ObjectId(user)}) except: userRec = None if not userRec: searchOpts = [{"Payments.Txn": user}, {"Payments.Email": user}] try: searchOpts.append({"AncestorAccounts": ObjectId(user)}) searchOpts.append({"ConnectedServices.ID": ObjectId(user)}) except: pass # Invalid format for ObjectId userRec = db.users.find_one({"$or": searchOpts}) if not userRec: searchOpts = [{"ExternalID": user}] try: searchOpts.append({"ExternalID": int(user)}) except: pass # Not an int svcRec = db.connections.find_one({"$or": searchOpts}) if svcRec: userRec = db.users.find_one( {"ConnectedServices.ID": svcRec["_id"]}) if userRec: return redirect("diagnostics_user", user=userRec["_id"]) if not userRec: return render(req, "diag/error_user_not_found.html") delta = True # Easier to set this to false in the one no-change case. if "sync" in req.POST: Sync.ScheduleImmediateSync(userRec, req.POST["sync"] == "Full") elif "unlock" in req.POST: db.users.update({"_id": ObjectId(user)}, {"$unset": { "SynchronizationWorker": None }}) elif "lock" in req.POST: db.users.update({"_id": ObjectId(user)}, {"$set": { "SynchronizationWorker": 1 }}) elif "requeue" in req.POST: db.users.update({"_id": ObjectId(user)}, {"$unset": { "QueuedAt": None }}) elif "hostrestrict" in req.POST: host = req.POST["host"] if host: db.users.update({"_id": ObjectId(user)}, {"$set": { "SynchronizationHostRestriction": host }}) else: db.users.update( {"_id": ObjectId(user)}, {"$unset": { "SynchronizationHostRestriction": None }}) elif "substitute" in req.POST: req.session["substituteUserid"] = user return redirect("dashboard") elif "svc_setauth" in req.POST and len(req.POST["authdetails"]): db.connections.update( {"_id": ObjectId(req.POST["id"])}, {"$set": { "Authorization": json.loads(req.POST["authdetails"]) }}) elif "svc_setconfig" in req.POST and len(req.POST["config"]): db.connections.update( {"_id": ObjectId(req.POST["id"])}, {"$set": { "Config": json.loads(req.POST["config"]) }}) elif "svc_unlink" in req.POST: from tapiriik.services import Service from tapiriik.auth import User svcRec = Service.GetServiceRecordByID(req.POST["id"]) try: Service.DeleteServiceRecord(svcRec) except: pass try: User.DisconnectService(svcRec) except: pass elif "svc_marksync" in req.POST: db.connections.update( {"_id": ObjectId(req.POST["id"])}, {"$addToSet": { "SynchronizedActivities": req.POST["uid"] }}, multi=False) elif "svc_clearexc" in req.POST: db.connections.update({"_id": ObjectId(req.POST["id"])}, {"$unset": { "ExcludedActivities": 1 }}) elif "svc_clearacts" in req.POST: db.connections.update({"_id": ObjectId(req.POST["id"])}, {"$unset": { "SynchronizedActivities": 1 }}) Sync.SetNextSyncIsExhaustive(userRec, True) elif "svc_toggle_poll_sub" in req.POST: from tapiriik.services import Service svcRec = Service.GetServiceRecordByID(req.POST["id"]) svcRec.SetPartialSyncTriggerSubscriptionState( not svcRec.PartialSyncTriggerSubscribed) elif "svc_toggle_poll_trigger" in req.POST: from tapiriik.services import Service svcRec = Service.GetServiceRecordByID(req.POST["id"]) db.connections.update({"_id": ObjectId(req.POST["id"])}, { "$set": { "TriggerPartialSync": not getattr(svcRec, "TriggerPartialSync", False) } }) elif "svc_tryagain" in req.POST: from tapiriik.services import Service svcRec = Service.GetServiceRecordByID(req.POST["id"]) db.connections.update({"_id": ObjectId(req.POST["id"])}, {"$pull": { "SyncErrors": { "Scope": "activity" } }}) act_recs = db.activity_records.find_one({"UserID": ObjectId(user)}) for act in act_recs["Activities"]: if "FailureCounts" in act and svcRec.Service.ID in act[ "FailureCounts"]: del act["FailureCounts"][svcRec.Service.ID] db.activity_records.save(act_recs) else: delta = False if delta: return redirect("diagnostics_user", user=user) return render(req, "diag/user.html", {"diag_user": userRec})
def diag_user(req, user): userRec = db.users.find_one({"_id": ObjectId(user)}) if not userRec: userRec = db.users.find_one({"AncestorAccounts": ObjectId(user)}) if userRec: return redirect("diagnostics_user", user=userRec["_id"]) if not userRec: return render(req, "diag/error_user_not_found.html") delta = False if "sync" in req.POST: Sync.ScheduleImmediateSync(userRec, req.POST["sync"] == "Full") delta = True elif "unlock" in req.POST: db.users.update({"_id": ObjectId(user)}, {"$unset": { "SynchronizationWorker": None }}) delta = True elif "lock" in req.POST: db.users.update({"_id": ObjectId(user)}, {"$set": { "SynchronizationWorker": 1 }}) delta = True elif "substitute" in req.POST: req.session["substituteUserid"] = user return redirect("dashboard") elif "svc_setauth" in req.POST and len(req.POST["authdetails"]): db.connections.update( {"_id": ObjectId(req.POST["id"])}, {"$set": { "Authorization": json.loads(req.POST["authdetails"]) }}) delta = True elif "svc_unlink" in req.POST: from tapiriik.services import Service from tapiriik.auth import User svcRec = Service.GetServiceRecordByID(req.POST["id"]) try: Service.DeleteServiceRecord(svcRec) except: pass try: User.DisconnectService(svcRec) except: pass delta = True elif "svc_marksync" in req.POST: from tapiriik.services import Service from tapiriik.auth import User db.connections.update( {"_id": ObjectId(req.POST["id"])}, {"$addToSet": { "SynchronizedActivities": req.POST["uid"] }}, multi=False) delta = True elif "svc_clearexc" in req.POST: from tapiriik.services import Service from tapiriik.auth import User db.connections.update({"_id": ObjectId(req.POST["id"])}, {"$unset": { "ExcludedActivities": 1 }}) delta = True elif "svc_clearacts" in req.POST: from tapiriik.services import Service from tapiriik.auth import User db.connections.update({"_id": ObjectId(req.POST["id"])}, {"$unset": { "SynchronizedActivities": 1 }}) Sync.SetNextSyncIsExhaustive(userRec, True) delta = True if delta: return redirect("diagnostics_user", user=user) return render(req, "diag/user.html", {"user": userRec})