Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Chiefs
ChiefSend2
Commits
b960f037
Commit
b960f037
authored
Mar 07, 2021
by
Lukas Böhm
🎱
Browse files
continue working on api
parent
c145f829
Pipeline
#59034
failed with stages
in 9 seconds
Changes
7
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
ablauf.txt
0 → 100644
View file @
b960f037
Siehe Postman!!!!!
**********************************************
******* 1. send stuff user selected and get temporary file and share UUID
*********************************************
POST: /api/containers
req: duration=1, password, message, size, download_limit, number of files, captcha, filenames, emails
res:
{
{
"container": {
"UUID": "6e7b2e6e-5c32-43c8-a899-33225ee21f27",
"duration": "1",
"downloadLimit": "20",
"lang": "de_DE",
"source": "ST",
"WSUser": null,
"authorIP": "188.192.241.187",
"swiftVersion": "4",
"createdDate": {
"date": "2021-03-07 20:39:50.667215",
"timezone_type": 3,
"timezone": "Europe/Zurich"
},
"expiredDate": "2021-03-08 20:39:50",
"needPassword": false,
"message": "HALLO NAME",
"numberOfFile": "4"
}
}
uploadHost: ul-gp545fun.swisstransfer.com
{
"filesUUID": [
"92d11732-1fbf-4fef-b83e-aaf73e8e5a54",
"800819b7-357f-48a3-b6c0-1681421fb38c",
"8ac38609-cfcf-4fc1-9645-aa532295c8a6",
"fb4fafd6-0e92-45b2-b396-e0efdc5e72ca"
]
}
}
stat: 201 created
**********************************************
******* (repeat) send files and store them temporarily
*********************************************
OPTIONS xhr: /api/uploadChunk/6e7b2e6e-5c32-43c8-a899-33225ee21f27/800819b7-357f-48a3-b6c0-1681421fb38c/0/1
res: "{\"method\":\"OPTIONS\"}"
stat: 200ok
POST: /api/uploadChunk/6e7b2e6e-5c32-43c8-a899-33225ee21f27/800819b7-357f-48a3-b6c0-1681421fb38c/0/1
stat: 201 created
res: uploadChunksFileDone: 1
**********************************************
******* 3. send upload complete confirmation that locks the upload and moves the stuff from temporary to permanent (starts deletion timer?)
*********************************************
POST: /api/uploadComplete
req:
Content-Disposition: form-data; name="UUID" 6e7b2e6e-5c32-43c8-a899-33225ee21f27
stat: 200 ok
res:
{
"0": {
"linkUUID": "a6407fb3-3b1a-48cf-abb0-edfc043ff683",
"containerUUID": "6e7b2e6e-5c32-43c8-a899-33225ee21f27",
"userEmail": null,
"downloadCounterCredit": 20,
"createdDate": "2021-03-07 20:39:50",
"expiredDate": "2021-03-08 20:39:50",
"isDownloadOnetime": 0,
"isMailSent": 0
}
}
api/api.go
View file @
b960f037
...
...
@@ -19,60 +19,59 @@ import (
/////////////////////////////////
//////////// routes /////////////
/////////////////////////////////
func
allShares
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
db
:=
getDatabase
()
func
AllShares
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
db
:=
GetDatabase
()
var
shares
[]
Share
db
.
Where
(
"is_public = ?"
,
1
)
.
Find
(
&
shares
)
s
endJSON
(
w
,
shares
)
S
endJSON
(
w
,
shares
)
}
func
g
etShare
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
func
G
etShare
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
vars
:=
mux
.
Vars
(
r
)
db
:=
g
etDatabase
()
db
:=
G
etDatabase
()
var
share
Share
db
.
Where
(
"ID = ?"
,
vars
[
"id"
])
.
Find
(
&
share
)
fmt
.
Println
(
share
)
s
endJSON
(
w
,
share
)
S
endJSON
(
w
,
share
)
}
func
addShare
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
db
:=
getDatabase
()
func
OpenShare
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
db
:=
GetDatabase
()
uid
,
_
:=
uuid
.
NewRandom
()
// instead: NewRandomFromReader
reqBody
,
_
:=
ioutil
.
ReadAll
(
r
.
Body
)
var
newShare
Share
json
.
Unmarshal
(
reqBody
,
&
newShare
)
json
.
NewDecoder
(
r
.
Body
)
.
Decode
(
&
newShare
)
db
.
Create
(
newShare
)
sendJSON
(
w
,
nil
)
}
newShare
.
ID
=
uid
b
,
err
:=
json
.
MarshalIndent
(
newShare
,
""
,
" "
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
}
fmt
.
Print
(
string
(
b
))
func
allAttachments
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
vars
:=
mux
.
Vars
(
r
)
db
:=
getDatabase
()
var
att
Attachment
db
.
Where
(
"share_id = ?"
,
vars
[
"id"
])
.
Find
(
&
att
)
sendJSON
(
w
,
att
)
db
.
Create
(
&
newShare
)
SendJSON
(
w
,
newShare
)
return
}
func
getAttachment
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
vars
:=
mux
.
Vars
(
r
)
db
:=
getDatabase
()
var
att
Attachment
db
.
Where
(
"share_id = ?"
,
vars
[
"id"
])
.
Where
(
"id = ?"
,
vars
[
"att"
])
.
Find
(
&
att
)
sendJSON
(
w
,
att
)
}
func
CloseShare
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
db
:=
GetDatabase
()
func
deleteAttachment
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
fmt
.
Println
(
"DELETE attachment????"
)
fmt
.
Println
(
r
.
ParseForm
())
var
share
Share
db
.
Where
(
"id = ?"
,
"asd"
)
.
Find
(
&
share
)
}
func
a
d
dAttachment
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
db
:=
g
etDatabase
()
func
Uplo
adAttachment
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
db
:=
G
etDatabase
()
fmt
.
Fprintf
(
w
,
"Uploading File"
)
r
.
ParseMultipartForm
(
10
<<
20
)
// Maximum 10 MB in RAM
file
,
handler
,
err
:=
r
.
FormFile
(
"files"
)
if
err
!=
nil
{
...
...
@@ -107,34 +106,32 @@ func addAttachment(w http.ResponseWriter, r *http.Request) {
fmt
.
Println
(
"Successfully Uploaded File"
)
}
func
DeleteAttachment
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
fmt
.
Println
(
"DELETE attachment????"
)
}
/////////////////////////////////
////////// functions ////////////
/////////////////////////////////
func
test
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
fmt
.
Println
(
r
.
URL
)
fmt
.
Println
(
"Hallo Welt"
)
sendJSON
(
w
,
nil
)
}
func
configureRoutes
()
{
func
ConfigureRoutes
()
{
router
:=
mux
.
NewRouter
()
.
StrictSlash
(
true
)
router
.
HandleFunc
(
"/"
,
test
)
router
.
HandleFunc
(
"/shares"
,
AllShares
)
.
Methods
(
"GET"
)
router
.
HandleFunc
(
"/share/{id}"
,
GetShare
)
.
Methods
(
"GET"
)
router
.
HandleFunc
(
"/shares"
,
allShares
)
.
Methods
(
"GET"
)
router
.
HandleFunc
(
"/shares"
,
addShare
)
.
Methods
(
"POST"
)
router
.
HandleFunc
(
"/share/{id}"
,
getShare
)
.
Methods
(
"GET"
)
router
.
HandleFunc
(
"/shares"
,
OpenShare
)
.
Methods
(
"PUT"
)
router
.
HandleFunc
(
"/shares"
,
CloseShare
)
.
Methods
(
"POST"
)
router
.
HandleFunc
(
"/share/{id}/attachments"
,
allAttachments
)
.
Methods
(
"GET"
)
router
.
HandleFunc
(
"/share/{id}/attachments"
,
addAttachment
)
.
Methods
(
"POST"
,
"OPTIONS"
)
router
.
HandleFunc
(
"/share/{id}/attachments"
,
deleteAttachment
)
.
Methods
(
"DELETE"
,
"OPTIONS"
)
router
.
HandleFunc
(
"/share/{id}/attachment/{att}"
,
getAttachment
)
.
Methods
(
"GET"
)
router
.
HandleFunc
(
"/share/{id}"
,
UploadAttachment
)
.
Methods
(
"PUT"
,
"POST"
,
"OPTION"
)
router
.
HandleFunc
(
"/share/{id}/attachments"
,
DeleteAttachment
)
.
Methods
(
"DELETE"
,
"OPTIONS"
)
handler
:=
cors
.
Default
()
.
Handler
(
router
)
log
.
Fatal
(
http
.
ListenAndServe
(
":6969"
,
handler
))
}
func
g
etDatabase
()(
db
*
gorm
.
DB
)
{
func
G
etDatabase
()(
db
*
gorm
.
DB
)
{
dsn
:=
os
.
Getenv
(
"DATABASE_URI"
)
db
,
err
:=
gorm
.
Open
(
sqlserver
.
Open
(
dsn
),
&
gorm
.
Config
{})
if
err
!=
nil
{
...
...
@@ -143,11 +140,11 @@ func getDatabase()(db *gorm.DB) {
return
}
func
sendJSON
(
w
http
.
ResponseWriter
,
res
interface
{})
{
w
.
Header
()
.
Set
(
"Access-Control-Allow-Origin"
,
"*"
)
func
SendJSON
(
w
http
.
ResponseWriter
,
res
interface
{})
{
w
.
Header
()
.
Set
(
"Content-Type"
,
"application/json"
)
w
.
Header
()
.
Set
(
"Access-Control-Allow-Origin"
,
"*"
)
w
.
Header
()
.
Set
(
"Access-Control-Allow-Methods"
,
"POST, GET, OPTIONS, PUT, DELETE"
)
w
.
Header
()
.
Set
(
"Access-Control-Allow-Headers"
,
"Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization"
)
//w.Header().Set("Access-Control-Allow-Origin", "*")
//w.Header().Set("Access-Control-Allow-Origin", "*")
//w.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
//w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
json
.
NewEncoder
(
w
)
.
Encode
(
res
)
}
api/api_test.go
0 → 100644
View file @
b960f037
package
main
import
(
"fmt"
"io"
"io/ioutil"
"net/http"
"testing"
"net/http/httptest"
)
func
TestOpenShare
(
t
*
testing
.
T
)
{
// expected response
handler
:=
func
(
w
http
.
ResponseWriter
,
r
*
http
.
Request
)
{
io
.
WriteString
(
w
,
"{
\"
status
\"
:
\"
expected service response
\"
}"
)
}
req
:=
httptest
.
NewRequest
(
"PUT"
,
"http://localhost:6969/shares"
,
nil
)
w
:=
httptest
.
NewRecorder
()
handler
(
w
,
req
)
resp
:=
w
.
Result
()
body
,
_
:=
ioutil
.
ReadAll
(
resp
.
Body
)
fmt
.
Println
(
resp
.
StatusCode
)
fmt
.
Println
(
resp
.
Header
.
Get
(
"Content-Type"
))
fmt
.
Println
(
string
(
body
))
}
\ No newline at end of file
api/database.go
View file @
b960f037
...
...
@@ -7,13 +7,15 @@ import (
)
type
Share
struct
{
ID
uuid
.
UUID
`gorm:"unique; not null
"`
//`gorm:"
type:uuid;default:uuid
_generate_v4
()"`
Name
string
Expires
time
.
Time
DownloadLimit
int
ID
uuid
.
UUID
`gorm:"unique; not null
;
type:uuid;
default:
uuid
.NewRandom
()"`
Name
string
`json:"name"`
Expires
time
.
Time
`json:"expires"`
DownloadLimit
int
`json:"downloadLimit"`
IsPublic
bool
`gorm:"not null; default:false; index"`
Password
string
IsZipped
bool
`gorm:"not null; default:false"`
IsTemporary
bool
`gorm:"not null; default:true"`
IsLocked
bool
`gorm:"not null; default:false"`
Attachments
[]
Attachment
`gorm:"foreignKey:ShareID; constraint:OnDelete:CASCADE"`
}
...
...
api/main.go
View file @
b960f037
...
...
@@ -3,11 +3,11 @@ package main
import
"fmt"
func
main
()
{
db
:=
g
etDatabase
()
db
:=
G
etDatabase
()
// Migrate the schema
db
.
AutoMigrate
(
&
Attachment
{})
db
.
AutoMigrate
(
&
Share
{})
fmt
.
Println
(
"Let's go!!!"
)
c
onfigureRoutes
()
C
onfigureRoutes
()
}
web/src/api/index.js
View file @
b960f037
import
axios
from
"
axios
"
;
const
ax
=
axios
.
create
({
baseURL
:
"
http://localhost:
5000/api
"
,
baseURL
:
"
http://localhost:
6969
"
,
headers
:
{
"
Content-type
"
:
"
application/json
"
,
},
...
...
web/src/components/Upload.vue
View file @
b960f037
...
...
@@ -36,17 +36,28 @@ import vueFilePond from "vue-filepond";
import
"
filepond/dist/filepond.min.css
"
;
const
FilePond
=
vueFilePond
();
import
ax
from
"
@/api
"
;
export
default
{
name
:
"
Upload
"
,
data
:
function
()
{
data
()
{
return
{
myFiles
:
[],
serverUri
:
"
http://localhost:6969/share/3a325c5b-e8b7-48f2-838c-0e2cfd73aad1/attachments
"
serverUri
:
"
http://localhost:6969/share/3a325c5b-e8b7-48f2-838c-0e2cfd73aad1/attachments
"
,
share
:
{
Name
:
"
Test
"
,
DownloadLimit
:
123
}
};
},
methods
:
{
commitShare
:
function
()
{
console
.
log
(
"
uploading share
"
);
ax
.
put
(
"
/shares
"
,
this
.
share
)
.
then
((
response
)
=>
{
this
.
sid
=
response
.
data
;
})
.
catch
((
error
)
=>
console
.
log
(
error
));
}
},
components
:
{
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment