WebClient: remove remaining inline onclick events

Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
Nicola Murino 2023-11-16 18:55:14 +01:00
parent 37b0c229fc
commit 61e6cc6985
No known key found for this signature in database
GPG key ID: 935D2952DEC4EECF
13 changed files with 402 additions and 249 deletions

46
go.mod
View file

@ -9,15 +9,15 @@ require (
github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5
github.com/alexedwards/argon2id v1.0.0
github.com/amoghe/go-crypt v0.0.0-20220222110647-20eada5f5964
github.com/aws/aws-sdk-go-v2 v1.22.2
github.com/aws/aws-sdk-go-v2/config v1.23.0
github.com/aws/aws-sdk-go-v2/credentials v1.15.2
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.13.5
github.com/aws/aws-sdk-go-v2/service/marketplacemetering v1.18.1
github.com/aws/aws-sdk-go-v2/service/s3 v1.42.1
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.23.1
github.com/aws/aws-sdk-go-v2/service/sts v1.25.1
github.com/aws/aws-sdk-go-v2 v1.23.0
github.com/aws/aws-sdk-go-v2/config v1.25.1
github.com/aws/aws-sdk-go-v2/credentials v1.16.1
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.4
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.13.8
github.com/aws/aws-sdk-go-v2/service/marketplacemetering v1.18.2
github.com/aws/aws-sdk-go-v2/service/s3 v1.42.2
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.23.2
github.com/aws/aws-sdk-go-v2/service/sts v1.25.2
github.com/bmatcuk/doublestar/v4 v4.6.1
github.com/cockroachdb/cockroach-go/v2 v2.3.5
github.com/coreos/go-oidc/v3 v3.7.0
@ -38,7 +38,7 @@ require (
github.com/hashicorp/go-retryablehttp v0.7.5
github.com/jackc/pgx/v5 v5.5.0
github.com/jlaffaye/ftp v0.0.0-20201112195030-9aae4d151126
github.com/klauspost/compress v1.17.2
github.com/klauspost/compress v1.17.3
github.com/lestrrat-go/jwx/v2 v2.0.16
github.com/lithammer/shortuuid/v3 v3.0.7
github.com/mattn/go-sqlite3 v1.14.18
@ -85,18 +85,18 @@ require (
cloud.google.com/go/iam v1.1.5 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 // indirect
github.com/ajg/form v1.5.1 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.6.0 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.2 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.0 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.2 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.2 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.17.1 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1 // indirect
github.com/aws/smithy-go v1.16.0 // indirect
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1 // indirect
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.3 // indirect
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.3 // indirect
github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.3 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.3 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.3 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.3 // indirect
github.com/aws/aws-sdk-go-v2/service/sso v1.17.2 // indirect
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.2 // indirect
github.com/aws/smithy-go v1.17.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/boombuler/barcode v1.0.1 // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
@ -134,7 +134,7 @@ require (
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/miekg/dns v1.1.56 // indirect
github.com/miekg/dns v1.1.57 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/oklog/run v1.1.0 // indirect

92
go.sum
View file

@ -71,48 +71,48 @@ github.com/alexedwards/argon2id v1.0.0 h1:wJzDx66hqWX7siL/SRUmgz3F8YMrd/nfX/xHHc
github.com/alexedwards/argon2id v1.0.0/go.mod h1:tYKkqIjzXvZdzPvADMWOEZ+l6+BD6CtBXMj5fnJppiw=
github.com/amoghe/go-crypt v0.0.0-20220222110647-20eada5f5964 h1:I9YN9WMo3SUh7p/4wKeNvD/IQla3U3SUa61U7ul+xM4=
github.com/amoghe/go-crypt v0.0.0-20220222110647-20eada5f5964/go.mod h1:eFiR01PwTcpbzXtdMces7zxg6utvFM5puiWHpWB8D/k=
github.com/aws/aws-sdk-go-v2 v1.22.2 h1:lV0U8fnhAnPz8YcdmZVV60+tr6CakHzqA6P8T46ExJI=
github.com/aws/aws-sdk-go-v2 v1.22.2/go.mod h1:Kd0OJtkW3Q0M0lUWGszapWjEvrXDzRW+D21JNsroB+c=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0 h1:hHgLiIrTRtddC0AKcJr5s7i/hLgcpTt+q/FKxf1Zayk=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0/go.mod h1:w4I/v3NOWgD+qvs1NPEwhd++1h3XPHFaVxasfY6HlYQ=
github.com/aws/aws-sdk-go-v2/config v1.23.0 h1:kqzEfGGDIrRJpfJckgwuZfFTbU9NB1jZnRcaO9MpOqE=
github.com/aws/aws-sdk-go-v2/config v1.23.0/go.mod h1:p7wbxKXXjS1GGQOss7VXOazVMFF9bjUGq85/4wR/fSw=
github.com/aws/aws-sdk-go-v2/credentials v1.15.2 h1:rKH7khRMxPdD0u3dHecd0Q7NOVw3EUe7AqdkUOkiOGI=
github.com/aws/aws-sdk-go-v2/credentials v1.15.2/go.mod h1:tXM8wmaeAhfC7nZoCxb0FzM/aRaB1m1WQ7x0qlBLq80=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3 h1:G5KawTAkyHH6WyKQCdHiW4h3PmAXNJpOgwKg3H7sDRE=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3/go.mod h1:hugKmSFnZB+HgNI1sYGT14BUPZkO6alC/e0AWu+0IAQ=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.13.5 h1:P/xwilRdRLLg1PzfviDq0Zjb74weOoDCrh8J5lRCQAY=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.13.5/go.mod h1:9cLHf2IwX6Jyw0KjLVbXly/g6DmzExgUzB1w/AQPGQE=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 h1:AaQsr5vvGR7rmeSWBtTCcw16tT9r51mWijuCQhzLnq8=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2/go.mod h1:o1IiRn7CWocIFTXJjGKJDOwxv1ibL53NpcvcqGWyRBA=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 h1:UZx8SXZ0YtzRiALzYAWcjb9Y9hZUR7MBKaBQ5ouOjPs=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2/go.mod h1:ipuRpcSaklmxR6C39G187TpBAO132gUfleTGccUPs8c=
github.com/aws/aws-sdk-go-v2/internal/ini v1.6.0 h1:hwZB07/beLiCopuRKF0t+dEHmP39iN4YtDh3X5d3hrg=
github.com/aws/aws-sdk-go-v2/internal/ini v1.6.0/go.mod h1:rdAuXeHWhI/zkpYcO5n8WCpaIgY9MUxFyBsuqq3kjyA=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.2 h1:pyVrNAf7Hwz0u39dLKN5t+n0+K/3rMYKuiOoIum3AsU=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.2/go.mod h1:mydrfOb9uiOYCxuCPR8YHQNQyGQwUQ7gPMZGBKbH8NY=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.0 h1:CJxo7ZBbaIzmXfV3hjcx36n9V87gJsIUPJflwqEHl3Q=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.0/go.mod h1:yjVfjuY4nD1EW9i387Kau+I6V5cBA5YnC/mWNopjZrI=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.2 h1:f2LhPofnjcdOQKRtumKjMvIHkfSQ8aH/rwKUDEQ/SB4=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.2/go.mod h1:q+xX0H4OfuWDuBy7y/LDi4v8IBOWuF+vtp8Z6ex+lw4=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2 h1:h7j73yuAVVjic8pqswh+L/7r2IHP43QwRyOu6zcCDDE=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2/go.mod h1:H07AHdK5LSy8F7EJUQhoxyiCNkePoHj2D8P2yGTWafo=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.2 h1:gbIaOzpXixUpoPK+js/bCBK1QBDXM22SigsnzGZio0U=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.2/go.mod h1:p+S7RNbdGN8qgHDSg2SCQJ9FeMAmvcETQiVpeGhYnNM=
github.com/aws/aws-sdk-go-v2/service/marketplacemetering v1.18.1 h1:/CQ/XwDvcKS9wlVgdjfKNT4jUpU5PckWyp19VpmPBTs=
github.com/aws/aws-sdk-go-v2/service/marketplacemetering v1.18.1/go.mod h1:kZxmW3E6zOoBhQWTzbdBeYROG5iqrPe7HcK1BY0QH+s=
github.com/aws/aws-sdk-go-v2/service/s3 v1.42.1 h1:o6MCcX1rJW8Y3g+hvg2xpjF6JR6DftuYhfl3Nc1WV9Q=
github.com/aws/aws-sdk-go-v2/service/s3 v1.42.1/go.mod h1:UDtxEWbREX6y4KREapT+jjtjoH0TiVSS6f5nfaY1UaM=
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.23.1 h1:xK86ln1cEDa0cUpLaCbFFX/BABPw4ognfzpGfbF4PkY=
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.23.1/go.mod h1:eqTdeirkcyBiDviU/N1JMcImS9zEJDn5wOzX3BsU4wU=
github.com/aws/aws-sdk-go-v2/service/sso v1.17.1 h1:km+ZNjtLtpXYf42RdaDZnNHm9s7SYAuDGTafy6nd89A=
github.com/aws/aws-sdk-go-v2/service/sso v1.17.1/go.mod h1:aHBr3pvBSD5MbzOvQtYutyPLLRPbl/y9x86XyJJnUXQ=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1 h1:iRFNqZH4a67IqPvK8xxtyQYnyrlsvwmpHOe9r55ggBA=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1/go.mod h1:pTy5WM+6sNv2tB24JNKFtn6EvciQ5k40ZJ0pq/Iaxj0=
github.com/aws/aws-sdk-go-v2/service/sts v1.25.1 h1:txgVXIXWPXyqdiVn92BV6a/rgtpX31HYdsOYj0sVQQQ=
github.com/aws/aws-sdk-go-v2/service/sts v1.25.1/go.mod h1:VAiJiNaoP1L89STFlEMgmHX1bKixY+FaP+TpRFrmyZ4=
github.com/aws/smithy-go v1.16.0 h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik=
github.com/aws/smithy-go v1.16.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
github.com/aws/aws-sdk-go-v2 v1.23.0 h1:PiHAzmiQQr6JULBUdvR8fKlA+UPKLT/8KbiqpFBWiAo=
github.com/aws/aws-sdk-go-v2 v1.23.0/go.mod h1:i1XDttT4rnf6vxc9AuskLc6s7XBee8rlLilKlc03uAA=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1 h1:ZY3108YtBNq96jNZTICHxN1gSBSbnvIdYwwqnvCV4Mc=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.1/go.mod h1:t8PYl/6LzdAqsU4/9tz28V/kU+asFePvpOMkdul0gEQ=
github.com/aws/aws-sdk-go-v2/config v1.25.1 h1:YsjngBOl2mx4l3egkVWndr6/6TqtkdsWJFZIsQ924Ek=
github.com/aws/aws-sdk-go-v2/config v1.25.1/go.mod h1:yV6h7TRVzhdIFmUk9WWDRpWwYGg1woEzKr0k1IYz2Tk=
github.com/aws/aws-sdk-go-v2/credentials v1.16.1 h1:WessyrdgyFN5TB+eLQdrFSlN/3oMnqukIFhDxK6z8h0=
github.com/aws/aws-sdk-go-v2/credentials v1.16.1/go.mod h1:RQJyPxKcr+m4ArlIG1LUhMOrjposVfzbX6H8oR6oCgE=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.4 h1:9wKDWEjwSnXZre0/O3+ZwbBl1SmlgWYBbrTV10X/H1s=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.4/go.mod h1:t4i+yGHMCcUNIX1x7YVYa6bH/Do7civ5I6cG/6PMfyA=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.13.8 h1:wuOjvalpd2CnXffks74Vq6n3yv9vunKCoy4R1sjStGk=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.13.8/go.mod h1:vywwjy6VnrR48Izg136JoSUXC4mH9QeUi3g0EH9DSrA=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.3 h1:DUwbD79T8gyQ23qVXFUthjzVMTviSHi3y4z58KvghhM=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.3/go.mod h1:7sGSz1JCKHWWBHq98m6sMtWQikmYPpxjqOydDemiVoM=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.3 h1:AplLJCtIaUZDCbr6+gLYdsYNxne4iuaboJhVt9d+WXI=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.3/go.mod h1:ify42Rb7nKeDDPkFjKn7q1bPscVPu/+gmHH8d2c+anU=
github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0 h1:usgqiJtamuGIBj+OvYmMq89+Z1hIKkMJToz1WpoeNUY=
github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.3 h1:lMwCXiWJlrtZot0NJTjbC8G9zl+V3i68gBTBBvDeEXA=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.2.3/go.mod h1:5yzAuE9i2RkVAttBl8yxZgQr5OCq4D5yDnG7j9x2L0U=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1 h1:rpkF4n0CyFcrJUG/rNNohoTmhtWlFTRI4BsZOh9PvLs=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.10.1/go.mod h1:l9ymW25HOqymeU2m1gbUQ3rUIsTwKs8gYHXkqDQUhiI=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.3 h1:xbwRyCy7kXrOj89iIKLB6NfE2WCpP9HoKyk8dMDvnIQ=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.2.3/go.mod h1:R+/S1O4TYpcktbVwddeOYg+uwUfLhADP2S/x4QwsCTM=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.3 h1:kJOolE8xBAD13xTCgOakByZkyP4D/owNmvEiioeUNAg=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.3/go.mod h1:Owv1I59vaghv1Ax8zz8ELY8DN7/Y0rGS+WWAmjgi950=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.3 h1:KV0z2RDc7euMtg8aUT1czv5p29zcLlXALNFsd3jkkEc=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.16.3/go.mod h1:KZgs2ny8HsxRIRbDwgvJcHHBZPOzQr/+NtGwnP+w2ec=
github.com/aws/aws-sdk-go-v2/service/marketplacemetering v1.18.2 h1:UaKsLxZ4sHdYlyX2cRZ+7YznCQS7jwHHgVy1hKkNKfE=
github.com/aws/aws-sdk-go-v2/service/marketplacemetering v1.18.2/go.mod h1:4L1Z3QlQqkGEPSRH9fYPuHLxNEK54VgExjw4J/ShjbM=
github.com/aws/aws-sdk-go-v2/service/s3 v1.42.2 h1:NnduxUd9+Fq9DcCDdJK8v6l9lR1xDX4usvog+JuQAno=
github.com/aws/aws-sdk-go-v2/service/s3 v1.42.2/go.mod h1:NXRKkiRF+erX2hnybnVU660cYT5/KChRD4iUgJ97cI8=
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.23.2 h1:M5NodszNDBfyfFBKoAzJY0flmkkQCg7MGk6+/vBGjCM=
github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.23.2/go.mod h1:+8dYLQz+I30HIGyhp+6htf3+yyGTqBzzTOG90Ai8lWs=
github.com/aws/aws-sdk-go-v2/service/sso v1.17.2 h1:V47N5eKgVZoRSvx2+RQ0EpAEit/pqOhqeSQFiS4OFEQ=
github.com/aws/aws-sdk-go-v2/service/sso v1.17.2/go.mod h1:/pE21vno3q1h4bbhUOEi+6Zu/aT26UK2WKkDXd+TssQ=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.2 h1:sMAcO7VHVw28HTAdZpTULDzFirHOsVm/x25CxhUH0jA=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.2/go.mod h1:dWqm5G767qwKPuayKfzm4rjzFmVjiBFbOJrpSPnAMDs=
github.com/aws/aws-sdk-go-v2/service/sts v1.25.2 h1:vwyiRTnXLqsak/6WAQ+uTRhVqKI6vxUQ0HJXjKij0zM=
github.com/aws/aws-sdk-go-v2/service/sts v1.25.2/go.mod h1:4EqRHDCKP78hq3zOnmFXu5k0j4bXbRFfCh/zQ6KnEfQ=
github.com/aws/smithy-go v1.17.0 h1:wWJD7LX6PBV6etBUwO0zElG0nWN9rUhp0WdYeHSHAaI=
github.com/aws/smithy-go v1.17.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=
@ -327,8 +327,8 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
github.com/klauspost/compress v1.17.3 h1:qkRjuerhUU1EmXLYGkSH6EZL+vPSxIrYjLNAK4slzwA=
github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@ -378,8 +378,8 @@ github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvls
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/mhale/smtpd v0.8.0 h1:5JvdsehCg33PQrZBvFyDMMUDQmvbzVpZgKob7eYBJc0=
github.com/mhale/smtpd v0.8.0/go.mod h1:MQl+y2hwIEQCXtNhe5+55n0GZOjSmeqORDIXbqUL3x4=
github.com/miekg/dns v1.1.56 h1:5imZaSeoRNvpM9SzWNhEcP9QliKiz20/dA2QabIGVnE=
github.com/miekg/dns v1.1.56/go.mod h1:cRm6Oo2C8TY9ZS/TqsSrseAcncm74lfK5G+ikN2SWWY=
github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM=
github.com/miekg/dns v1.1.57/go.mod h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
github.com/minio/sio v0.3.1 h1:d59r5RTHb1OsQaSl1EaTWurzMMDRLA5fgNmjzD4eVu4=
github.com/minio/sio v0.3.1/go.mod h1:S0ovgVgc+sTlQyhiXA1ppBLv7REM7TYi5yyq2qL/Y6o=
github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=

View file

@ -169,6 +169,7 @@ type shareLoginPage struct {
Version string
Error string
CSRFToken string
CSPNonce string
StaticURL string
Branding UIBranding
}
@ -594,12 +595,13 @@ func (s *httpdServer) renderClientResetPwdPage(w http.ResponseWriter, r *http.Re
renderClientTemplate(w, templateResetPassword, data)
}
func (s *httpdServer) renderShareLoginPage(w http.ResponseWriter, currentURL, error, ip string) {
func (s *httpdServer) renderShareLoginPage(w http.ResponseWriter, r *http.Request, error, ip string) {
data := shareLoginPage{
CurrentURL: currentURL,
CurrentURL: r.RequestURI,
Version: version.Get().Version,
Error: error,
CSRFToken: createCSRFToken(ip),
CSPNonce: secure.CSPNonce(r.Context()),
StaticURL: webStaticFilesPath,
Branding: s.binding.Branding.WebClient,
}
@ -1763,29 +1765,29 @@ func (s *httpdServer) ensurePDF(w http.ResponseWriter, r *http.Request, name str
func (s *httpdServer) handleClientShareLoginGet(w http.ResponseWriter, r *http.Request) {
r.Body = http.MaxBytesReader(w, r.Body, maxLoginBodySize)
s.renderShareLoginPage(w, r.RequestURI, "", util.GetIPFromRemoteAddress(r.RemoteAddr))
s.renderShareLoginPage(w, r, "", util.GetIPFromRemoteAddress(r.RemoteAddr))
}
func (s *httpdServer) handleClientShareLoginPost(w http.ResponseWriter, r *http.Request) {
r.Body = http.MaxBytesReader(w, r.Body, maxLoginBodySize)
ipAddr := util.GetIPFromRemoteAddress(r.RemoteAddr)
if err := r.ParseForm(); err != nil {
s.renderShareLoginPage(w, r.RequestURI, err.Error(), ipAddr)
s.renderShareLoginPage(w, r, err.Error(), ipAddr)
return
}
if err := verifyCSRFToken(r.Form.Get(csrfFormToken), ipAddr); err != nil {
s.renderShareLoginPage(w, r.RequestURI, err.Error(), ipAddr)
s.renderShareLoginPage(w, r, err.Error(), ipAddr)
return
}
shareID := getURLParam(r, "id")
share, err := dataprovider.ShareExists(shareID, "")
if err != nil {
s.renderShareLoginPage(w, r.RequestURI, dataprovider.ErrInvalidCredentials.Error(), ipAddr)
s.renderShareLoginPage(w, r, dataprovider.ErrInvalidCredentials.Error(), ipAddr)
return
}
match, err := share.CheckCredentials(strings.TrimSpace(r.Form.Get("share_password")))
if !match || err != nil {
s.renderShareLoginPage(w, r.RequestURI, dataprovider.ErrInvalidCredentials.Error(), ipAddr)
s.renderShareLoginPage(w, r, dataprovider.ErrInvalidCredentials.Error(), ipAddr)
return
}
c := jwtTokenClaims{
@ -1793,7 +1795,7 @@ func (s *httpdServer) handleClientShareLoginPost(w http.ResponseWriter, r *http.
}
err = c.createAndSetCookie(w, r, s.tokenAuth, tokenAudienceWebShare, ipAddr)
if err != nil {
s.renderShareLoginPage(w, r.RequestURI, common.ErrInternalFailure.Error(), ipAddr)
s.renderShareLoginPage(w, r, common.ErrInternalFailure.Error(), ipAddr)
return
}
next := path.Clean(r.URL.Query().Get("next"))

File diff suppressed because one or more lines are too long

View file

@ -123,6 +123,40 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
+' '+(e?'KMGTPEZY'[--e]+'iB':'Bytes')
}
function initRepeaterItems() {
let repeaterDeleteButtons = document.querySelectorAll('[data-repeater-delete]');
let repeaterCreateButtons = document.querySelectorAll('[data-repeater-create]');
repeaterDeleteButtons.forEach(d => {
d.addEventListener("click", function(e){
e.preventDefault();
});
});
repeaterCreateButtons.forEach(d => {
d.addEventListener("click", function(e){
e.preventDefault();
});
});
}
function initRepeater(selector) {
$(selector).repeater({
initEmpty: false,
show: function () {
$(this).slideDown();
$(this).find('[data-repeater-delete]').on("click", function(e){
e.preventDefault();
});
},
hide: function (deleteElement) {
$(this).slideUp(deleteElement);
}
});
}
KTUtil.onDOMContentLoaded(function () {
var dismissErrorBtn = $('#id_dismiss_error_msg');
if (dismissErrorBtn){

View file

@ -63,7 +63,7 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
{{end}}
{{- define "extra_js"}}
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.}}"{{- end}}>
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.CSPNonce}}"{{- end}}>
KTUtil.onDOMContentLoaded(function () {
$('#change_pwd_form').submit(function (event) {
let submitButton = document.querySelector('#form_submit');

View file

@ -101,7 +101,7 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
{{- define "extra_js"}}
<script src="{{.StaticURL}}/vendor/codemirror/cm6.bundle.min.js"></script>
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.}}"{{- end}}>
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.CSPNonce}}"{{- end}}>
var cmView;
function keepAlive() {

View file

@ -183,8 +183,8 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
<script src="{{.StaticURL}}/vendor/glightbox/glightbox.min.js"></script>
<script src="{{.StaticURL}}/vendor/pdfobject/pdfobject.min.js"></script>
<script src="{{.StaticURL}}/vendor/video-js/video.min.js"></script>
{{- if not .ShareUploadBaseURL}}
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.CSPNonce}}"{{- end}}>
//{{- if not .ShareUploadBaseURL}}
const supportedEditExtensions = ["csv", "bat", "dyalog", "apl", "asc", "pgp", "sig", "asn", "asn1", "b", "bf",
"c", "h", "ino", "cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx", "cob", "cpy", "cbl", "cs", "clj",
"cljc", "cljx", "cljs", "gss", "cmake", "cmake.in", "coffee", "cl", "lisp", "el", "cyp", "cypher",
@ -203,9 +203,7 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
"vtl", "vhd", "vhdl", "vue", "xml", "xsl", "xsd", "svg", "xy", "xquery", "ys", "yaml", "yml", "z80",
"mscgen", "mscin", "msc", "xu", "msgenny", "wat", "wast"];
const supportedEditFilenames = ["readme", "dockerfile", "pkgbuild"]
</script>
{{- end}}
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.CSPNonce}}"{{- end}}>
//{{- end}}
function keepAlive() {
//{{- if not .ShareUploadBaseURL}}
axios.get('{{.PingURL}}',{
@ -255,13 +253,12 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
render: function (data, type, row) {
if (type === 'display') {
data = escapeHTML(data);
let dirPath = row['dir_path'];
return `<div class="d-flex align-items-center">
<i class="ki-duotone ki-folder fs-1 text-primary me-4">
<i class="path1"></i>
<i class="path2"></i>
</i>
<a href="#" onclick="onDirBrowserClick('${dirPath}');" class="text-gray-700 text-hover-primary">${data}</a>
<a href="#" class="text-gray-700 text-hover-primary" data-dirbrowser-table-row="open">${data}</a>
</div>`
}
return data;
@ -289,8 +286,22 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
});
dt.on('draw', function () {
let navHTML = `<i class="ki-duotone ki-home fs-1 text-primary me-3"></i>
<a href="#" onclick="onDirBrowserClick('%2F');">Home</a>`;
let dirBrowserNav = document.getElementById("dirs_browser_nav");
while (dirBrowserNav.firstChild) {
dirBrowserNav.removeChild(dirBrowserNav.firstChild);
}
let mainNavIcon = document.createElement("i");
mainNavIcon.classList.add("ki-duotone", "ki-home", "fs-1", "text-primary", "me-3");
let mainNavLink = document.createElement("a");
mainNavLink.textContent = "Home";
mainNavLink.href = "#";
mainNavLink.addEventListener("click", function(e){
e.preventDefault();
onDirBrowserClick("%2F");
});
dirBrowserNav.appendChild(mainNavIcon);
dirBrowserNav.appendChild(mainNavLink);
let p = "/";
if (curDir && curDir != "%2F") {
p = decodeURIComponent(curDir.replace(/\+/g, '%20'));
@ -305,13 +316,24 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
fullPath += encodeURIComponent("/" + dir);
}
dir = escapeHTML(dir);
navHTML += `<i class="ki-duotone ki-right fs-2x text-primary mx-1"></i>
<a href="#" onclick="onDirBrowserClick('${fullPath}');">${dir}</a>`;
let navIcon = document.createElement("i");
navIcon.classList.add("ki-duotone", "ki-right", "fs-2x", "text-primary", "mx-1");
let navLink = document.createElement("a");
navLink.textContent = dir;
navLink.href = "#";
let pathCopy = fullPath
navLink.addEventListener("click", function(e){
e.preventDefault();
onDirBrowserClick(pathCopy);
});
dirBrowserNav.appendChild(navIcon);
dirBrowserNav.appendChild(navLink);
}
}
}
document.getElementById("dirs_browser_nav").innerHTML = navHTML;
$('#move_copy_folder').val(p);
handleRowActions();
});
}
@ -367,6 +389,18 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
});
}
function handleRowActions(){
const openLinks = document.querySelectorAll('[data-dirbrowser-table-row="open"]');
openLinks.forEach(d => {
d.addEventListener("click", function(e){
e.preventDefault();
const parent = e.target.closest('tr');
onDirBrowserClick(dt.row(parent).data()['dir_path']);
});
});
}
return {
init: function (url, dirPath) {
curDir = dirPath;
@ -524,19 +558,8 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
case "ogg":
case "mp3":
case "wav":
let mediaType = 'video/mp4';
if (extension == 'webm'){
mediaType = 'video/webm';
} else if (extension == 'ogg' || extension == 'ogv') {
mediaType = 'video/ogg';
} else if (extension == 'mp3'){
mediaType = 'audio/mpeg';
} else if (extension == 'wav'){
mediaType = 'audio/wav';
}
let name = b64EncodeUnicode(row["name"]);
previewDiv = `<div class="ms-2" data-kt-filemanger-table="view_item">
<a href="#" onclick="openVideoPlayer('${name}', '${row['url']}', '${mediaType}');" class="btn btn-sm btn-icon btn-light btn-active-light-primary">
<a href="#" class="btn btn-sm btn-icon btn-light btn-active-light-primary" data-kt-filemanager-table-action="view_media">
<i class="ki-duotone ki-eye fs-5 m-0">
<span class="path1"></span>
<span class="path2"></span>
@ -576,7 +599,6 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
//{{- end}}
}
}
let meta = b64EncodeUnicode(row["meta"]);
let more = `{{- if not .ShareUploadBaseURL}}
{{- if or .CanRename .CanAddFiles .CanShare .CanDelete }}
<div class="ms-2">
@ -591,22 +613,22 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
<div class="menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-700 menu-state-bg-light-primary fw-semibold fs-7 w-150px py-4" data-kt-menu="true">
{{- if .CanRename}}
<div class="menu-item px-3">
<a href="#" onclick="renameItem('${meta}');" class="menu-link px-3" data-kt-filemanager-table="rename">Rename</a>
<a href="#" class="menu-link px-3" data-kt-filemanager-table-action="rename">Rename</a>
</div>
{{- end}}
{{- if or .CanRename .CanAddFiles}}
<div class="menu-item px-3">
<a href="#" onclick="moveOrCopyItem('${meta}');" class="menu-link px-3" data-kt-filemanager-table-filter="move_or_copy">Move or copy</a>
<a href="#" class="menu-link px-3" data-kt-filemanager-table-action="move_or_copy">Move or copy</a>
</div>
{{- end}}
{{- if .CanShare}}
<div class="menu-item px-3">
<a href="#" onclick="shareItem('${meta}');" class="menu-link px-3" data-kt-filemanager-table="share">Share</a>
<a href="#" class="menu-link px-3" data-kt-filemanager-table-action="share">Share</a>
</div>
{{- end}}
{{- if .CanDelete}}
<div class="menu-item px-3">
<a href="#" onclick="deleteItem('${meta}');" class="menu-link text-danger px-3" data-kt-filemanager-table-filter="delete">Delete</a>
<a href="#" class="menu-link text-danger px-3" data-kt-filemanager-table-action="delete">Delete</a>
</div>
{{- end}}
</div>
@ -682,6 +704,7 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
});
}
toggleToolbars();
handleRowActions();
});
dt.on('user-select', function(e, dt, type, cell, originalEvent){
@ -750,6 +773,59 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
}
}
function handleRowActions() {
const renameButtons = document.querySelectorAll('[data-kt-filemanager-table-action="rename"]');
renameButtons.forEach(d => {
d.addEventListener("click", function(e){
e.preventDefault();
const parent = e.target.closest('tr');
renameItem(dt.row(parent).data()["meta"]);
});
});
const moveCopyButtons = document.querySelectorAll('[data-kt-filemanager-table-action="move_or_copy"]');
moveCopyButtons.forEach(d => {
d.addEventListener("click", function(e){
e.preventDefault();
const parent = e.target.closest('tr');
moveOrCopyItem(dt.row(parent).data()["meta"]);
});
});
const shareButtons = document.querySelectorAll('[data-kt-filemanager-table-action="share"]');
shareButtons.forEach(d => {
d.addEventListener("click", function(e){
e.preventDefault();
const parent = e.target.closest('tr');
shareItem(dt.row(parent).data()["meta"]);
});
});
const deleteButtons = document.querySelectorAll('[data-kt-filemanager-table-action="delete"]');
deleteButtons.forEach(d => {
d.addEventListener("click", function(e){
e.preventDefault();
const parent = e.target.closest('tr');
deleteItem(dt.row(parent).data()["meta"]);
});
});
const viewMediaLinks = document.querySelectorAll('[data-kt-filemanager-table-action="view_media"]');
viewMediaLinks.forEach(d => {
d.addEventListener("click", function(e){
e.preventDefault();
const parent = e.target.closest('tr');
let rowData = dt.row(parent).data();
openVideoPlayer(rowData["name"], rowData["url"]);
});
});
}
var initLightbox = function() {
lightbox = GLightbox({
slideHTML: `<div class="gslide">
@ -985,10 +1061,9 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
function moveOrCopyItem(meta) {
$('#errorMsg').addClass("d-none");
let decodedMeta = UnicodeDecodeB64(meta);
$('#move_copy_name_container').removeClass("d-none");
$('#move_copy_source').val(meta);
$('#move_copy_name').val(getNameFromMeta(decodedMeta));
$('#move_copy_name').val(getNameFromMeta(meta));
$('#modal_move_or_copy').modal('show');
KTDatatablesFoldersExplorer.init('{{.DirsURL}}?dirtree=1&path={{.CurrentDir}}', '{{.CurrentDir}}');
}
@ -1017,7 +1092,7 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
});
});
} else {
let meta = UnicodeDecodeB64($('#move_copy_source').val());
let meta = $('#move_copy_source').val();
let sourceName = getNameFromMeta(meta);
items.push({
targetDir: targetDir,
@ -1204,7 +1279,6 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
let errDivEl = $('#errorMsg');
let errTxtEl = $('#errorTxt');
errDivEl.addClass("d-none");
meta = UnicodeDecodeB64(meta);
let itemName = getNameFromMeta(meta);
ModalAlert.fire({
@ -1251,7 +1325,6 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
}
function shareItem(meta) {
meta = UnicodeDecodeB64(meta);
let filesArray = [];
filesArray.push(getNameFromMeta(meta));
let files = encodeURIComponent(JSON.stringify(filesArray));
@ -1263,8 +1336,7 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
function renameItem(meta) {
$('#errorMsg').addClass("d-none");
let decodedMeta = UnicodeDecodeB64(meta);
let oldName = getNameFromMeta(decodedMeta);
let oldName = getNameFromMeta(meta);
$('#rename_old_name').val(meta);
$('#rename_new_name').val(oldName);
$('#rename_title').text(`Rename "${oldName}"`);
@ -1272,8 +1344,8 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
}
function doRename() {
let decodedMeta = UnicodeDecodeB64($('#rename_old_name').val());
let oldName = getNameFromMeta(decodedMeta);
let meta = $('#rename_old_name').val();
let oldName = getNameFromMeta(meta);
let newName = $('#rename_new_name').val();
let errDivEl = $('#errorMsg');
let errTxtEl = $('#errorTxt');
@ -1474,7 +1546,19 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
uploadFile();
}
function openVideoPlayer(name, url, videoType){
function openVideoPlayer(name, url){
let extension = name.slice((name.lastIndexOf(".") - 1 >>> 0) + 2).toLowerCase();
let videoType = 'video/mp4';
if (extension == 'webm') {
videoType = 'video/webm';
} else if (extension == 'ogg' || extension == 'ogv') {
videoType = 'video/ogg';
} else if (extension == 'mp3') {
videoType = 'audio/mpeg';
} else if (extension == 'wav') {
videoType = 'audio/wav';
}
if (!player){
player = videojs('video_player', {
controls: true,
@ -1482,7 +1566,7 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
preload: 'auto'
});
}
$("#video_title").text(UnicodeDecodeB64(name));
$("#video_title").text(name);
$('#modal_video_player').modal('show');
player.src({
type: videoType,

View file

@ -139,20 +139,10 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
{{- define "extra_js"}}
{{- if .LoggedUser.CanManagePublicKeys}}
<script src="{{.StaticURL}}/assets/plugins/custom/formrepeater/formrepeater.bundle.js"></script>
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.}}"{{- end}}>
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.CSPNonce}}"{{- end}}>
KTUtil.onDOMContentLoaded(function () {
$('#public_keys').repeater({
initEmpty: false,
show: function () {
$(this).slideDown();
},
hide: function (deleteElement) {
$(this).slideUp(deleteElement);
}
});
initRepeater('#public_keys');
initRepeaterItems();
$("#page_form").submit(function (event) {
let submitButton = document.querySelector('#form_submit');

View file

@ -191,17 +191,8 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
<script src="{{.StaticURL}}/assets/plugins/custom/formrepeater/formrepeater.bundle.js"></script>
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.CSPNonce}}"{{- end}}>
KTUtil.onDOMContentLoaded(function () {
$('#paths').repeater({
initEmpty: false,
show: function () {
$(this).slideDown();
},
hide: function (deleteElement) {
$(this).slideUp(deleteElement);
}
});
initRepeater('#paths');
initRepeaterItems();
const picker = new tempusDominus.TempusDominus(document.getElementById("id_expiration"), {
localization: {
@ -209,7 +200,7 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
}
});
//{{ if gt .Share.ExpiresAt 0 }}
let input_dt = moment('{{.Share.ExpiresAt }}','x').toDate();
let input_dt = moment('{{.Share.ExpiresAt }}', 'x').toDate();
picker.dates.setValue(tempusDominus.DateTime.convert(input_dt));
//{{ end }}
@ -232,6 +223,5 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
return true;
});
});
</script>
{{- end}}

View file

@ -161,121 +161,174 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
}
function showShareLink(shareID, shareScope, isExpired) {
if (isExpired == "1") {
$('#expiredShare').show();
if (isExpired == "1") {
$('#expiredShare').show();
$('#writeShare').hide();
$('#readShare').hide();
} else {
let shareURL = '{{.BasePublicSharesURL}}' + "/" + fixedEncodeURIComponent(shareID);
if (shareScope == 'Read') {
$('#expiredShare').hide();
$('#writeShare').hide();
$('#readShare').hide();
$('#readShare').show();
$('#readLink').attr("href", shareURL);
$('#readLink').attr("title", shareURL);
$('#readUncompressedLink').attr("href", shareURL + "?compress=false");
$('#readUncompressedLink').attr("title", shareURL + "?compress=false");
$('#readBrowseLink').attr("href", shareURL + "/browse");
$('#readBrowseLink').attr("title", shareURL + "/browse");
} else {
let shareURL = '{{.BasePublicSharesURL}}' + "/" + fixedEncodeURIComponent(shareID);
if (shareScope == 'Read') {
$('#expiredShare').hide();
$('#writeShare').hide();
$('#readShare').show();
$('#readLink').attr("href", shareURL);
$('#readLink').attr("title", shareURL);
$('#readUncompressedLink').attr("href", shareURL + "?compress=false");
$('#readUncompressedLink').attr("title", shareURL + "?compress=false");
$('#readBrowseLink').attr("href", shareURL + "/browse");
$('#readBrowseLink').attr("title", shareURL + "/browse");
} else {
$('#expiredShare').hide();
$('#writeShare').show();
$('#readShare').hide();
$('#writePageLink').attr("href", shareURL + "/upload");
$('#writePageLink').attr("title", shareURL + "/upload");
}
$('#expiredShare').hide();
$('#writeShare').show();
$('#readShare').hide();
$('#writePageLink').attr("href", shareURL + "/upload");
$('#writePageLink').attr("title", shareURL + "/upload");
}
$('#link_modal').modal('show');
}
$('#link_modal').modal('show');
}
KTUtil.onDOMContentLoaded(function () {
const tableData = [];
{{- range .Shares}}
tableData.push(['{{.Name}}','{{.GetScopeAsString}}','{{.GetInfoString}}','{{.ShareID}}','{{- if .IsExpired}}1{{- else}}0{{- end}}']);
{{- end}}
const tableData = [];
{{- range .Shares}}
tableData.push(['{{.Name}}','{{.GetScopeAsString}}','{{.GetInfoString}}','{{.ShareID}}','{{- if .IsExpired}}1{{- else}}0{{- end}}']);
{{- end}}
let dt = $('#dataTable').DataTable({
data: tableData,
columnDefs: [
{
targets: 3,
searchable: false,
orderable: false,
className: 'text-end',
render: function (data, type, row) {
if (type === 'display') {
return `<div class="d-flex justify-content-end">
<div class="ms-2">
<a href="#" onclick="showShareLink('${row[3]}','${row[1]}','${row[4]}')" class="btn btn-sm btn-icon btn-light btn-active-light-primary">
<i class="ki-duotone ki-fasten fs-5 m-0">
<span class="path1"></span>
<span class="path2"></span>
</i>
</a>
</div>
<div class="ms-2">
<button type="button" class="btn btn-sm btn-icon btn-light btn-active-light-primary"
data-kt-menu-trigger="click" data-kt-menu-placement="bottom-end">
<i class="ki-duotone ki-dots-square fs-5 m-0">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
<span class="path4"></span>
</i>
</button>
<div class="menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-600 menu-state-bg-light-primary fw-semibold fs-7 w-150px py-4" data-kt-menu="true">
<div class="menu-item px-3">
<a href="#" onclick="editAction('${row[3]}');" class="menu-link px-3">Edit</a>
</div>
<div class="menu-item px-3">
<a href="#" onclick="deleteAction('${row[3]}');" class="menu-link text-danger px-3">Delete</a>
var sharesDatatable = function(){
var dt;
var initDatatable = function () {
dt = $('#dataTable').DataTable({
data: tableData,
columnDefs: [
{
targets: 3,
searchable: false,
orderable: false,
className: 'text-end',
render: function (data, type, row) {
if (type === 'display') {
return `<div class="d-flex justify-content-end">
<div class="ms-2">
<a href="#" class="btn btn-sm btn-icon btn-light btn-active-light-primary" data-share-table-action="show_link">
<i class="ki-duotone ki-fasten fs-5 m-0">
<span class="path1"></span>
<span class="path2"></span>
</i>
</a>
</div>
<div class="ms-2">
<button type="button" class="btn btn-sm btn-icon btn-light btn-active-light-primary"
data-kt-menu-trigger="click" data-kt-menu-placement="bottom-end">
<i class="ki-duotone ki-dots-square fs-5 m-0">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
<span class="path4"></span>
</i>
</button>
<div class="menu menu-sub menu-sub-dropdown menu-column menu-rounded menu-gray-600 menu-state-bg-light-primary fw-semibold fs-7 w-150px py-4" data-kt-menu="true">
<div class="menu-item px-3">
<a href="#" class="menu-link px-3" data-share-table-action="edit_row">Edit</a>
</div>
<div class="menu-item px-3">
<a href="#" class="menu-link text-danger px-3" data-share-table-action="delete_row">Delete</a>
</div>
</div>
</div>
</div>
</div>`;
</div>`;
}
return "";
}
},
{
targets: [0, 2],
render: function (data, type, row) {
if (type === 'display') {
return escapeHTML(data);
}
return data
}
return "";
}
],
deferRender: true,
stateSave: true,
stateDuration: 0,
stateLoadParams: function (settings, data) {
if (data.search.search){
const filterSearch = document.querySelector('[data-share-table-filter="search"]');
filterSearch.value = data.search.search;
}
},
language: {
emptyTable: "No share defined"
},
{
targets: [0, 2],
render: function (data, type, row) {
if (type === 'display') {
return escapeHTML(data);
}
return data
}
order: [[1, 'asc']],
initComplete: function(settings, json) {
$('#loader').addClass("d-none");
$('#card_content').removeClass("d-none");
let api = $.fn.dataTable.Api(settings);
api.columns.adjust().draw();
KTMenu.createInstances();
handleRowActions();
}
],
deferRender: true,
stateSave: true,
stateDuration: 0,
stateLoadParams: function (settings, data) {
if (data.search.search){
const filterSearch = document.querySelector('[data-share-table-filter="search"]');
filterSearch.value = data.search.search;
}
},
language: {
emptyTable: "No share defined"
},
order: [[1, 'asc']],
initComplete: function(settings, json) {
$('#loader').addClass("d-none");
$('#card_content').removeClass("d-none");
$.fn.dataTable.Api(settings).columns.adjust().draw();
});
dt.on('draw', function () {
KTMenu.createInstances();
handleRowActions();
});
}
var handleSearchDatatable = function () {
const filterSearch = document.querySelector('[data-share-table-filter="search"]');
filterSearch.addEventListener('keyup', function (e) {
dt.rows().deselect();
dt.search(e.target.value, true, false).draw();
});
}
function handleRowActions() {
const editButtons = document.querySelectorAll('[data-share-table-action="edit_row"]');
editButtons.forEach(d => {
d.addEventListener("click", function(e){
e.preventDefault();
const parent = e.target.closest('tr');
editAction(dt.row(parent).data()[3]);
});
});
const deleteButtons = document.querySelectorAll('[data-share-table-action="delete_row"]');
deleteButtons.forEach(d => {
d.addEventListener("click", function(e){
e.preventDefault();
const parent = e.target.closest('tr');
deleteAction(dt.row(parent).data()[3]);
});
});
const showLinkButtons = document.querySelectorAll('[data-share-table-action="show_link"]');
showLinkButtons.forEach(d => {
d.addEventListener("click", function(e){
e.preventDefault();
let rowData = dt.row(e.target.closest('tr')).data();
showShareLink(rowData[3], rowData[1], rowData[4]);
});
});
}
return {
init: function () {
initDatatable();
handleSearchDatatable();
}
});
document.querySelector('[data-share-table-filter="search"]').addEventListener('keyup', function(e){
dt.search(e.target.value, true, false).draw();
});
dt.on('draw', function () {
KTMenu.createInstances();
});
}
}();
KTUtil.onDOMContentLoaded(function () {
sharesDatatable.init();
});
</script>
{{end}}

View file

@ -54,7 +54,7 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
{{- end}}
{{- define "extra_js"}}
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.}}"{{- end}}>
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.CSPNonce}}"{{- end}}>
function uploadFiles(files) {
let has_errors = false;

View file

@ -27,7 +27,7 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).
<body>
<script src="{{.StaticURL}}/vendor/pdfobject/pdfobject.min.js"></script>
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.}}"{{- end}}>
<script type="text/javascript" {{- if .CSPNonce}} nonce="{{.CSPNonce}}"{{- end}}>
PDFObject.embed("{{.URL}}", document.body);
</script>
</body>