nice progressbar and correct authentication header
This commit is contained in:
parent
284f78de49
commit
d3bd810a1a
@ -10,6 +10,7 @@ import (
|
|||||||
func addUploadHandler() {
|
func addUploadHandler() {
|
||||||
api.AddHandler("fileupload", api.VideoNode, api.PermUser, func(ctx api.Context) {
|
api.AddHandler("fileupload", api.VideoNode, api.PermUser, func(ctx api.Context) {
|
||||||
fmt.Println("we are in file upload handler")
|
fmt.Println("we are in file upload handler")
|
||||||
|
fmt.Printf("permission: %s\n", ctx.PermID().String())
|
||||||
|
|
||||||
req := ctx.GetRequest()
|
req := ctx.GetRequest()
|
||||||
|
|
||||||
@ -30,6 +31,7 @@ func addUploadHandler() {
|
|||||||
|
|
||||||
var read int64
|
var read int64
|
||||||
var p float32
|
var p float32
|
||||||
|
// todo check where we want to place this file
|
||||||
dst, err := os.OpenFile(part.FileName(), os.O_WRONLY|os.O_CREATE, 0644)
|
dst, err := os.OpenFile(part.FileName(), os.O_WRONLY|os.O_CREATE, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -41,7 +43,6 @@ func addUploadHandler() {
|
|||||||
cBytes, err := part.Read(buffer)
|
cBytes, err := part.Read(buffer)
|
||||||
if cBytes > 0 {
|
if cBytes > 0 {
|
||||||
read = read + int64(cBytes)
|
read = read + int64(cBytes)
|
||||||
//fmt.Printf("read: %v \n",read )
|
|
||||||
p = float32(read) / float32(length) * 100
|
p = float32(read) / float32(length) * 100
|
||||||
fmt.Printf("progress: %v \n", p)
|
fmt.Printf("progress: %v \n", p)
|
||||||
dst.Write(buffer[0:cBytes])
|
dst.Write(buffer[0:cBytes])
|
||||||
@ -53,6 +54,8 @@ func addUploadHandler() {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ = dst.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Text("finished")
|
ctx.Text("finished")
|
||||||
|
@ -15,7 +15,7 @@ const (
|
|||||||
LoginNode = "login"
|
LoginNode = "login"
|
||||||
)
|
)
|
||||||
|
|
||||||
func AddHandler(action string, apiNode string, perm uint8, handler func(ctx Context)) {
|
func AddHandler(action string, apiNode string, perm Perm, handler func(ctx Context)) {
|
||||||
http.Handle(fmt.Sprintf("/api/%s/%s", apiNode, action), http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
|
http.Handle(fmt.Sprintf("/api/%s/%s", apiNode, action), http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
|
||||||
srvPwd := settings.GetPassword()
|
srvPwd := settings.GetPassword()
|
||||||
if srvPwd == nil {
|
if srvPwd == nil {
|
||||||
|
@ -13,12 +13,18 @@ import (
|
|||||||
|
|
||||||
var srv *server.Server
|
var srv *server.Server
|
||||||
|
|
||||||
|
type Perm uint8
|
||||||
|
|
||||||
const (
|
const (
|
||||||
PermAdmin uint8 = iota
|
PermAdmin Perm = iota
|
||||||
PermUser uint8 = iota
|
PermUser
|
||||||
PermUnauthorized uint8 = iota
|
PermUnauthorized
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func (p Perm) String() string {
|
||||||
|
return [...]string{"PermAdmin", "PermUser", "PermUnauthorized"}[p]
|
||||||
|
}
|
||||||
|
|
||||||
const SignKey = "89013f1753a6890c6090b09e3c23ff43"
|
const SignKey = "89013f1753a6890c6090b09e3c23ff43"
|
||||||
const TokenExpireHours = 24
|
const TokenExpireHours = 24
|
||||||
|
|
||||||
@ -27,7 +33,7 @@ type Token struct {
|
|||||||
ExpiresAt int64
|
ExpiresAt int64
|
||||||
}
|
}
|
||||||
|
|
||||||
func TokenValid(token string) (int, uint8) {
|
func TokenValid(token string) (int, Perm) {
|
||||||
t, err := jwt.ParseWithClaims(token, &jwt.StandardClaims{}, func(token *jwt.Token) (interface{}, error) {
|
t, err := jwt.ParseWithClaims(token, &jwt.StandardClaims{}, func(token *jwt.Token) (interface{}, error) {
|
||||||
return []byte(SignKey), nil
|
return []byte(SignKey), nil
|
||||||
})
|
})
|
||||||
@ -42,7 +48,7 @@ func TokenValid(token string) (int, uint8) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return -1, PermUnauthorized
|
return -1, PermUnauthorized
|
||||||
}
|
}
|
||||||
return id, uint8(permid)
|
return id, Perm(permid)
|
||||||
}
|
}
|
||||||
|
|
||||||
func InitOAuth() {
|
func InitOAuth() {
|
||||||
|
@ -13,6 +13,7 @@ type Context interface {
|
|||||||
GetRequest() *http.Request
|
GetRequest() *http.Request
|
||||||
GetWriter() http.ResponseWriter
|
GetWriter() http.ResponseWriter
|
||||||
UserID() int
|
UserID() int
|
||||||
|
PermID() Perm
|
||||||
}
|
}
|
||||||
|
|
||||||
type apicontext struct {
|
type apicontext struct {
|
||||||
@ -20,7 +21,7 @@ type apicontext struct {
|
|||||||
request *http.Request
|
request *http.Request
|
||||||
responseWritten bool
|
responseWritten bool
|
||||||
userid int
|
userid int
|
||||||
permid uint8
|
permid Perm
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *apicontext) GetRequest() *http.Request {
|
func (r *apicontext) GetRequest() *http.Request {
|
||||||
@ -58,3 +59,7 @@ func (r *apicontext) Error(msg string) {
|
|||||||
func (r *apicontext) Errorf(msg string, args ...interface{}) {
|
func (r *apicontext) Errorf(msg string, args ...interface{}) {
|
||||||
r.Error(fmt.Sprintf(msg, &args))
|
r.Error(fmt.Sprintf(msg, &args))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *apicontext) PermID() Perm {
|
||||||
|
return r.permid
|
||||||
|
}
|
||||||
|
@ -2,6 +2,7 @@ import React, {BaseSyntheticEvent, useState} from 'react';
|
|||||||
import style from './MovieSettings.module.css';
|
import style from './MovieSettings.module.css';
|
||||||
import {APINode, callAPI} from '../../utils/Api';
|
import {APINode, callAPI} from '../../utils/Api';
|
||||||
import {GeneralSuccess} from '../../types/GeneralTypes';
|
import {GeneralSuccess} from '../../types/GeneralTypes';
|
||||||
|
import {cookie} from '../../utils/context/Cookie';
|
||||||
|
|
||||||
interface state {
|
interface state {
|
||||||
text: string[];
|
text: string[];
|
||||||
@ -166,6 +167,7 @@ export default MovieSettings;
|
|||||||
|
|
||||||
const FileHandler = (): JSX.Element => {
|
const FileHandler = (): JSX.Element => {
|
||||||
const [file, setfile] = useState<File | null>(null);
|
const [file, setfile] = useState<File | null>(null);
|
||||||
|
const [percent, setpercent] = useState(0.0);
|
||||||
|
|
||||||
const uploadFile = (): void => {
|
const uploadFile = (): void => {
|
||||||
let xhr = new XMLHttpRequest(); // create XMLHttpRequest
|
let xhr = new XMLHttpRequest(); // create XMLHttpRequest
|
||||||
@ -181,11 +183,17 @@ const FileHandler = (): JSX.Element => {
|
|||||||
|
|
||||||
xhr.upload.onprogress = function (e): void {
|
xhr.upload.onprogress = function (e): void {
|
||||||
console.log(e.loaded / e.total);
|
console.log(e.loaded / e.total);
|
||||||
|
setpercent((e.loaded * 100.0) / e.total);
|
||||||
};
|
};
|
||||||
|
|
||||||
xhr.open('post', '/api/video/fileupload'); // open connection
|
xhr.open('post', '/api/video/fileupload'); // open connection
|
||||||
xhr.setRequestHeader('Accept', 'multipart/form-data');
|
xhr.setRequestHeader('Accept', 'multipart/form-data');
|
||||||
|
|
||||||
|
const tkn = cookie.Load();
|
||||||
|
if (tkn) {
|
||||||
|
xhr.setRequestHeader('Token', tkn.Token);
|
||||||
|
}
|
||||||
|
|
||||||
xhr.send(data); // send data
|
xhr.send(data); // send data
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -204,6 +212,9 @@ const FileHandler = (): JSX.Element => {
|
|||||||
name='Select file to upload'
|
name='Select file to upload'
|
||||||
/>
|
/>
|
||||||
<button onClick={(): void => uploadFile()}>upload</button>
|
<button onClick={(): void => uploadFile()}>upload</button>
|
||||||
|
<div style={{width: '100%', height: 5, marginTop: 3}}>
|
||||||
|
<div style={{width: percent + '%', backgroundColor: 'green', height: 5}} />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user