Browse Source

Merge branch 'test'

chenjunkai 6 years ago
parent
commit
bd3442a882

+ 3 - 0
Ansjer/file/alipay/zosi_alipay_private_2048.pem

@@ -0,0 +1,3 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCAtJ/+dopwzLOA6yq4yDiOIWRs1z1vJicOZF/O1xZOs+UN+B5yJvCsyyInEY9kWFRPoZoYjuZ5x8of23zELozZuebt1cbJOikRhMYQ8HiIZfPX+v9Uqve+j7qDcOAzJJwRz26eak8WA6+au6BVTyOKQa35oY3tbOQWN+Nu7zxqMjxrLmy/+af6WuQhhOY+EYjEMqMpc5iDRJzkSjPuWWzvD9PE5/AJiYsUs0lb9z1s2+O15eKp1nwEOJp3rOwfowin8MjR2BbGZ8SuugK3cU49X84sAsNXo0Anv/htV9Pp6QgAPs0b1E3F3NrHJifl/GAd/hpLby0tsoHKY8d7He+3AgMBAAECggEAEPe/IA0As15JS/W07Cd5TUOZub+mmcCt5XfWKa6xgi61Q+IyIVqA4Ebneb8W6GO8ucLUTeiI+gUc4JZPHI4Gg62+hBxq2JySTXzzn8gUG+dU/mRYxRDFGJpaPHnlFNj+ulpeewQI6R4TSJLz0EtepBuElCR4UZTJfSRhF37yuA03aqp2WVTDmvdLxY8ZIZcbovPA34VIs91Bs+s7UmgQKIT5YkMRUG7En5dgGB0Uce0JeoN35P9U+DrplX0YP51qwf7APQxEeKY/ifaDdGf69tm86wz188/HWOVUeBXKNbcPN/CtreLgb0zR8OLji/FKMIIW3JMrAlQEu3H6t3HIAQKBgQDDufBDF2fn+DmpyggNsKbS/L8M4n9Ak7W/5r3L9vh0RQ+fbqGMazURoqQOt6e+rjnPuoTB42Yk9XEUzZcXF65klq+kY+PVNKOuvVXMJpO+kb71aP6heJ5CQ0KHUsQ2zMxrxl0xdcj8WkBP5mLyz6gdNX8Ypfgq7Rn9YVddYtpPUQKBgQCoVxzyjbEhM5WmhhlUQ+2i/fz0hVmNPC52FN5xhI11VAqT4rS+EBr2LPaWJz0bsVCsaPshePNc/yNwUbWpg4VmdIc9NLHXOyq3mI9uLt4Nzwtm15UrVGuJA2c9CEIBRsrsX89tO1xvOPeHJ0GnX6rV0WByg/uGWyw4Ga3kIG1chwKBgC3t7S6hSHXL7yQjz73+rTcnrmGEqR3rS6QrrnA1lVobdq4QFQLRiZOI2fzGJiv90H0ppMum5CpaGl4qXIFDwl3CapcmBanbf2ma7o5IozT+GJSYPeCAYIrmI6+DwZ2mc3X7B5V6sV5eg2b8hk26YxXvntKW5+SS3R1zgT/d2aLxAoGAMq3XJyaFFuvCt9lTMs0oc5NnXe3vYdemXSI3PZGcTKA6dv8fTsDmfQpYSigR+45MLTuFrzQMgAjHkH7o49mWhZu7Qy/kAlnrqE4jkBZH/3w/gHySifLmVN9Ta0pbJKs9WCAYAFiIoWtTCbtFxq/EbI6WLKOTS4WTMGh6s10Xz20CgYEAmLF68mrO7Noq6w5jy7P2Gb6SvmriUW1jSwcpgq/jC/u83iMg2+++TYmGp01CCxZVPQ+pU8VOuMLoKlm4mn0Im4gxXU6GeGerVb/LO2WkYn7aFMNRV05bgg7nCM5Df1vV6UzYsU4uzM/VC8FFm7/bRTqKv0u3pv+sYGB0YrlZaHs=
+-----END RSA PRIVATE KEY-----

+ 3 - 0
Ansjer/file/alipay/zosi_alipay_public_2048.pem

@@ -0,0 +1,3 @@
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1usde7ybZRkDB0cx2a1QAgoVqwV+3HLOmB/f2lmqvWGhT9Kv2T09yu5+HuckQIr7EXIsyd+8gxv483xXkSdzVgm4UKD5QrVSaSs0s0iKOUAc2QOWF/rmzZ8/hDLHteNcYzyOYkr7ws7woCw0aN76oABzpBuch070mvTS7XNvV64YHtBeDo0iAGRaLu7OuHOOUJwQqFGzgaTtZz+TGXNk6ZonfYTcWbTw5Pc4kG9PjweBPpcsJXoCB0Ul9t/V66grhjnJ1TcYqzO0wY1Lr6J3p/0PtKVaG4Ijf6iGfmkOPBMy3lV9NPf/t20nuGLeBPkMMlGTytXVH5DkSB/6INytcQIDAQAB
+-----END PUBLIC KEY-----

+ 0 - 71
Ansjer/file/apns-dev.pem

