diff --git a/go.mod b/go.mod index a9edbda..c52c2d4 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.17 require ( fornaxian.tech/config v0.0.0-20211108212237-6133aed90586 fornaxian.tech/log v0.0.0-20211102185326-552e9b1f8640 - fornaxian.tech/pixeldrain_api_client v0.0.0-20211209211007-1632279aa965 + fornaxian.tech/pixeldrain_api_client v0.0.0-20211220185733-94b115cb883d fornaxian.tech/util v0.0.0-20211102152345-9a486dee9787 github.com/julienschmidt/httprouter v1.3.0 github.com/microcosm-cc/bluemonday v1.0.16 @@ -19,7 +19,7 @@ require ( github.com/golang/snappy v0.0.4 // indirect github.com/gorilla/css v1.0.0 // indirect github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect - golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b // indirect - golang.org/x/net v0.0.0-20211209124913-491a49abca63 // indirect + golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 // indirect + golang.org/x/net v0.0.0-20211216030914-fe4d6282115f // indirect gopkg.in/inf.v0 v0.9.1 // indirect ) diff --git a/go.sum b/go.sum index c3e7a53..df8c577 100644 --- a/go.sum +++ b/go.sum @@ -9,6 +9,10 @@ fornaxian.tech/pixeldrain_api_client v0.0.0-20211128195924-7b5d3f7293df h1:eFpcI fornaxian.tech/pixeldrain_api_client v0.0.0-20211128195924-7b5d3f7293df/go.mod h1:uajB2ofEsefUtxjvs4m7SDyPVRlfrI3qzCSWcud47hY= fornaxian.tech/pixeldrain_api_client v0.0.0-20211209211007-1632279aa965 h1:QAzkcEwXfVopwc6Q8UBZoW7YYgP8jwk18mmbrcl2KfE= fornaxian.tech/pixeldrain_api_client v0.0.0-20211209211007-1632279aa965/go.mod h1:uajB2ofEsefUtxjvs4m7SDyPVRlfrI3qzCSWcud47hY= +fornaxian.tech/pixeldrain_api_client v0.0.0-20211220172818-8db5ef7da837 h1:uM2Gu3RnsfXF646AA1SMzO1bj1SxPJr0SIOTXXu5GCE= +fornaxian.tech/pixeldrain_api_client v0.0.0-20211220172818-8db5ef7da837/go.mod h1:uajB2ofEsefUtxjvs4m7SDyPVRlfrI3qzCSWcud47hY= +fornaxian.tech/pixeldrain_api_client v0.0.0-20211220185733-94b115cb883d h1:BWmYoeL3InMJFD9iIMbq170yyJ07WObJBS3soi5VuVE= +fornaxian.tech/pixeldrain_api_client v0.0.0-20211220185733-94b115cb883d/go.mod h1:uajB2ofEsefUtxjvs4m7SDyPVRlfrI3qzCSWcud47hY= fornaxian.tech/util v0.0.0-20211102152345-9a486dee9787 h1:9ujI8Qi6+FTL/YW6xQAS9DmWDMerHBe8foQvVD/G/i0= fornaxian.tech/util v0.0.0-20211102152345-9a486dee9787/go.mod h1:FqVgfghmxTGR3l9Zx4MOMeZ9KHjiEFl3s3C0BSTvBwk= github.com/BurntSushi/toml v0.4.1 h1:GaI7EiDXDRfa8VshkTj7Fym7ha+y8/XxIgD2okUIjLw= @@ -49,6 +53,8 @@ golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871 h1:/pEO3GD/ABYAjuakUS6xSE golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b h1:QAqMVf3pSa6eeTsuklijukjXBlj7Es2QQplab+/RbQ4= golang.org/x/crypto v0.0.0-20211209193657-4570a0811e8b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3 h1:0es+/5331RGQPcXlMfP+WrnIIS6dNnNRe0WB02W0F4M= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -56,6 +62,8 @@ golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9 h1:0qxwC5n+ttVOINCBeRHO0nq9X golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY= golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211216030914-fe4d6282115f h1:hEYJvxw1lSnWIl8X9ofsYMklzaDs90JI2az5YMd4fPM= +golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/res/static/img/jdownloader.png b/res/static/img/jdownloader.png new file mode 100644 index 0000000..61be313 Binary files /dev/null and b/res/static/img/jdownloader.png differ diff --git a/svelte/src/user_home/APIKeys.svelte b/svelte/src/user_home/APIKeys.svelte index f0fad65..7d7fda7 100644 --- a/svelte/src/user_home/APIKeys.svelte +++ b/svelte/src/user_home/APIKeys.svelte @@ -38,9 +38,15 @@ const load_keys = async () => { const create_key = async () => { loading = true try { + let form = new FormData() + form.append("app_name", "Key generated by user") + const resp = await fetch( window.api_endpoint+"/user/session", - { method: "POST" } + { + method: "POST", + body: form, + } ); if(resp.status >= 400) { throw new Error(await resp.text()); @@ -82,6 +88,7 @@ const logout = async (key) => { {/if} +
{#if !loaded}
@@ -134,7 +141,22 @@ const logout = async (key) => { - User-Agent: {row.user_agent} + + App: + {#if row.app_name === "Pixeldrain Website"} + Pixeldrain logo + Website + {:else if row.app_name === "sharex"} + ShareX logo + ShareX + {:else if row.app_name === "jdownloader"} + JDownloader logo + JDownloader + {:else} + {row.app_name} + {/if} + + User-Agent: {row.user_agent} {/each} @@ -157,4 +179,9 @@ const logout = async (key) => { } .toolbar > * { flex: 0 0 auto; } .toolbar_spacer { flex: 1 1 auto; } + +.app_icon { + height: 1.6em; + vertical-align: middle; +} diff --git a/svelte/src/user_home/ConnectApp.svelte b/svelte/src/user_home/ConnectApp.svelte new file mode 100644 index 0000000..cf2f3a3 --- /dev/null +++ b/svelte/src/user_home/ConnectApp.svelte @@ -0,0 +1,199 @@ + + +
+ {#if loading} +
+ +
+ {/if} +
+ {#if app_name === "jdownloader"} +

+ Connect + JDownloader logo + JDownloader to your pixeldrain account +

+

+ To connect JDownloader to pixeldrain you need to generate an API + key and enter it in JDownloader's Account Manager. +
+ Do not show the generated key to anyone, it can + be used to gain access to your pixeldrain account! +

+ + {#if !api_key} +
+ +
+ {:else} +

Key created

+ +
+ + + +
+ {/if} + +

+ Paste the key in JDownloader to authenticate the app. +

+ {:else if app_name === "sharex"} +

+ Connect + ShareX logo + ShareX to your pixeldrain account +

+

+ ShareX is a Screen capture, file sharing and productivity tool. + Pixeldrain is supported as a custom uploader. You can get ShareX + here. +

+

+ Here you can download our custom ShareX uploader which uses + pixeldrain to upload your files. This uploader is configured to + upload files to your personal pixeldrain account. Do not + share the configuration file with anyone, it contains + your account credentials. +

+ + + +

Setting pixeldrain as default uploader

+

+ Download the uploader config and choose 'Open file' +
+
+ Set pixeldrain.com as active uploader. Choose Yes +
+
+

+ {:else} +

Connect an app to your pixeldrain account

+
    +
  • + +
  • +
  • + +
  • +
+ {/if} +
+
+ + diff --git a/svelte/src/user_home/Router.svelte b/svelte/src/user_home/Router.svelte index 2edd53e..1baf1eb 100644 --- a/svelte/src/user_home/Router.svelte +++ b/svelte/src/user_home/Router.svelte @@ -5,6 +5,7 @@ import AccountSettings from "./AccountSettings.svelte"; import APIKeys from "./APIKeys.svelte"; import Transactions from "./Transactions.svelte"; import Subscription from "./Subscription.svelte"; +import ConnectApp from "./ConnectApp.svelte"; let page = "" @@ -74,14 +75,16 @@ onMount(() => {
{#if page === "home"} - + {:else if page === "settings"} - + {:else if page === "api_keys"} - + + {:else if page === "connect_app"} + {:else if page === "transactions"} - + {:else if page === "subscription"} - + {/if}
diff --git a/webcontroller/misc.go b/webcontroller/misc.go index daaa42f..28e819a 100644 --- a/webcontroller/misc.go +++ b/webcontroller/misc.go @@ -17,7 +17,7 @@ func (wc *WebController) serveShareXConfig(w http.ResponseWriter, r *http.Reques w.Header().Add("Content-Disposition", "attachment; filename=pixeldrain.com.sxcu") if templateData.Authenticated { - sess, err := templateData.PixelAPI.PostUserSession() + sess, err := templateData.PixelAPI.PostUserSession("sharex") if err != nil { log.Error("Failed to create user session: %s", err) wc.templates.Get().ExecuteTemplate(w, "500", templateData) diff --git a/webcontroller/user_account.go b/webcontroller/user_account.go index f520b72..84f4d31 100644 --- a/webcontroller/user_account.go +++ b/webcontroller/user_account.go @@ -197,6 +197,7 @@ func (wc *WebController) loginForm(td *TemplateData, r *http.Request) (f Form) { if session, err := td.PixelAPI.PostUserLogin( f.FieldVal("username"), f.FieldVal("password"), + "Pixeldrain Website", ); err != nil { log.Debug("Login failed: %s", err) formAPIError(err, &f) diff --git a/webcontroller/web_controller.go b/webcontroller/web_controller.go index edd3ed2..f757166 100644 --- a/webcontroller/web_controller.go +++ b/webcontroller/web_controller.go @@ -181,6 +181,7 @@ func New( {GET, "user/home" /* */, wc.serveTemplate("user_home", handlerOpts{Auth: true})}, {GET, "user/settings" /* */, wc.serveTemplate("user_home", handlerOpts{Auth: true})}, {GET, "user/api_keys" /* */, wc.serveTemplate("user_home", handlerOpts{Auth: true})}, + {GET, "user/connect_app" /* */, wc.serveTemplate("user_home", handlerOpts{Auth: true})}, {GET, "user/transactions" /* */, wc.serveTemplate("user_home", handlerOpts{Auth: true})}, {GET, "user/subscription" /* */, wc.serveTemplate("user_home", handlerOpts{Auth: true})}, {GET, "user/confirm_email" /* */, wc.serveEmailConfirm},