diff --git a/mopidy/mpd/dispatcher.py b/mopidy/mpd/dispatcher.py index 8a3602d4..5194885f 100644 --- a/mopidy/mpd/dispatcher.py +++ b/mopidy/mpd/dispatcher.py @@ -37,6 +37,7 @@ class MpdDispatcher(object): response = [] filter_chain = [ self._catch_mpd_ack_errors_filter, + # TODO: tokenize filter self._authenticate_filter, self._command_list_filter, self._idle_filter, @@ -88,9 +89,17 @@ class MpdDispatcher(object): return self._call_next_filter(request, response, filter_chain) else: command_name = request.split(' ')[0] + command = protocol.commands.handlers.get(command_name) + if command: + if command.auth_required: + raise exceptions.MpdPermissionError(command=command_name) + else: + return self._call_next_filter( + request, response, filter_chain) + + # TODO: remove command_names_not_requiring_auth = [ - command.name for command in protocol.mpd_commands - if not command.auth_required] + c.name for c in protocol.mpd_commands if not c.auth_required] if command_name in command_names_not_requiring_auth: return self._call_next_filter(request, response, filter_chain) else: diff --git a/mopidy/mpd/protocol/audio_output.py b/mopidy/mpd/protocol/audio_output.py index 802be6c0..981cdd55 100644 --- a/mopidy/mpd/protocol/audio_output.py +++ b/mopidy/mpd/protocol/audio_output.py @@ -1,10 +1,9 @@ from __future__ import unicode_literals -from mopidy.mpd.exceptions import MpdNoExistError -from mopidy.mpd.protocol import handle_request +from mopidy.mpd import exceptions, protocol -@handle_request(r'disableoutput\ "(?P\d+)"$') +@protocol.commands.add('disableoutput', outputid=protocol.UINT) def disableoutput(context, outputid): """ *musicpd.org, audio output section:* @@ -13,13 +12,13 @@ def disableoutput(context, outputid): Turns an output off. """ - if int(outputid) == 0: + if outputid == 0: context.core.playback.set_mute(False) else: - raise MpdNoExistError('No such audio output') + raise exceptions.MpdNoExistError('No such audio output') -@handle_request(r'enableoutput\ "(?P\d+)"$') +@protocol.commands.add('enableoutput', outputid=protocol.UINT) def enableoutput(context, outputid): """ *musicpd.org, audio output section:* @@ -28,13 +27,13 @@ def enableoutput(context, outputid): Turns an output on. """ - if int(outputid) == 0: + if outputid == 0: context.core.playback.set_mute(True) else: - raise MpdNoExistError('No such audio output') + raise exceptions.MpdNoExistError('No such audio output') -@handle_request(r'outputs$') +@protocol.commands.add('outputs') def outputs(context): """ *musicpd.org, audio output section:* diff --git a/mopidy/mpd/protocol/connection.py b/mopidy/mpd/protocol/connection.py index a6f9ffcb..a1a643c3 100644 --- a/mopidy/mpd/protocol/connection.py +++ b/mopidy/mpd/protocol/connection.py @@ -1,11 +1,9 @@ from __future__ import unicode_literals -from mopidy.mpd.protocol import handle_request -from mopidy.mpd.exceptions import ( - MpdPasswordError, MpdPermissionError) +from mopidy.mpd import exceptions, protocol -@handle_request(r'close$', auth_required=False) +@protocol.commands.add('close', auth_required=False) def close(context): """ *musicpd.org, connection section:* @@ -17,7 +15,7 @@ def close(context): context.session.close() -@handle_request(r'kill$') +@protocol.commands.add('kill') def kill(context): """ *musicpd.org, connection section:* @@ -26,10 +24,10 @@ def kill(context): Kills MPD. """ - raise MpdPermissionError(command='kill') + raise exceptions.MpdPermissionError(command='kill') -@handle_request(r'password\ "(?P[^"]+)"$', auth_required=False) +@protocol.commands.add('password', auth_required=False) def password(context, password): """ *musicpd.org, connection section:* @@ -42,10 +40,10 @@ def password(context, password): if password == context.config['mpd']['password']: context.dispatcher.authenticated = True else: - raise MpdPasswordError('incorrect password') + raise exceptions.MpdPasswordError('incorrect password') -@handle_request(r'ping$', auth_required=False) +@protocol.commands.add('ping', auth_required=False) def ping(context): """ *musicpd.org, connection section:*