@@ -1,71 +0,0 @@
-Bag Attributes
-    friendlyName: Apple Development IOS Push Services: com.ansjer.zsavcloud
-    localKeyID: EE FA 88 7C 98 58 FD 7D 8C 91 F5 33 67 4F 73 49 BB AA E4 EE 
-subject=/UID=com.ansjer.zsavcloud/CN=Apple Development IOS Push Services: com.ansjer.zsavcloud/OU=772N5HXAR2/C=CN
-issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
------BEGIN CERTIFICATE-----
-MIIFjTCCBHWgAwIBAgIIS9oJMHjnoMgwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
-ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
-aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
-HhcNMTkwMTE0MDcyNzE3WhcNMjAwMTE0MDcyNzE3WjCBjDEkMCIGCgmSJomT8ixk
-AQEMFGNvbS5hbnNqZXIuenNhdmNsb3VkMUIwQAYDVQQDDDlBcHBsZSBEZXZlbG9w
-bWVudCBJT1MgUHVzaCBTZXJ2aWNlczogY29tLmFuc2plci56c2F2Y2xvdWQxEzAR
-BgNVBAsMCjc3Mk41SFhBUjIxCzAJBgNVBAYTAkNOMIIBIjANBgkqhkiG9w0BAQEF
-AAOCAQ8AMIIBCgKCAQEAxVcdPjJE7jqqFezK6Ws/hIgTb3npC62l7QTyOWFoi7pt
-Kz4QQaarV1oy7+vaTY1wi8BdSL5zi9puINXuBU50efj2b7Ev2elMSKFma2v96k8s
-t/fEX7x1bANjUjqZFY9A2rcoYpnTzsbBvw3UT2ljDw7W0KqvoYecmqhvzs2qcaxk
-54uCQOzY/4eKSwnWzDh/UmsQYKTm+PJfOXwV2T1ZiOzkntMkrW/olZpHbkWUY5WF
-LM7teMc+ubTxPLwqs7oe0gVGi2qaVPApnTkPyMys+wxK03o7bUXF2y/ZizO19Ww+
-TXV4zGhhDmYymkSs7VhgqgSbrg+f6vZRQ9y+0HVUKwIDAQABo4IB5TCCAeEwCQYD
-VR0TBAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2R1nFUlSjtzCCAQ8GA1Ud
-IASCAQYwggECMIH/BgkqhkiG92NkBQEwgfEwgcMGCCsGAQUFBwICMIG2DIGzUmVs
-aWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBh
-Y2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMg
-YW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNl
-cnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wKQYIKwYBBQUHAgEWHWh0
-dHA6Ly93d3cuYXBwbGUuY29tL2FwcGxlY2EvMBMGA1UdJQQMMAoGCCsGAQUFBwMC
-ME0GA1UdHwRGMEQwQqBAoD6GPGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2Nl
-cnRpZmljYXRpb25hdXRob3JpdHkvd3dkcmNhLmNybDAdBgNVHQ4EFgQU7vqIfJhY
-/X2MkfUzZ09zSbuq5O4wCwYDVR0PBAQDAgeAMBAGCiqGSIb3Y2QGAwEEAgUAMA0G
-CSqGSIb3DQEBBQUAA4IBAQBhSQLhTOPAIubqCWQo/PE6Ibo8SIp7nJs3scn9SyxZ
-xJCZKWHJIsHQc8mlSshgNweWzMLXwHtOuV2P7Gu+4hVC6viUj35HlWuc42WEMD83
-Q9ztnbhHFEO27By0Ogv5j0MslxwkMZ1lQ5B/jdJ7I/IMa0pzmIZ75gcQC79Yur0Y
-EBrjSJhWESpwnP1165GdnfAMsoDRIICFPjH/RwVtcfoFqcujcmGlkDb/fRYI7sUN
-TQWayJWpTpl2kk6fToRWedwVsO+Wo6jesF93HziyoiMGv/ZsBqU97o5tc9yYb283
-FfyCQCIf/myb9lkxhYkwAEFcJiA1EvEIns1YogRlavsL
------END CERTIFICATE-----
-Bag Attributes
-    friendlyName: testAPN
-    localKeyID: EE FA 88 7C 98 58 FD 7D 8C 91 F5 33 67 4F 73 49 BB AA E4 EE 
-Key Attributes: <No Attributes>
------BEGIN ENCRYPTED PRIVATE KEY-----
-MIIFDjBABgkqhkiG9w0BBQ0wMzAbBgkqhkiG9w0BBQwwDgQIP1sglTmNa+QCAggA
-MBQGCCqGSIb3DQMHBAiHnz0S7++cqgSCBMj6aT2tgl720pDqknYzMRi7vIFXd6FU
-QSy6j2EjiEq9JPFaSzGLMihGtNyMeJ6zDclzEJoP4+PC8tYBd5Ij2dVU0k0EEksv
-gEix8deokPB9npaksC/OP61vz9G40deMJ8URqKB9cpo6+zTpdO7ful0yAB++fLez
-y7qzAnd6T1MgJiMs7yBmQNq33UghOG9KYT+NTMT6hQ1CJ2l4iB6HJhW0X/sjo0qJ
-l9c+ccZqBwjG9DsXTi+Vx+hRDB6xD+E8aD8kwcrOuV5u+geRLQSnBFSc97CWi3aX
-OY+wClWEPwYwrx5g5tTXN3Ee07ydMzLA8CY6BjnsfCECtDNA5B//aGx6+BB1Zbd+
-YFg7xW7FC0VK1uq/gpsGsfRX6y+d1xkNw0UMaPRaxeRiqXuaK7iHHYWz6LHybw1m
-46ypsOEnLK+tHSv1XZgAGgM3zIE8YH1Ls6Hmtbzsnp1gSTzBmwBqx3WaCUi7sqYN
-oSUrQhBDoxXzwwCQ78KHqdme8V6uec9NRtv236y65jt1ycRSNVkZDrwUcqf8PpXG
-U7D0E6OmRLRTd91VTvTJOjLvCwYKhqt5VkF0kicSf2fE35Meejz2WW2KUKDCTyER
-Pd0Xi+u94JxXREdhDH0GVQSbfbJ5ieA5u0G7pYcDX8qOzIunECoxtzM03NVAhuAE
-s3axsDsBSQuSI3zMwxa4JusFdkL318GBeya9aQnojVfyu5oUCADZx69+/dn3Zru0
-0SLFEhYdSNJ+cqlrkNgyQk+dxO927hoZjjye59lWNcVzySdO0Qz7R6HmO+30DbG2
-5PIFdMzhNGfYMGOrIJWTpLM0XtBSCmTpOWfhf2CdpFhz9xLtq1lXOVMlGswUnoG1
-s3WENfQdiMESLmO1a07GYTT+b357TUqNUQzvC+kbbTYtk0GDP14a9obMsRvWhkNx
-+uB04AYcFrnbzjn1d8wRnUmVbOjLFZ1T3FS0XgvHv3MsLRbFegBtHklGYwZJyG0i
-kDn3fixTMDQClRx7r+dh3Vj+bgent4n+h6Rs0XYpbufdqOUGoIKgG9PsgHtJESbc
-ii3TPMAtRGwRuya2G9Yka11k56PLg6oimJUZrh6CmYkRhBzbYnPFZBo03xgmM8lT
-8mkKmPCxCfDTq6ar844z7mv73dMcfshvkcurlsuf5SEIu8iFFD0D1FajP0fWbHQW
-weLz5LZBknMEfx1M0OqYLBIQGCjUlXuuXZ/U+Y0/lE0SV/ctciaM2IbWX7ZMVFzU
-Pd8ebPpKdoyhKw1RZjFTJNuPL6g8NBUcWZvfDIUuHTtuLy6Pz1P+jVPmQAtZicqi
-hu/MWSfjJS28MQyr8IhiHpx5WSGcCQMWZ4i9eHDwt88VYgwphB/15954LCOefHzK
-h2HpR+q6frB3sZ241a6sIFXLFSFeq6HzRxVWPi8UfPkwhXFC/XXhBDX0Om9lllXr
-GTGbFcKmZHM32V3Xznec2yUVSvf8TX3GrEjLXRHAG7U7URxzsnk7cqXURftHmMpZ
-O/xl9EXT4B1hfPGggcxY03hxrnCNbVn/K1CKEfx3zh2dZHYDZtZo0BosWl/RTaCY
-S9bPNneMaJz551uzHcA1vGPWqbQeJvykVP2hO1G/c6YTSCQIpw9YgGrXSL/k3vjI
-LIc=
------END ENCRYPTED PRIVATE KEY-----

+ 67 - 0
Ansjer/file/apns_pem/apns-dev.pem

@@ -0,0 +1,67 @@
+Bag Attributes
+    friendlyName: Apple Push Services: com.ansjer.zccloud
+    localKeyID: 9D A9 1D 37 7D DA 96 D1 8C 2D 3E D1 C0 47 5E 73 1C EF 6A 20 
+subject=/UID=com.ansjer.zccloud/CN=Apple Push Services: com.ansjer.zccloud/OU=772N5HXAR2/O=ZOSI Technology Co. , Ltd/C=CN
+issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
+-----BEGIN CERTIFICATE-----
+MIIGJDCCBQygAwIBAgIIPBvSaz/ByJ0wDQYJKoZIhvcNAQELBQAwgZYxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
+ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
+aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
+HhcNMTkwNDA5MDExNzAwWhcNMjAwNTA4MDExNzAwWjCBnDEiMCAGCgmSJomT8ixk
+AQEMEmNvbS5hbnNqZXIuemNjbG91ZDEwMC4GA1UEAwwnQXBwbGUgUHVzaCBTZXJ2
+aWNlczogY29tLmFuc2plci56Y2Nsb3VkMRMwEQYDVQQLDAo3NzJONUhYQVIyMSIw
+IAYDVQQKDBlaT1NJIFRlY2hub2xvZ3kgQ28uICwgTHRkMQswCQYDVQQGEwJDTjCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAPCdYuZ6mESGlJx9VKZxUgSg
+aRwjYzanIcssyqZukWLG6ZaKkOneCV6O9FwcOXsTXds5wBHt43IhphFTpSLYqmU4
+ZlvV9hC9mliVLyvp1NEg4RpdDyg3dCfxk2uqlT7Gi73krgIrAXPewKuw11yxwJaQ
+oaclPB9PtFACFk84aHaJiqQcbczMSFC6ETzw/ubijwi370GsRhMitTrDesthNwwa
+avyjHI/IPebh8Whrp0UnqMGLk2+G4Ro27tJvcpjNCyjjqJIgXfJHvgLQtk99lvpy
+LlZnw9AkvfLC65ANCWRLFNhNrLt9dsfAvn7Xca3WkMhFD7oCFDC2R4Dux4qZZoUC
+AwEAAaOCAmwwggJoMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUiCcXCam2GGCL
+7Ou69kdZxVJUo7cwggEcBgNVHSAEggETMIIBDzCCAQsGCSqGSIb3Y2QFATCB/TCB
+wwYIKwYBBQUHAgIwgbYMgbNSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5
+IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGlj
+YWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRp
+ZmljYXRlIHBvbGljeSBhbmQgY2VydGlmaWNhdGlvbiBwcmFjdGljZSBzdGF0ZW1l
+bnRzLjA1BggrBgEFBQcCARYpaHR0cDovL3d3dy5hcHBsZS5jb20vY2VydGlmaWNh
+dGVhdXRob3JpdHkwEwYDVR0lBAwwCgYIKwYBBQUHAwIwMAYDVR0fBCkwJzAloCOg
+IYYfaHR0cDovL2NybC5hcHBsZS5jb20vd3dkcmNhLmNybDAdBgNVHQ4EFgQUnakd
+N33altGMLT7RwEdecxzvaiAwDgYDVR0PAQH/BAQDAgeAMBAGCiqGSIb3Y2QGAwEE
+AgUAMBAGCiqGSIb3Y2QGAwIEAgUAMH0GCiqGSIb3Y2QGAwYEbzBtDBJjb20uYW5z
+amVyLnpjY2xvdWQwBQwDYXBwDBdjb20uYW5zamVyLnpjY2xvdWQudm9pcDAGDAR2
+b2lwDB9jb20uYW5zamVyLnpjY2xvdWQuY29tcGxpY2F0aW9uMA4MDGNvbXBsaWNh
+dGlvbjANBgkqhkiG9w0BAQsFAAOCAQEAk+4mP5l3/78GHOv0hmojKBA6kDZOWjT7
+HNoe2uJxtdoiGDFtrZw1QuobiIhnVab1UXOy5Iu5QhmST7odn9ZJuCp+6K9wV7nK
+HcEdYJX/zZtkIodFynAf8Zy6Emar4BJ+g7fb6DBNJ/NN1Hl3/8BhB3QfvMjVj+wy
+d8ayqk48lVzZXwWHRc9yhWheLa2nSbtT2c8aosOGKmbXBH2JpB9XINg5srRKrggw
+rtawrv2q2kDuBRg0rzP52Q76Q4J3ko4fMnh4Wa78V5TJOm2IncOont6W8RzOCK0x
+dv8d9qMJj42CC2D6yBwQ9ClUmgxnno+nynTX+BZfYqA8JdvYrtp/Cg==
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEA8J1i5nqYRIaUnH1UpnFSBKBpHCNjNqchyyzKpm6RYsbploqQ
+6d4JXo70XBw5exNd2znAEe3jciGmEVOlItiqZThmW9X2EL2aWJUvK+nU0SDhGl0P
+KDd0J/GTa6qVPsaLveSuAisBc97Aq7DXXLHAlpChpyU8H0+0UAIWTzhodomKpBxt
+zMxIULoRPPD+5uKPCLfvQaxGEyK1OsN6y2E3DBpq/KMcj8g95uHxaGunRSeowYuT
+b4bhGjbu0m9ymM0LKOOokiBd8ke+AtC2T32W+nIuVmfD0CS98sLrkA0JZEsU2E2s
+u312x8C+ftdxrdaQyEUPugIUMLZHgO7HiplmhQIDAQABAoIBAQC9NRYDZV39bNLJ
+5+g75hp31ugwn0cyP+TcDwHgNEwRH5epsJbZwKcfe0x+bhdpR8ZjUJtPvgA/zGP5
+dgwCRdxgMiSTjMGtUltf0xg/8OVP+gnpIEp99nVZv6aMYJxxu9FBZuTKgaTnx788
+g5gmpQRroZnshOQtPxDsZWfDrfi/VEyjZYZJpOHQUR0NKjFlLVOmKZK7Byjhw+hH
+CyMbfeN2JwN/iqYxZAQQCTFaW1FBxPkMNLPwPGFOMHafMiUv4hj2Km5wpTyFYs7c
+yrpr4IjwVG2rBeRAsQf3lNIuL5jOqu9qh/qBvpkh+ecg1zbWosO6oPwgThhtTqrb
+BAqJ966BAoGBAPiLR+7C6g+HdaNIMysml9wnvRDtTRxM5CaCFxMcbZkiCc+kenyW
+ySxhPO4qRNNXUZHPg6KylyVWuxn52RR9CcSG/XQnN7odOdkc7gTe1fxdESVRwZnZ
+zxHSEdJ/BopcIU9tezWDQCMCyakRMqZHbUL/3q3wrVhoujTGg+HOZFNhAoGBAPfV
+NjBJvCxpQsYEuIJXieBRrnLy/Ab7fzqpYGBwCxLYE0BSeF1PAe60YKXlUxNE6RD+
+VO+V/BcDgs1An3JAYwGup2C3pfSYf7QHnKU3jbRP8uadseVRhs14snC5EmxXxML7
+GyozM7X0QCezNPU3mYBsq+nLi57oeLyWoJQRyUmlAoGAICfs+5AONkohRynNLPUG
+Sr59cJYzFsk/71d/YsKXz2se99Vg34OmrW47MtkXJHy0mffOIRuYAIWzGU5A7qyq
+udl5KzDzvcmQNW3PwaOO7eKgmEJ2mNAcQUL7eU9j6jy3No6ElUzQ3Ha83nnSIr80
+/KkcB0cPNlP+W1ufrnREeKECgYAKHpab2ibo2VN0qnSuPczPcAZjgzBvSI2lY40f
+4vNQzanbkoJ/rN4zVQItQ/PkcYfivb/SGJm2htosb1sTWzWvt+X1uQn5ttBgFX97
+74zFtA4DBKVi67VJZohCugvaiKrsGzy8uGKAJ30HIfYjnSWTbNyIK1uEHZHwgWYF
+JcTGUQKBgQCF0ppZeDT0c4u8mHUIjyfUxF9v/VejNGSQaLbTIUX2CBMMF/AObjwt
+n+nmifWLgFVuI7t+7PLZVEnY9H5jxKwI+uyuPRlTtDxLIz2vH59GY3Ey/aCwHMD4
+eRdenIp0Cg2ZUh+sW/XartIP0lYXEot7WAI/Z//m7wAyVUEucyVD0Q==
+-----END RSA PRIVATE KEY-----

+ 5 - 1
Ansjer/urls.py

