Token auth for non-REST API apps (#889)

* Token authorization for non REST API apps (e.g. git, tf annotation, tf segmentation)
main
Nikita Manovich 6 years ago committed by Boris Sekachev
parent 76c0af2d66
commit a71d4d4327

@ -7,42 +7,34 @@ const core = getCore();
class PluginChecker {
public static async check(plugin: SupportedPlugins): Promise<boolean> {
const serverHost = core.config.backendAPI.slice(0, -7);
const isReachable = async (url: string): Promise<boolean> => {
try {
await core.server.request(url);
return true;
} catch (error) {
if (error.code === 404) {
return false;
}
throw error;
}
};
switch (plugin) {
case SupportedPlugins.GIT_INTEGRATION: {
const response = await fetch(`${serverHost}/git/repository/meta/get`);
if (response.ok) {
return true;
}
return false;
return isReachable(`${serverHost}/git/repository/meta/get`);
}
case SupportedPlugins.AUTO_ANNOTATION: {
const response = await fetch(`${serverHost}/auto_annotation/meta/get`);
if (response.ok) {
return true;
}
return false;
return isReachable(`${serverHost}/auto_annotation/meta/get`);
}
case SupportedPlugins.TF_ANNOTATION: {
const response = await fetch(`${serverHost}/tensorflow/annotation/meta/get`);
if (response.ok) {
return true;
}
return false;
return isReachable(`${serverHost}/tensorflow/annotation/meta/get`);
}
case SupportedPlugins.TF_SEGMENTATION: {
const response = await fetch(`${serverHost}/tensorflow/segmentation/meta/get`);
if (response.ok) {
return true;
}
return false;
return isReachable(`${serverHost}/tensorflow/segmentation/meta/get`);
}
case SupportedPlugins.ANALYTICS: {
const response = await fetch(`${serverHost}/analytics/app/kibana`);
if (response.ok) {
return true;
}
return false;
return isReachable(`${serverHost}/analytics/app/kibana`);
}
default:
return false;

@ -10,6 +10,7 @@ from django.shortcuts import resolve_url, reverse
from django.http import JsonResponse
from django.contrib.auth.views import redirect_to_login
from django.conf import settings
from rest_framework.authentication import TokenAuthentication
def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME,
login_url=None, redirect_methods=['GET']):
@ -19,6 +20,12 @@ def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME,
if request.user.is_authenticated:
return view_func(request, *args, **kwargs)
else:
tokenAuth = TokenAuthentication()
auth = tokenAuth.authenticate(request)
if auth is not None:
request.user = auth[0]
return view_func(request, *args, **kwargs)
if request.method not in redirect_methods:
return JsonResponse({'login_page_url': reverse('login')}, status=403)

Loading…
Cancel
Save