179 lines
6.1 KiB
Python
179 lines
6.1 KiB
Python
# Mycroft Server - Backend
|
|
# Copyright (C) 2019 Mycroft AI Inc
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
#
|
|
# This file is part of the Mycroft Server.
|
|
#
|
|
# The Mycroft Server is free software: you can redistribute it and/or
|
|
# modify it under the terms of the GNU Affero General Public License as
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
# License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
"""Entry point for the API that supports the Mycroft Marketplace."""
|
|
from flask import Flask
|
|
|
|
from selene.api import get_base_config, selene_api, SeleneResponse
|
|
from selene.api.endpoints import (
|
|
AccountEndpoint,
|
|
AgreementsEndpoint,
|
|
ValidateEmailEndpoint,
|
|
)
|
|
from selene.util.cache import SeleneCache
|
|
from selene.util.log import configure_selene_logger
|
|
from .endpoints import (
|
|
AccountDefaultsEndpoint,
|
|
CityEndpoint,
|
|
CountryEndpoint,
|
|
EmailAddressChangeEndpoint,
|
|
DeviceEndpoint,
|
|
DeviceCountEndpoint,
|
|
GeographyEndpoint,
|
|
MembershipEndpoint,
|
|
RegionEndpoint,
|
|
PairingCodeEndpoint,
|
|
PasswordChangeEndpoint,
|
|
PreferencesEndpoint,
|
|
SkillsEndpoint,
|
|
SkillOauthEndpoint,
|
|
SkillSettingsEndpoint,
|
|
SoftwareUpdateEndpoint,
|
|
SshKeyValidatorEndpoint,
|
|
TimezoneEndpoint,
|
|
VerifyEmailAddressEndpoint,
|
|
VoiceEndpoint,
|
|
WakeWordEndpoint,
|
|
)
|
|
|
|
configure_selene_logger("account_api")
|
|
|
|
|
|
# Define the Flask application
|
|
acct = Flask(__name__)
|
|
acct.config.from_object(get_base_config())
|
|
acct.response_class = SeleneResponse
|
|
acct.register_blueprint(selene_api)
|
|
acct.config["SELENE_CACHE"] = SeleneCache()
|
|
|
|
account_endpoint = AccountEndpoint.as_view("account_endpoint")
|
|
acct.add_url_rule(
|
|
"/api/account", view_func=account_endpoint, methods=["GET", "PATCH", "DELETE"]
|
|
)
|
|
|
|
agreements_endpoint = AgreementsEndpoint.as_view("agreements_endpoint")
|
|
acct.add_url_rule(
|
|
"/api/agreement/<string:agreement_type>",
|
|
view_func=agreements_endpoint,
|
|
methods=["GET"],
|
|
)
|
|
|
|
city_endpoint = CityEndpoint.as_view("city_endpoint")
|
|
acct.add_url_rule("/api/cities", view_func=city_endpoint, methods=["GET"])
|
|
|
|
country_endpoint = CountryEndpoint.as_view("country_endpoint")
|
|
acct.add_url_rule("/api/countries", view_func=country_endpoint, methods=["GET"])
|
|
|
|
defaults_endpoint = AccountDefaultsEndpoint.as_view("defaults_endpoint")
|
|
acct.add_url_rule(
|
|
"/api/defaults", view_func=defaults_endpoint, methods=["GET", "PATCH", "POST"]
|
|
)
|
|
|
|
device_endpoint = DeviceEndpoint.as_view("device_endpoint")
|
|
acct.add_url_rule(
|
|
"/api/devices",
|
|
defaults={"device_id": None},
|
|
view_func=device_endpoint,
|
|
methods=["GET"],
|
|
)
|
|
acct.add_url_rule("/api/devices", view_func=device_endpoint, methods=["POST"])
|
|
acct.add_url_rule(
|
|
"/api/devices/<string:device_id>",
|
|
view_func=device_endpoint,
|
|
methods=["DELETE", "GET", "PATCH"],
|
|
)
|
|
|
|
device_count_endpoint = DeviceCountEndpoint.as_view("device_count_endpoint")
|
|
acct.add_url_rule("/api/device-count", view_func=device_count_endpoint, methods=["GET"])
|
|
|
|
change_email_endpoint = EmailAddressChangeEndpoint.as_view("change_email_endpoint")
|
|
acct.add_url_rule("/api/change-email", view_func=change_email_endpoint, methods=["PUT"])
|
|
|
|
change_password_endpoint = PasswordChangeEndpoint.as_view("change_password_endpoint")
|
|
acct.add_url_rule(
|
|
"/api/change-password", view_func=change_password_endpoint, methods=["PUT"]
|
|
)
|
|
|
|
geography_endpoint = GeographyEndpoint.as_view("geography_endpoint")
|
|
acct.add_url_rule("/api/geographies", view_func=geography_endpoint, methods=["GET"])
|
|
|
|
membership_endpoint = MembershipEndpoint.as_view("membership_endpoint")
|
|
acct.add_url_rule("/api/memberships", view_func=membership_endpoint, methods=["GET"])
|
|
|
|
pairing_code_endpoint = PairingCodeEndpoint.as_view("pairing_code_endpoint")
|
|
acct.add_url_rule(
|
|
"/api/pairing-code/<string:pairing_code>",
|
|
view_func=pairing_code_endpoint,
|
|
methods=["GET"],
|
|
)
|
|
|
|
preferences_endpoint = PreferencesEndpoint.as_view("preferences_endpoint")
|
|
acct.add_url_rule(
|
|
"/api/preferences", view_func=preferences_endpoint, methods=["GET", "PATCH", "POST"]
|
|
)
|
|
|
|
region_endpoint = RegionEndpoint.as_view("region_endpoint")
|
|
acct.add_url_rule("/api/regions", view_func=region_endpoint, methods=["GET"])
|
|
|
|
setting_endpoint = SkillSettingsEndpoint.as_view("setting_endpoint")
|
|
acct.add_url_rule(
|
|
"/api/skills/<string:skill_family_name>/settings",
|
|
view_func=setting_endpoint,
|
|
methods=["GET", "PUT"],
|
|
)
|
|
|
|
skill_endpoint = SkillsEndpoint.as_view("skill_endpoint")
|
|
acct.add_url_rule("/api/skills", view_func=skill_endpoint, methods=["GET"])
|
|
|
|
skill_oauth_endpoint = SkillOauthEndpoint.as_view("skill_oauth_endpoint")
|
|
acct.add_url_rule(
|
|
"/api/skills/oauth/<int:oauth_id>", view_func=skill_oauth_endpoint, methods=["GET"]
|
|
)
|
|
|
|
software_update_endpoint = SoftwareUpdateEndpoint.as_view("software_update_endpoint")
|
|
acct.add_url_rule(
|
|
"/api/software-update", view_func=software_update_endpoint, methods=["PATCH"]
|
|
)
|
|
|
|
ssh_key_validation_endpoint = SshKeyValidatorEndpoint.as_view(
|
|
"ssh_key_validation_endpoint"
|
|
)
|
|
acct.add_url_rule(
|
|
"/api/ssh-key",
|
|
view_func=ssh_key_validation_endpoint,
|
|
methods=["GET"],
|
|
)
|
|
|
|
timezone_endpoint = TimezoneEndpoint.as_view("timezone_endpoint")
|
|
acct.add_url_rule("/api/timezones", view_func=timezone_endpoint, methods=["GET"])
|
|
|
|
validate_email_endpoint = ValidateEmailEndpoint.as_view("validate_email_endpoint")
|
|
acct.add_url_rule(
|
|
"/api/validate-email", view_func=validate_email_endpoint, methods=["GET"]
|
|
)
|
|
|
|
verify_email_endpoint = VerifyEmailAddressEndpoint.as_view("verify_email_endpoint")
|
|
acct.add_url_rule("/api/verify-email", view_func=verify_email_endpoint, methods=["PUT"])
|
|
|
|
voice_endpoint = VoiceEndpoint.as_view("voice_endpoint")
|
|
acct.add_url_rule("/api/voices", view_func=voice_endpoint, methods=["GET"])
|
|
|
|
wake_word_endpoint = WakeWordEndpoint.as_view("wake_word_endpoint")
|
|
acct.add_url_rule("/api/wake-words", view_func=wake_word_endpoint, methods=["GET"])
|