See #75: added a preference do enable/disable the subsonic API on the instance level
This commit is contained in:
parent
632aca5153
commit
7595936260
|
@ -133,6 +133,7 @@ LOCAL_APPS = (
|
||||||
'funkwhale_api.providers.audiofile',
|
'funkwhale_api.providers.audiofile',
|
||||||
'funkwhale_api.providers.youtube',
|
'funkwhale_api.providers.youtube',
|
||||||
'funkwhale_api.providers.acoustid',
|
'funkwhale_api.providers.acoustid',
|
||||||
|
'funkwhale_api.subsonic',
|
||||||
)
|
)
|
||||||
|
|
||||||
# See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps
|
# See: https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
from dynamic_preferences import types
|
||||||
|
from dynamic_preferences.registries import global_preferences_registry
|
||||||
|
|
||||||
|
from funkwhale_api.common import preferences
|
||||||
|
|
||||||
|
subsonic = types.Section('subsonic')
|
||||||
|
|
||||||
|
|
||||||
|
@global_preferences_registry.register
|
||||||
|
class APIAutenticationRequired(types.BooleanPreference):
|
||||||
|
section = subsonic
|
||||||
|
show_in_api = True
|
||||||
|
name = 'enabled'
|
||||||
|
default = True
|
||||||
|
verbose_name = 'Enabled Subsonic API'
|
||||||
|
help_text = (
|
||||||
|
'Funkwhale supports a subset of the Subsonic API, that makes '
|
||||||
|
'it compatible with existing clients such as DSub for Android '
|
||||||
|
'or Clementine for desktop. However, Subsonic protocol is less '
|
||||||
|
'than ideal in terms of security and you can disable this feature '
|
||||||
|
'completely using this flag.'
|
||||||
|
)
|
|
@ -4,11 +4,13 @@ from django.utils import timezone
|
||||||
|
|
||||||
from rest_framework import exceptions
|
from rest_framework import exceptions
|
||||||
from rest_framework import permissions as rest_permissions
|
from rest_framework import permissions as rest_permissions
|
||||||
|
from rest_framework import renderers
|
||||||
from rest_framework import response
|
from rest_framework import response
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
from rest_framework.decorators import list_route
|
from rest_framework.decorators import list_route
|
||||||
from rest_framework.serializers import ValidationError
|
from rest_framework.serializers import ValidationError
|
||||||
|
|
||||||
|
from funkwhale_api.common import preferences
|
||||||
from funkwhale_api.favorites.models import TrackFavorite
|
from funkwhale_api.favorites.models import TrackFavorite
|
||||||
from funkwhale_api.music import models as music_models
|
from funkwhale_api.music import models as music_models
|
||||||
from funkwhale_api.music import utils
|
from funkwhale_api.music import utils
|
||||||
|
@ -61,6 +63,15 @@ class SubsonicViewSet(viewsets.GenericViewSet):
|
||||||
authentication_classes = [authentication.SubsonicAuthentication]
|
authentication_classes = [authentication.SubsonicAuthentication]
|
||||||
permissions_classes = [rest_permissions.IsAuthenticated]
|
permissions_classes = [rest_permissions.IsAuthenticated]
|
||||||
|
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
if not preferences.get('subsonic__enabled'):
|
||||||
|
r = response.Response({}, status=405)
|
||||||
|
r.accepted_renderer = renderers.JSONRenderer()
|
||||||
|
r.accepted_media_type = 'application/json'
|
||||||
|
r.renderer_context = {}
|
||||||
|
return r
|
||||||
|
return super().dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def handle_exception(self, exc):
|
def handle_exception(self, exc):
|
||||||
# subsonic API sends 200 status code with custom error
|
# subsonic API sends 200 status code with custom error
|
||||||
# codes in the payload
|
# codes in the payload
|
||||||
|
|
|
@ -24,6 +24,11 @@ export default {
|
||||||
value: true
|
value: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
subsonic: {
|
||||||
|
enabled: {
|
||||||
|
value: true
|
||||||
|
}
|
||||||
|
},
|
||||||
raven: {
|
raven: {
|
||||||
front_enabled: {
|
front_enabled: {
|
||||||
value: false
|
value: false
|
||||||
|
|
Loading…
Reference in New Issue