@@ -41,8 +41,8 @@ urlpatterns = [
     url(r'^equipment/admin_add', EquipmentManager.admin_addInterface),
     url(r'^equipment/admin_modify', EquipmentManager.admin_modifyInterface),
 
-
     url(r'^equipment/query', EquipmentManager.queryInterface),
+    url(r'^equipment/flow', EquipmentManager.uid_status),
 
     url(r'^OTA/uploads$', OTAEquipment.getUploadFiletoDirView.as_view()),
     url(r'^OTA/download$', OTAEquipment.downloadUpdataFileUrl),
@@ -118,8 +118,12 @@ urlpatterns = [
     url(r'^vodBucket/(?P<operation>.*)$', VodBucket.VodBucketView.as_view()),
     url(r'^UIDBucket/(?P<operation>.*)$', VodBucket.UidBucketView.as_view()),
     url(r'^EquipmentVersion/(?P<operation>.*)$', EquipmentOTA.EquipmentVersionView.as_view()),
+
     url(r'^deviceShare/(?P<operation>.*)$', DeviceShare.DeviceShareView.as_view()),
     url(r'^appVer/views$', AppInfo.AppVersionView.as_view()),
+
+    url(r'^user/init$', UserController.InitInfoView.as_view()),
+
     # 新的设备接口
     path('Test', Test.Test.as_view()),
     # 路由加参数参考

+ 1 - 1
Controller/AccessLog.py

@@ -116,7 +116,7 @@ class AccessLog(View):
         data_list = redisObj.lrange(logKey, 0, -1)
         redisObj.del_data(key=logKey)
         ModelService.add_batch_log(data_list)
-        qs = Access_Log.objects.all().order_by(order)
+        # qs = Access_Log.objects.all().order_by(order)
         if not page or not line:
             return response.json(444, 'page,line')
         check_perm = ModelService.check_perm(userID=userID, permID=20)

+ 7 - 2
Controller/AppColophon.py

@@ -86,16 +86,21 @@ class AppColView(View):
         if own_perm is True:
             page = request_dict.get('page', None)
             line = request_dict.get('line', None)
+            app_type = request_dict.get('app_type', None)
+            if not app_type:
+                omqs = App_Colophon.objects.all().order_by('app_id').values_list(
+                    'app_id__appBundleId', flat=True).distinct()
+            else :
+                omqs = App_Colophon.objects.filter(app_id__app_type=app_type).order_by('app_id').values_list('app_id__appBundleId', flat=True).distinct()
             page = int(page)
             line = int(line)
-            omqs = App_Colophon.objects.order_by('app_id').values_list('app_id__appBundleId', flat=True).distinct()
             if not omqs.exists():
                 return response.json(0, [])
             count = omqs.count()
             omqs = list(omqs[(page - 1) * line:page * line])
             # 查询时候用记得用in,查询是多个
             ev_qs = App_Colophon.objects.filter(app_id__appBundleId__in=list(omqs)).values("id", "lang",
-                     "newApp_version", "content","version_time", "app_id__appBundleId", "app_id__app_type")
+                     "newApp_version", "content","version_time", "app_id__appBundleId", "app_id__appName", "app_id__app_type")
 
             order_list = list(ev_qs)
             datas = {}

+ 4 - 3
Controller/AppInfo.py

@@ -144,9 +144,10 @@ class AppInfo(View):
             return response.json(404)
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
-        if not page or not line:
-            return response.json(444, 'page,line')
-        queryset = App_Info.objects.all()
+        app_type = request_dict.get('app_type', None)
+        if not page or not line or not app_type:
+            return response.json(444, 'page,line,app_type')
+        queryset = App_Info.objects.filter(app_type=app_type)
         if queryset.exists():
             count = queryset.count()
             res = queryset[(page - 1) * line:page * line]

+ 21 - 8
Controller/CloudVod.py

@@ -58,7 +58,8 @@ http://test.dvema.com/cloudVod/getHlsList?uid=xxxx&channel=4&token=test&daytime=
 
 2设备端
 http://test.dvema.com/cloudVod/getSts?uidToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJjaGFubmVsIjoiNCIsInVpZCI6IkZUU0xMOEhNNDM3WjM4V1UxMTFBIn0.wkrwYvIYf5qEukOSTxALSAgSqop-gNBdEvSwScOgYB8
-
+# 支付宝支付
+http://192.168.136.40:8077/cloudVod/aliPayCreateOrder?token=local&channel=2&rank=1&uid=OOBDSU9547NTRSMF111A
 '''
 
 
@@ -131,10 +132,11 @@ class CloudVodView(View):
         print(json.dumps(data))
         print(signature)
         # verify
-        app_private_key_string = open(BASE_DIR + '/Ansjer/file/alipay/alipay_private_2048.pem').read()
-        alipay_public_key_string = open(BASE_DIR + '/Ansjer/file/alipay/alipay_public_2048.pem').read()
+        app_private_key_string = open(BASE_DIR + '/Ansjer/file/alipay/zosi_alipay_private_2048.pem').read()
+        alipay_public_key_string = open(BASE_DIR + '/Ansjer/file/alipay/zosi_alipay_public_2048.pem').read()
         alipay = AliPay(
-            appid="2016092200569234",
+            # appid="2016092200569234",
+            appid="2019041663958142",
             app_notify_url=None,  # the default notify path
             app_private_key_string=app_private_key_string,
             alipay_public_key_string=alipay_public_key_string,
@@ -222,11 +224,14 @@ class CloudVodView(View):
         nowTime = int(time.time())
         # 新增流程
         orderID = CommonService.createOrderID()
-        app_private_key_string = open(BASE_DIR + '/Ansjer/file/alipay/alipay_private_2048.pem').read()
-        alipay_public_key_string = open(BASE_DIR + '/Ansjer/file/alipay/alipay_public_2048.pem').read()
+        # app_private_key_string = open(BASE_DIR + '/Ansjer/file/alipay/alipay_private_2048.pem').read()
+        # alipay_public_key_string = open(BASE_DIR + '/Ansjer/file/alipay/alipay_public_2048.pem').read()
+        app_private_key_string = open(BASE_DIR + '/Ansjer/file/alipay/zosi_alipay_private_2048.pem').read()
+        alipay_public_key_string = open(BASE_DIR + '/Ansjer/file/alipay/zosi_alipay_public_2048.pem').read()
         try:
             alipay = AliPay(
-                appid="2016092200569234",
+                # appid="2016092200569234",
+                appid="2019041663958142",
                 app_notify_url=None,  # the default notify path
                 app_private_key_string=app_private_key_string,
                 alipay_public_key_string=alipay_public_key_string,
@@ -243,6 +248,13 @@ class CloudVodView(View):
                 # return_url="http://192.168.136.40/cloudVod/payOK",
                 # notify_url="http://192.168.136.40/cloudVod/aliPayCallback"
             )
+            # app_pay = alipay.api_alipay_trade_app_pay(
+            #     out_trade_no=orderID,
+            #     total_amount=price,
+            #     subject="oeo",
+            #     return_url="https://test.dvema.com/cloudVod/payOK",
+            #     notify_url="https://test.dvema.com/cloudVod/aliPayCallback"
+            # )
             # order_string = alipay.api_alipay_trade_page_pay(
             #     out_trade_no=orderID,
             #     total_amount=price,
@@ -253,7 +265,8 @@ class CloudVodView(View):
             print(repr(e))
             return response.json(10, repr(e))
         if order_string:
-            redirectUrl = "https://openapi.alipaydev.com/gateway.do?" + order_string
+            # redirectUrl = "https://openapi.alipaydev.com/gateway.do?" + order_string
+            redirectUrl = "https://openapi.alipay.com/gateway.do?" + order_string
             # from django.http import HttpResponseRedirect
             # return HttpResponseRedirect("https://openapi.alipaydev.com/gateway.do?" + order_string)
             Order_Model.objects.create(orderID=orderID, UID=uid, channel=channel, userID_id=userID, desc=content,

+ 115 - 37
Controller/DetectController.py

@@ -11,25 +11,30 @@
 @file: DetectController.py
 @Contact: chanjunkai@163.com
 """
+import json
+import os
+import time
+
+import apns2
+import jpush as jpush
+import oss2
+import requests
 from django.utils.decorators import method_decorator
 from django.views.decorators.csrf import csrf_exempt
 from django.views.generic.base import View
-import time
-import apns2
-from Object.ResponseObject import ResponseObject
-import os
+from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
 from Ansjer.config import BASE_DIR
-from Object.TokenObject import TokenObject
-import jpush as jpush
-from Model.models import Device_User, Device_Info, Equipment_Info, App_Info, UID_App
-from Object.UidTokenObject import UidTokenObject
 from Ansjer.config import SERVER_DOMAIN
-import json
-import requests
+from Model.models import Device_Info, App_Info, UID_App
 from Model.models import Equipment_Info
+from Object.ResponseObject import ResponseObject
+from Object.TokenObject import TokenObject
+from Object.UidTokenObject import UidTokenObject
+from django.http import JsonResponse
+from Service.CommonService import CommonService
 
 
-# http://192.168.136.40:8077/detect/changeStatus?uid=JW3684H8BSHG9TTM111A&token_val=18071adc03536302f34&appBundleId=com.ansjer.zccloud_ab&push_type=2&token=local&status=1
+# http://192.168.136.40:8077/detect/changeStatus?uid=JW3684H8BSHG9TTM111A&token_val=18071adc03536302f34&appBundleId=com.ansjer.zccloud_ab&push_type=2&token=local&status=1&app_type=1
 class DetectControllerView(View):
     @method_decorator(csrf_exempt)
     def dispatch(self, *args, **kwargs):
@@ -53,46 +58,92 @@ class DetectControllerView(View):
         tko = TokenObject(token)
         if tko.code == 0:
             userID = tko.userID
+            # 修改推送设置
             if operation == 'changeStatus':
                 return self.do_change_status(userID, request_dict, response)
+            # 查询推送信息
+            elif operation == 'queryInfo':
+                return self.do_query(request_dict, response, userID)
             else:
                 return response.json(414)
         else:
             return response.json(tko.code)
 
+    def do_query(self, request_dict, response, userID):
+        page = int(request_dict.get('page', None))
+        line = int(request_dict.get('line', None))
+        if not page or not line:
+            return response.json(444, 'page,line')
+        qs = Equipment_Info.objects.filter(userID_id=userID)
+        uid = request_dict.get('uid', None)
+        if uid:
+            qs = qs.filter(devUid=uid)
+        if not qs.exists():
+            return response.json(0, {'datas': [], 'count': 0})
+        qs = qs.values('id', 'devUid', 'devNickName', 'Channel', 'eventType', 'status', 'alarm', 'eventTime',
+                       'receiveTime','is_st')
+        count = qs.count()
+        qr = qs[(page - 1) * line:page * line]
+        # send_json = CommonService.qs_to_dict(res)
+        res = []
+        import oss2
+        auth = oss2.Auth('LTAIyMkGfEdogyL9', '71uIjpsqVOmF7DAITRyRuc259jHOjO')
+        bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
+        for p in qr:
+            if p['is_st'] == '1':
+                p['img'] = bucket.sign_url('GET',
+                                       '{uid}/{channel}/{time}.jpeg'.format(uid=p['devUid'], channel=p['Channel'],
+                                                                            time=p['eventTime']), 300)
+            res.append(p)
+        return response.json(0, {'datas': res, 'count': count})
+
     def do_change_status(self, userID, request_dict, response):
         uid = request_dict.get('uid', None)
         token_val = request_dict.get('token_val', None)
         appBundleId = request_dict.get('appBundleId', None)
+        app_type = request_dict.get('app_type', None)
         push_type = request_dict.get('push_type', None)
         status = request_dict.get('status', None)
         print('status')
         print(status)
         if status == '0':
-            UID_App.objects.filter(appBundleId=appBundleId, userID_id=userID, token_val=token_val, uid=uid).delete()
-            return response.json(0)
+            uid_app_qs = UID_App.objects.filter(appBundleId=appBundleId, userID_id=userID, token_val=token_val,
+                                                uid=uid,app_type=app_type)
+            if uid_app_qs.exists():
+                uid_app_qs.update(status=0)
+                return response.json(0)
+            else:
+                return response.json(173)
         elif status == '1':
             # return response.json(10)
 
             dvqs = Device_Info.objects.filter(userID_id=userID, UID=uid)
-            aiqs = App_Info.objects.filter(appBundleId=appBundleId).values('app_type')
-            print(dvqs)
-            print(aiqs)
-            if dvqs.exists() and aiqs.exists():
+            # aiqs = App_Info.objects.filter(appBundleId=appBundleId).values('app_type')
+            # print(dvqs)
+            # print(aiqs)
+            # if dvqs.exists() and aiqs.exists():
+            if dvqs.exists():
                 now_time = int(time.time())
                 try:
-                    UID_App.objects.create(
-                        uid=uid,
-                        userID_id=userID,
-                        appBundleId=appBundleId,
-                        app_type=aiqs[0]['app_type'],
-                        push_type=push_type,
-                        token_val=token_val,
-                        addTime=now_time,
-                        updTime=now_time)
+                    uid_app_qs = UID_App.objects.filter(appBundleId=appBundleId, userID_id=userID, token_val=token_val,
+                                                        uid=uid)
+                    print(uid_app_qs)
+                    if uid_app_qs.exists():
+                        uid_app_qs.update(status=1)
+                    else:
+                        UID_App.objects.create(
+                            uid=uid,
+                            userID_id=userID,
+                            appBundleId=appBundleId,
+                            app_type=app_type,
+                            push_type=push_type,
+                            token_val=token_val,
+                            status=1,
+                            addTime=now_time,
+                            updTime=now_time)
                 except Exception as e:
                     print(repr(e))
-                    return response.json(10,repr(e))
+                    return response.json(10, repr(e))
                 else:
                     utko = UidTokenObject()
                     utko.generate(data={'uid': uid})
@@ -102,6 +153,9 @@ class DetectControllerView(View):
             else:
                 return response.json(173)
 
+
+# http://192.168.136.40:8077/notify/push?uidToken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOiJUTjdNUEUzMjExVUU3NkFQMTExQSJ9.k501567VdnhFpn_ygzGRDat3Kqlz5CsEA9jAC2dDk_g&obj=12341234&n_time=1234561234
+# http://test.dvema.com/notify/push?uidToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJQMldOR0pSRDJFSEE1RVU5MTExQSJ9.xOCI5lerk8JOs5OcAzunrKCfCrtuPIZ3AnkMmnd-bPY&n_time=1526845794&channel=1&event_type=51&is_st=0
 # 移动侦测接口
 class NotificationView(View):
 
@@ -118,6 +172,13 @@ class NotificationView(View):
     def validation(self, request_dict):
         response = ResponseObject()
         uidToken = request_dict.get('uidToken', None)
+        channel = request_dict.get('channel', None)
+        n_time = request_dict.get('n_time', None)
+        event_type = request_dict.get('event_type', None)
+        is_st = request_dict.get('is_st', None)
+        if not all([uidToken, channel, n_time]):
+            return JsonResponse(status=404,data={})
+            # return response.json(444)
         utko = UidTokenObject(uidToken)
         uid = utko.UID
         uaqs = UID_App.objects.filter(uid=uid). \
@@ -134,13 +195,29 @@ class NotificationView(View):
                 # android jpush
                 elif push_type == 2:
                     self.do_jpush(request_dict, ua, response)
-                n_time = request_dict.get('n_time')
-                self.do_save_equipment_info(ua, n_time)
-            return response.json(0)
+                self.do_save_equipment_info(ua, n_time, channel, event_type,is_st)
+            #############
+            # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
+
+            if is_st == '0':
+                return JsonResponse(status=200, data={'code': 0, 'msg': 'success'})
+            else:
+                auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
+                # Endpoint以杭州为例,其它Region请按实际情况填写。
+                bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
+                obj = '{uid}/{channel}/{filename}.jpeg'.format(uid=uid, channel=channel, filename=n_time)
+                # 设置此签名URL在60秒内有效。
+                url = bucket.sign_url('PUT', obj, 7200)
+                res_data = {'code': 0, 'img_push': url, 'msg': 'success'}
+                return JsonResponse(status=200, data=res_data)
+            ############
         else:
-            return response.json(173)
+            return JsonResponse(status=200, data={
+                'code': 173,
+                'msg': 'data is not exist'})
 
     def do_jpush(self, request_dict, uaql, response):
+        event_type = request_dict.get('event_type', None)
         jpush_config = {
             'com.ansjer.accloud_ab': {
                 'Key': 'f0dc047e5e53fd14199de5b0',
@@ -191,7 +268,7 @@ class NotificationView(View):
         _jpush.set_logging("DEBUG")
         # push.audience = jpush.all_
         push.audience = jpush.registration_id(token_val)
-        push_data = {"alert": "Motion ", "event_time": n_time, "event_type": "51", "msg": "",
+        push_data = {"alert": "Motion ", "event_time": n_time, "event_type": event_type, "msg": "",
                      "received_at": n_time, "sound": "sound.aif", "uid": uid}
         push_msg = json.dumps(push_data)
         # push.notification = jpush.notification(alert="hello jpush api")
@@ -226,7 +303,8 @@ class NotificationView(View):
             'com.ansjer.customizeda_a': 'AAAAb9YP3rk:APA91bF0HzizVWDc6dKzobY9fsaKDK4veqkOZehDXshVXs8pEEvNWjR_YWbhP60wsRYCHCal8fWN5cECVOWNMMzDsfU88Ty2AUl8S5FtZsmeDTkoGntQOswBr8Ln7Fm_LAp1VqTf9CpM',
         }
         serverKey = gcm_config[appBundleId]
-        push_data = {"alert": "Motion ", "event_time": n_time, "event_type": "51", "msg": "",
+        event_type = request_dict.get('event_type', None)
+        push_data = {"alert": "Motion ", "event_time": n_time, "event_type": event_type, "msg": "",
                      "received_at": n_time, "sound": "sound.aif", "uid": uid}
         json_data = {
             "collapse_key": "WhatYouWant",
@@ -266,20 +344,20 @@ class NotificationView(View):
             # assert res.status_code == 200, res.reason
             # assert res.apns_id 
             if res.status_code == 200:
-                # self.do_save_equipment_info(uaql, n_time)
                 return response.json(0)
             else:
                 return response.json(404, res.reason)
         except Exception as e:
             return response.json(10, repr(e))
 
-    def do_save_equipment_info(self, uaql, n_time):
+    def do_save_equipment_info(self, uaql, n_time, channel, event_type,is_st):
         Equipment_Info.objects.create(
             userID_id=uaql['userID_id'],
             eventTime=n_time,
-            eventType=1,
+            eventType=event_type,
             devUid=uaql['uid'],
             devNickName=uaql['userID__NickName'],
-            Channel='0',
+            Channel=channel,
             alarm='0',
+            is_st=int(is_st),
             receiveTime=n_time)

+ 0 - 1
Controller/DeviceShare.py

@@ -56,7 +56,6 @@ class DeviceShareView(View):
                     return self.do_query_user(userID, request_dict, response)
                 elif operation == 'deleteUser':
                     return self.do_delete_user(userID, request_dict, response)
-
                 else:
                     return response.json(414)
             else:

+ 38 - 9
Controller/EquipmentManager.py

@@ -4,7 +4,7 @@ import traceback
 
 import simplejson as json
 from django.utils import timezone
-from Model.models import Device_User,Device_Info, UID_Bucket
+from Model.models import Device_User, Device_Info, UID_Bucket, UID_App
 from django.db.models import Q
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
@@ -296,7 +296,7 @@ def addInterface(request):
     UID = request_dict.get('UID', None)
     NickName = request_dict.get('NickName', None)
     View_Account = request_dict.get('View_Account', None)
-    View_Password = request_dict.get('View_Password', None)
+    View_Password = request_dict.get('View_Password', '')
     Type = request_dict.get('Type', None)
     ChannelIndex = request_dict.get('ChannelIndex', None)
     if all([UID, NickName, View_Account, Type, ChannelIndex]):
@@ -344,6 +344,7 @@ def addInterface(request):
     else:
         return response.json(444, {'param': 'UID,NickName,View_Account,View_Password,Type,ChannelIndex'})
 
+
 # 管理员添加
 def admin_addInterface(request):
     request.encoding = 'utf-8'
@@ -425,6 +426,7 @@ def admin_addInterface(request):
         sqlDict = CommonService.qs_to_dict([userDevice])
         return response.json(0, sqlDict)
 
+
 # 超级管理员修改设备
 def admin_modifyInterface(request):
     response = ResponseObject()
@@ -442,7 +444,7 @@ def admin_modifyInterface(request):
     if not username:
         return response.json(444, 'username')
     id = request_dict.get('id', None)
-    print (deviceContent)
+    print(deviceContent)
     if not deviceContent or not id:
         return response.json(444, 'content,id')
     tko = TokenObject(token)
@@ -459,13 +461,13 @@ def admin_modifyInterface(request):
         return response.json(404)
 
     deviceData = json.loads(deviceContent)
-    print (deviceData['UID'])
+    print(deviceData['UID'])
     dValid = Device_Info.objects.filter(userID_id=userID, UID=deviceData['UID'])
     if dValid.exists():
         dValid_dict = CommonService.qs_to_dict(dValid)
-        print (dValid_dict.get('datas')[0].get('pk'))
-        if dValid_dict.get('datas')[0].get('pk') == id :
-            print ('可以编辑')
+        print(dValid_dict.get('datas')[0].get('pk'))
+        if dValid_dict.get('datas')[0].get('pk') == id:
+            print('可以编辑')
         else:
             return response.json(174)
         # 查询id
@@ -477,7 +479,7 @@ def admin_modifyInterface(request):
 
             # 更改的时间
             update_time = timezone.localtime(timezone.now())
-            Device_Info.objects.filter(userID_id=userID, id=id).update(update_time=update_time,**deviceData)
+            Device_Info.objects.filter(userID_id=userID, id=id).update(update_time=update_time, **deviceData)
         except Exception as e:
             return response.json(177, repr(e))
         else:
@@ -502,6 +504,7 @@ def admin_modifyInterface(request):
             res = CommonService.qs_to_dict(qs)
             return response.json(0, res)
 
+
 # 新删除设备
 def deleteInterface(request):
     '''
@@ -538,7 +541,7 @@ def deleteInterface(request):
             # 主用户删除设备
             dv_qs.delete()
             # 分享获得用户假删除
-            ud_dv_qs = Device_Info.objects.filter(UID=uid, isShare=True,primaryUserID=userID)
+            ud_dv_qs = Device_Info.objects.filter(UID=uid, isShare=True, primaryUserID=userID)
             if ud_dv_qs.exists():
                 ud_dv_qs.update(isExist=0)
     except Exception as e:
@@ -596,3 +599,29 @@ def queryInterface(request):
         return response.json(0, {'data': data, 'count': count})
     else:
         return response.json(tko.code)
+
+
+def uid_status(request):
+    request.encoding = 'utf-8'
+    response = ResponseObject()
+    if request.method == 'POST':
+        request_dict = request.POST
+    elif request.method == 'GET':
+        request_dict = request.GET
+    else:
+        return response.json(444)
+    token = request_dict.get('token', None)
+    uid = request_dict.get('uid', None)
+    tko = TokenObject(token)
+    response.lang = tko.lang
+    if tko.code != 0:
+        return response.json(tko.code)
+    if not uid:
+        qs = UID_App.objects.filter(userID_id=tko.userID).values('uid', 'status')
+    else:
+        qs = UID_App.objects.filter(uid=uid, userID_id=tko.userID).values('uid', 'status')
+    data = {}
+
+    for q in qs:
+        data[q['uid']]= {'push_status': q['status'],'cloudVod':[]}
+    return response.json(0, data)

+ 1 - 0
Controller/EquipmentOTA.py

@@ -196,6 +196,7 @@ class EquipmentVersionView(View):
             url = SERVER_DOMAIN + 'OTA/downloads/' + path + '?time=' + str(time.time())
         elif file_path.find('static/otapack') != -1:
             url = SERVER_DOMAIN + 'OTA/downloadsPack/' + file_path + '?time=' + str(time.time())
+            # url = SERVER_DOMAIN + 'dl/otaPack/' + file_path + '?time=' + str(time.time())
         else:
             return response.json(900, '2')
         res = {

+ 2 - 0
Controller/OTAEquipment.py

@@ -562,3 +562,5 @@ def downloadOTAInterface(request, fullPath, *callback_args, **callback_kwargs):
             return res.json(907)
     else:
         return res.json(444, 'fullPath')
+
+

+ 34 - 9
Controller/Test.py

@@ -12,7 +12,7 @@
 @Contact: chanjunkai@163.com
 """
 from django.views.generic.base import View
-
+import os
 '''
 http://192.168.136.40:8077/Test
 '''
@@ -21,29 +21,54 @@ from Ansjer.config import BASE_DIR
 import json
 from alipay import AliPay
 import time
+import apns2
 
 
 # 测试接口sdk
 class Test(View):
 
     def get(self, request, *args, **kwargs):
-        return self.do_get_putOss_url()
+        request_dict = request.GET
+        return self.do_apns(request_dict)
+        # return self.do_get_putOss_url(request.GET)
         # return self.do_gcm_push(request)
+    def do_apns(self,request_dict):
+        token_val = request_dict.get('token_val',None)
+        pem_path = os.path.join(BASE_DIR,'Ansjer/file/apns_pem/apns-dev.pem')
+        print(pem_path)
+        response = ResponseObject()
+        try:
+            import apns2
+            now_time = int(time.time())
+
+            cli = apns2.APNSClient(mode="prod", client_cert=pem_path)
+            push_data = {"alert": "Motion ", "event_time": now_time, "event_type": '51', "msg": "",
+                         "received_at": now_time, "sound": "sound.aif", "uid": "XFDJUHUIOKJHYTGSFFDR"}
+            alert = apns2.PayloadAlert(body=json.dumps(push_data), title="title!")
+            payload = apns2.Payload(alert=alert)
+
+            n = apns2.Notification(payload=payload, priority=apns2.PRIORITY_LOW)
+            res = cli.push(n=n, device_token=token_val,topic='com.ansjer.zccloud')
+            if res.status_code == 200:
+                return response.json(0)
+            else:
+                return response.json(404, res.reason)
+        except Exception as e:
+            return response.json(10, repr(e))
 
-    def do_get_putOss_url(self):
-        import oss2
 
+    def do_get_putOss_url(self, request_dict):
+        import oss2
+        obj_name = request_dict.get('obj_name','')
         # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
         auth = oss2.Auth('LTAIyMkGfEdogyL9', '71uIjpsqVOmF7DAITRyRuc259jHOjO')
         # Endpoint以杭州为例,其它Region请按实际情况填写。
-        bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'cnvod1')
+        bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
 
         # 设置此签名URL在60秒内有效。
-        url = bucket.sign_url('PUT', 'wupengyangceshi.png', 7200)
+        url = bucket.sign_url('PUT', obj_name, 7200)
         response = ResponseObject()
-        return response.json(0,url)
-
-
+        return response.json(0, url)
 
     def do_gcm_push(self, request):
         import json

+ 56 - 11
Controller/UserController.py

@@ -36,6 +36,8 @@ from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.ModelService import ModelService
 from Service.TemplateService import TemplateService
+from Model.models import UID_App
+from django.views.generic import View
 
 
 # 获取验证码
@@ -282,23 +284,32 @@ class LogoutView(TemplateView):
 
     def post(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
-        token = request.POST.get('token')
-        return self.Logout(request, token)
+        request_dict = request.POST
+        return self.Logout(request_dict)
 
     def get(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
-        token = request.GET.get('token')
-        return self.Logout(request, token)
+        request_dict = request.GET
+        return self.Logout(request_dict)
 
-    def Logout(self, request, token):
+    def Logout(self, request_dict):
         response = ResponseObject()
+        token = request_dict.get('token')
         tko = TokenObject(token)
-        if tko.code != 0:
+        if tko.code == 0:
+            Device_User.objects.filter(userID=tko.userID).update(online=False)
+
+            redisObj = RedisObject(db=3)
+            redisObj.del_data(key=tko.userID)
+            token_val = request_dict.get('token_val', None)
+            userID = tko.userID
+            uid_app = UID_App.objects.filter(userID_id=userID, token_val=token_val, status=1)
+            print(uid_app)
+            if uid_app.exists():
+                uid_app.update(status=3)
+            return response.json(0)
+        else:
             return response.json(tko.code)
-        Device_User.objects.filter(userID=tko.userID).update(online=False)
-        redisObj = RedisObject(db=3)
-        redisObj.del_data(key=tko.userID)
-        return response.json(0)
 
 
 # 修改密码
@@ -1077,7 +1088,8 @@ class v2LoginView(TemplateView):
             return response.json(111)
         userID = users['userID']
         tko = TokenObject()
-        res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': users['username']})
+        res = tko.generate(
+            data={'userID': userID, 'lang': response.lang, 'user': users['username'], 'm_code': '123413243214'})
         if tko.code == 0:
             now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
             user_qs.update(last_login=now_time, language=response.lang)
@@ -1099,3 +1111,36 @@ class v2LoginView(TemplateView):
             return response.json(0, res)
         else:
             return response.json(tko.code)
+
+
+# 用户登录后初始化接口
+class InitInfoView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        return self.validation(request.GET)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        return self.validation(request.POST)
+
+    def validation(self, request_dict):
+        response = ResponseObject()
+        token = request_dict.get('token', None)
+        tko = TokenObject(token)
+        if tko.code == 0:
+            userID = tko.userID
+            self.init_uid_app(request_dict, userID, response)
+            return response.json(0)
+        else:
+            return response.json(tko.code)
+
+    # 初始化设备token
+    def init_uid_app(self, request_dict, userID, response):
+        token_val = request_dict.get('token_val', None)
+        uid_app = UID_App.objects.filter(userID_id=userID, token_val=token_val, status=3)
+        if uid_app.exists():
+            uid_app.update(status=1)
+            return response.json(0)
+        else:
+            return response.json(0)

+ 1 - 1
Controller/UserManger.py

@@ -375,4 +375,4 @@ class setUserValidView(View):
 
 @csrf_exempt
 def success(request):
-    return HttpResponse(status=200)
+    return HttpResponse(status=200)

+ 7 - 2
Model/models.py

@@ -333,6 +333,7 @@ class Equipment_Info(models.Model):
     eventTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'设备报警时间')
     receiveTime = models.CharField(blank=True, default='', max_length=16, verbose_name=u'接收到报警时间')
     userID = models.ForeignKey(Device_User, null=True, blank=True, to_field='userID', on_delete=models.CASCADE)
+    is_st = models.SmallIntegerField(default=0, verbose_name='是否截图')  # 0 否,1 是
 
     def __str__(self):
         return self.id
@@ -443,10 +444,10 @@ class App_Info(models.Model):
     appName = models.CharField(blank=True, max_length=32, verbose_name=u'app名称')
     systemLanguage = models.CharField(blank=True, max_length=32, verbose_name=u'系统语言')
     newAppversion = models.CharField(blank=True, max_length=12, verbose_name=u'系统版本')
-    minAppversion = models.CharField(default='',blank=True, max_length=12, verbose_name=u'最小系统版本')
+    minAppversion = models.CharField(default='', blank=True, max_length=12, verbose_name=u'最小系统版本')
     bundleVersion = models.CharField(blank=True, max_length=12, verbose_name=u'项目版本')
     content = models.TextField(blank=True, default='', verbose_name=u'更新内容')
-    app_type = models.IntegerField(default=0, blank=True, verbose_name=u'app类型') # ios 1,android 2
+    app_type = models.IntegerField(default=0, blank=True, verbose_name=u'app类型')  # ios 1,android 2
     add_time = models.DateTimeField(blank=True, null=True, verbose_name=u'加入时间', auto_now_add=True)
     update_time = models.DateTimeField(blank=True, verbose_name=u'更新时间', auto_now=True)
     downloadLink = models.TextField(blank=True, default='', verbose_name='升级')
@@ -460,6 +461,7 @@ class App_Info(models.Model):
         verbose_name_plural = verbose_name
         ordering = ('id',)
 
+
 class App_Colophon(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     app_id = models.ForeignKey(App_Info, to_field='id', on_delete=models.CASCADE, verbose_name='appid编号')
@@ -477,6 +479,7 @@ class App_Colophon(models.Model):
         verbose_name_plural = verbose_name
         ordering = ('id',)
 
+
 class Order_Model(models.Model):
     orderID = models.CharField(blank=True, max_length=20, primary_key=True, verbose_name=u'订单id')
     # 订单关联用户
@@ -559,6 +562,7 @@ class UID_Bucket(models.Model):
         ordering = ('id',)
 
 
+# 推送uid绑定 app —— token_id
 class UID_App(models.Model):
     id = models.AutoField(primary_key=True, verbose_name=u'自增标记ID')
     userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
@@ -567,6 +571,7 @@ class UID_App(models.Model):
     app_type = models.IntegerField(default=0, verbose_name=u'app类型')
     push_type = models.IntegerField(default=0, verbose_name=u'推送类型')  # 0,apns 1,安卓gcm 2,激光
     token_val = models.CharField(default='', max_length=160, verbose_name=u'设备验证令牌')
+    status = models.SmallIntegerField(default=0, verbose_name='状态[0:关闭,1:开启,2:用户解绑]')
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
 

+ 8 - 1
Object/TokenObject.py

@@ -21,7 +21,7 @@ class TokenObject:
 
     def __init__(self, token=None):
         if token == 'local':
-            token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTQzOTA5MDUwNDEzMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJleHAiOjE1NTQ3MTQ2OTJ9.jMVRK8GtkZsTfypykBKOHL7Kyxf3BCs0_FQpmK6fAis'
+            token = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTQzOTA5MDUwNDEzMTM4MDAxMzgwMDAiLCJsYW5nIjoiZW4iLCJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1NTU5MDQ5MjF9.LG-wlg7ttQOI66QoEFD7CWaO5XwwZNaujceLgiMGxts'
         if token == 'test':
             token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJ1c2VySUQiOiIxNTE1NjQyNjIzMzc5Mzk1MTM4MDAxMzgwMDEiLCJsYW5nIjoiZW4iLCJleHAiOjE1NTI2MTIxOTF9.sO8BtSclN6B-qwqNmYWbICatHYEtyMdoqzZ0hcOSsmg'
         self.token = token
@@ -111,3 +111,10 @@ class TokenObject:
             lang = self.lang
             refreshRes = self.generate(data={'userID': userID, 'lang':lang , 'user': user})
             return refreshRes
+
+# import jwt
+#
+#
+# token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySUQiOiIxNTMzODg0NDE4NTE5MTM4MDAxMzgwMDAiLCJleHAiOjE1NTU1NTEwNjUsInVzZXIiOiIxMTFAcXEuY29tIiwibGFuZyI6ImVuIn0.waPlfIBucSA7rFfnsxOKIVJ_cL6xiP33cAiz1IDoteY'
+# res = jwt.decode(token, 'a+jbgnw%@1%zy^=@dn62%', algorithms='HS256')
+# print(res)

+ 1 - 1
Service/TemplateService.py

@@ -28,7 +28,6 @@ class TemplateService:
             'account/delUser',
             'account/setUserValid',
             'account/unsharedUserEquipment',
-            # 'equipment/queryUserEquipment',
             'equipment/addNewUserEquipment',
             'equipment/delUserEquipment',
             'equipment/modifyUserEquipment',
@@ -61,6 +60,7 @@ class TemplateService:
             'deviceShare/deleteUser',
             'equipment/delete',
             'equipment/add',
+            'equipment/query'
         ]
         return apiList
 

+ 98 - 3
templates/testttt.py

@@ -11,7 +11,103 @@
 @file: testttt.py
 @Contact: chanjunkai@163.com
 """
+# !/usr/bin/python3
+
+# !/usr/bin/python3
+#
+# import uuid
+#
+#
+#
+# udt = uuid.uuid1()
+# print(udt)
+# exit()
+# import oss2
+#
+# # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
+# auth = oss2.Auth('LTAIyMkGfEdogyL9', '71uIjpsqVOmF7DAITRyRuc259jHOjO')
+# # Endpoint以杭州为例,其它Region请按实际情况填写。
+# bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'apg')
+#
+# # 设置此签名URL在60秒内有效。
+# # url = bucket.sign_url('PUT', 'wupengyangceshi.png', 60)
+# url = bucket.sign_url('GET', 'ADD2JGTZG22XBL2S111A/9/1546545891.jpeg', 60)
+# print(url)
+#
+# exit()
+#
+import requests
+
+
+# didir = 'D:/13.56.215.252/git/AnsjerFormal/templates/adf.jpg'
+url = 'http://apg.oss-cn-shenzhen.aliyuncs.com/ADD2JGTZG22XBL2S111A%2F9%2F1546545891.jpeg?Signature=mLm0%2BrKpgRW5KGBmmmuLnCg4nPQ%3D&Expires=1555322681&OSSAccessKeyId=LTAIyMkGfEdogyL9'
+
+r = requests.put(url,data='aadsf;llllllllllllllllllllllllllllllllllllllllllllljk')
+print(r.status_code)
+exit()
+import smtplib
+from email.mime.text import MIMEText
+from email.utils import formataddr
+
+# my_sender = '1758730877@qq.com'  # 发件人邮箱账号
+# my_pass = 'jeridalqsufbdbdc'  # 发件人邮箱密码
+my_sender = 'sara@zositech.com'  # 发件人邮箱账号
+my_pass = 'FMEfRvfUDWNAj145'  # 发件人邮箱密码
+my_user = '1758730877@qq.com'  # 收件人邮箱账号,我这边发送给自己
+
+ret = True
+try:
+    msg = MIMEText('填写邮件内容', 'plain', 'utf-8')
+    msg['From'] = formataddr(["FromRunoob", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
+    msg['To'] = formataddr(["FK", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
+    msg['Subject'] = "菜鸟教程发送邮件测试"  # 邮件的主题,也可以说是标题
+
+    server = smtplib.SMTP_SSL("hwsmtp.qiye.163.com", 994)  # 发件人邮箱中的SMTP服务器,端口是25
+    # server = smtplib.SMTP_SSL("smtp.qq.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
+    server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
+    server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
+    server.quit()  # 关闭连接
+except Exception as e:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
+    print(repr(e))
+    ret = False
+else:
+    print('success')
+
+exit()
+
+import smtplib
+from email.mime.text import MIMEText
+from email.utils import formataddr
+
+my_sender = 'zositech@gmail.com'  # 发件人邮箱账号
+my_pass = 'ZHzxb0805'  # 发件人邮箱密码
+my_user = 'chanjunkai@163.com'  # 收件人邮箱账号,我这边发送给自己
+
+ret = True
+try:
+    msg = MIMEText('填写邮件内容', 'plain', 'utf-8')
+    msg['From'] = formataddr(["FromRunoob", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
+    msg['To'] = formataddr(["FK", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
+    msg['Subject'] = "菜鸟教程发送邮件测试"  # 邮件的主题,也可以说是标题
+
+    server = smtplib.SMTP_SSL("smtp.gmail.com", 465)  # 发件人邮箱中的SMTP服务器,端口是25
+    server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
+    server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
+    server.quit()  # 关闭连接
+except Exception as e:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
+    print(repr(e))
+    ret = False
+else:
+    print('success')
+
+exit()
 # -*- coding: utf-8 -*-
+# import requests
+# url = requests.put('http://apg.oss-cn-shenzhen.aliyuncs.com/xaa?Signature=9nVkM5bE6%2B601E8kVPTlt%2B7zg%2FI%3D&OSSAccessKeyId=LTAIyMkGfEdogyL9&Expires=1554278510',data='asf')
+# print(url.status_code)
+# exit()
+
+
 import oss2
 
 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
@@ -20,10 +116,9 @@ auth = oss2.Auth('LTAIyMkGfEdogyL9', '71uIjpsqVOmF7DAITRyRuc259jHOjO')
 bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'cnvod1')
 
 # 设置此签名URL在60秒内有效。
-url = bucket.sign_url('PUT', 'wupengyangceshi.png', 7200)
+# url = bucket.sign_url('PUT', 'wupengyangceshi.png', 60)
+url = bucket.sign_url('PUT', 'wupengyangceshi.png', 60)
 print(url)
 # import requests
 # r = requests.put(url,data='xadf')
 # print(r.content)
-
-