this.state = {
username: '',
password: '',
- redirect: 'portal'
+ redirect: _util.getUrlParam('redirect') || 'portal',
}
}
// check success
if (checkResult.status) {
_user.login(loginInfo).then((res) => {
+ console.dir(res)
_util.setStorage('userInfo', res);
this.props.history.push(this.state.redirect);
}, (errMsg) => {
- console.log(errMsg)
- // _util.errorTips(errMsg);
+ // console.log(errMsg)
+ _util.errorTips(errMsg);
});
}
// check failure
import PGUtil from 'util/util.jsx'
import PGConstant from 'util/constant.jsx'
+// const _const = new PGConstant();
const _util = new PGUtil();
class Record{
import PGUtil from 'util/util.jsx'
import PGConstant from 'util/constant.jsx'
+
const _util = new PGUtil();
class User{
url : url
});
}
+
// getUserList(pageNum){
// # todo
// }
const object = {
base_url:'http://127.0.0.1:8000',
+
+
name:'好123',
+ USER_UNLOGIN_CODE:10,
+
};
export default object;
\ No newline at end of file
-const BASE_URL = '127.0.0.1:8000'
+
+import PGConstant from 'util/constant.jsx'
+// const _const = new PGConstant();
class PGUtil {
request(param) {
return new Promise((resolve, reject) => {
// request success
typeof resolve === 'function' && resolve(res, res.msg);
- // if (0 === res.status) {
- // typeof resolve === 'function' && resolve(res.data, res.msg);
- // }
- // // nologin force to login
- // else if (10 === res.status) {
- // this.doLogin();
- // }
- // else {
- // typeof reject === 'function' && reject(res.msg || res.data);
- // }
+ if (0 === res.status) {
+ typeof resolve === 'function' && resolve(res.data, res.msg);
+ }
+ // nologin force to login
+ else if (PGConstant.USER_UNLOGIN_CODE === res.status) {
+ this.doLogin();
+ }
+ else {
+ typeof reject === 'function' && reject(res.msg || res.data);
+ }
},
error: err => {
typeof reject === 'function' && reject(err.statusText);
});
}
+ // redirect to login
+ doLogin(){
+ window.location.href = '/login?redirect=' + encodeURIComponent(window.location.pathname);
+ }
+
+ getUrlParam(name){
+ // param=123¶m1=456
+ let queryString = window.location.search.split('?')[1] || '',
+ reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"),
+ result = queryString.match(reg);
+ return result ? decodeURIComponent(result[2]) : null;
+ }
+
// success tips
successTips(successMsg) {
alert(successMsg);
from filters import TestRecordListFilter
from models import UserMachine, TestCategory
from pgperffarm.settings import DB_ENUM
-from users.views import UserMachinePermission
+from user_operation.views import UserMachinePermission
from .serializer import MachineHistoryRecordSerializer
from .serializer import TestRecordListSerializer, TestRecordDetailSerializer, LinuxInfoSerializer, MetaInfoSerializer, \
PGInfoSerializer, CreateTestRecordSerializer, CreateTestDateSetSerializer, TestResultSerializer
# jsLoads = json.loads(data[0])
# todo get machine by token
- test_machine = UserMachine.objects.filter(secret)
+ # test_machine = UserMachine.objects.filter(secret)
from django.db import transaction
'metric': dataset['metric'],
'median': dataset['median'],
'test_cate': test_cate.id,
- # status,percentage calc by receiver
+ # status,percentage will calc by receiver
'status': -1,
'percentage': 0.0,
}
--- /dev/null
+from rest_framework import serializers
+
+from users.serializer import AliasSerializer
+from test_records.models import TestRecord
+from users.models import UserMachine, Alias, UserProfile
+import hashlib
+
+class UserMachineManageSerializer(serializers.ModelSerializer):
+ '''
+ use UserMachineSerializer
+ '''
+
+ alias = serializers.SerializerMethodField()
+ reports = serializers.SerializerMethodField()
+ owner = serializers.SerializerMethodField()
+ avatar = serializers.SerializerMethodField()
+ class Meta:
+ model = UserMachine
+ fields = ('alias', 'os_name', 'os_version', 'comp_name', 'comp_version', 'reports', 'owner' , 'avatar', 'state')
+
+ def get_alias(self, obj):
+ target_alias = Alias.objects.filter(id=obj.alias_id).first()
+
+ serializer = AliasSerializer(target_alias)
+ return serializer.data['name']
+
+ def get_reports(self, obj):
+ reports_num = TestRecord.objects.filter(test_machine_id=obj.id).count()
+ return reports_num
+
+ def get_owner(self, obj):
+ target_owner = UserProfile.objects.filter(id=obj.machine_owner_id).values('email').first()
+
+ return target_owner['email']
+
+ def get_avatar(self, obj):
+ target_owner = UserProfile.objects.filter(id=obj.machine_owner_id).values('email').first()
+
+ avatar = 'http://s.gravatar.com/avatar/' + hashlib.md5(target_owner['email']).hexdigest()
+ print avatar
+ return avatar
from __future__ import unicode_literals
from django.shortcuts import render
+from rest_framework import mixins, viewsets, permissions
-# Create your views here.
+from rest_framework import authentication
+from rest_framework_jwt.authentication import JSONWebTokenAuthentication
+
+from models import UserMachine
+from serializer import UserMachineManageSerializer
+
+
+class UserMachineListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
+ """
+ List test records
+ """
+ authentication_classes = (JSONWebTokenAuthentication, authentication.SessionAuthentication )
+ queryset = UserMachine.objects.all().order_by('add_time')
+ serializer_class = UserMachineManageSerializer
+ # pagination_class = StandardResultsSetPagination
+
+class UserMachinePermission(permissions.BasePermission):
+ """
+ Machine permission check
+ """
+
+ def has_permission(self, request, view):
+ secret = request.data.secret
+ ret = UserMachine.objects.filter(machine_secret=secret,is_active=1).exists()
+ return ret
\ No newline at end of file
--- /dev/null
+from serializer import JWTUserProfileSerializer
+
+
+def jwt_response_payload_handler(token, user=None, request=None):
+ return {
+ 'token': token,
+ 'username': JWTUserProfileSerializer(user).data['username'],
+ 'status': 1
+ }
\ No newline at end of file
comp_version = models.CharField(max_length=32, verbose_name="compiler version")
add_time = models.DateTimeField(default=timezone.now, verbose_name="machine added time")
+ STATE_CHOICE = (
+ ('prohibited', -1),
+ ('pending', 0),
+ ('active', 1),
+
+ )
+ state = models.IntegerField(choices=STATE_CHOICE, default=0,verbose_name="state", help_text="machine state")
+
class Meta:
verbose_name = "user machines"
verbose_name_plural = "user machines"
from test_records.models import TestRecord
from users.models import UserMachine, Alias, UserProfile
-from django.db.models import Q
import hashlib
class AliasSerializer(serializers.ModelSerializer):
print avatar
return avatar
+class JWTUserProfileSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = UserProfile
+ fields = ('username', )
\ No newline at end of file
return None
-class UserMachinePermission(permissions.BasePermission):
- """
- Machine permission check
- """
- def has_permission(self, request, view):
- secret = request.data.secret
- ret = UserMachine.objects.filter(machine_secret=secret,is_active=1).exists()
- return ret
'x-requested-with',
'Pragma',
)
-ALLOWED_HOSTS = ['*']
\ No newline at end of file
+ALLOWED_HOSTS = ['*']
+
+JWT_AUTH = {
+ 'JWT_RESPONSE_PAYLOAD_HANDLER':
+ 'users.jwt_handler.jwt_response_payload_handler',
+}
\ No newline at end of file
# 'get': 'list',
# 'post': 'create'
# })
+from user_operation.views import UserMachineListViewSet
+
router = DefaultRouter()
router.register(r'records', TestRecordListViewSet, base_name="records")
router.register(r'detail', TestRecordDetailViewSet, base_name="detail")
router.register(r'machine', MachineHistoryRecordViewSet, base_name="machine")
-# router.register(r'detail', TestRecordListViewSet)
+
+# user's machine manage list
+router.register(r'my-machine', UserMachineListViewSet, base_name="my-machine")
+
urlpatterns = [
# url(r'^admin/', admin.site.urls),