Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wiki-js
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
wiki-js
Commits
e7460550
Commit
e7460550
authored
May 31, 2020
by
NGPixel
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: comments post min delay
parent
8a749047
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
36 additions
and
6 deletions
+36
-6
comments.vue
client/components/comments.vue
+24
-4
comment.graphql
server/graph/schemas/comment.graphql
+1
-1
comment.js
server/modules/comments/default/comment.js
+9
-0
definition.yml
server/modules/comments/default/definition.yml
+2
-1
No files found.
client/components/comments.vue
View file @
e7460550
...
@@ -131,11 +131,12 @@ export default {
...
@@ -131,11 +131,12 @@ export default {
methods
:
{
methods
:
{
onIntersect
(
entries
,
observer
,
isIntersecting
)
{
onIntersect
(
entries
,
observer
,
isIntersecting
)
{
if
(
isIntersecting
)
{
if
(
isIntersecting
)
{
this
.
fetch
()
this
.
fetch
(
true
)
}
}
},
},
async
fetch
()
{
async
fetch
(
silent
=
false
)
{
this
.
isLoading
=
true
this
.
isLoading
=
true
try
{
const
results
=
await
this
.
$apollo
.
query
({
const
results
=
await
this
.
$apollo
.
query
({
query
:
gql
`
query
:
gql
`
query ($locale: String!, $path: String!) {
query ($locale: String!, $path: String!) {
...
@@ -165,6 +166,16 @@ export default {
...
@@ -165,6 +166,16 @@ export default {
c
.
initials
=
initials
c
.
initials
=
initials
return
c
return
c
})
})
}
catch
(
err
)
{
console
.
warn
(
err
)
if
(
!
silent
)
{
this
.
$store
.
commit
(
'showNotification'
,
{
style
:
'red'
,
message
:
err
.
message
,
icon
:
'alert'
})
}
}
this
.
isLoading
=
false
this
.
isLoading
=
false
this
.
hasLoadedOnce
=
true
this
.
hasLoadedOnce
=
true
},
},
...
@@ -214,6 +225,7 @@ export default {
...
@@ -214,6 +225,7 @@ export default {
return
return
}
}
try
{
const
resp
=
await
this
.
$apollo
.
mutate
({
const
resp
=
await
this
.
$apollo
.
mutate
({
mutation
:
gql
`
mutation
:
gql
`
mutation (
mutation (
...
@@ -264,9 +276,12 @@ export default {
...
@@ -264,9 +276,12 @@ export default {
this
.
$vuetify
.
goTo
(
`#comment-post-id-
${
_
.
get
(
resp
,
'data.comments.create.id'
,
0
)}
`
,
this
.
scrollOpts
)
this
.
$vuetify
.
goTo
(
`#comment-post-id-
${
_
.
get
(
resp
,
'data.comments.create.id'
,
0
)}
`
,
this
.
scrollOpts
)
})
})
}
else
{
}
else
{
throw
new
Error
(
_
.
get
(
resp
,
'data.comments.create.responseResult.message'
,
'An unexpected error occured.'
))
}
}
catch
(
err
)
{
this
.
$store
.
commit
(
'showNotification'
,
{
this
.
$store
.
commit
(
'showNotification'
,
{
style
:
'red'
,
style
:
'red'
,
message
:
_
.
get
(
resp
,
'data.comments.create.responseResult.message'
,
'An unexpected error occured.'
)
,
message
:
err
.
message
,
icon
:
'alert'
icon
:
'alert'
})
})
}
}
...
@@ -286,6 +301,7 @@ export default {
...
@@ -286,6 +301,7 @@ export default {
this
.
isBusy
=
true
this
.
isBusy
=
true
this
.
deleteCommentDialogShown
=
false
this
.
deleteCommentDialogShown
=
false
try
{
const
resp
=
await
this
.
$apollo
.
mutate
({
const
resp
=
await
this
.
$apollo
.
mutate
({
mutation
:
gql
`
mutation
:
gql
`
mutation (
mutation (
...
@@ -319,9 +335,12 @@ export default {
...
@@ -319,9 +335,12 @@ export default {
this
.
comments
=
_
.
reject
(
this
.
comments
,
[
'id'
,
this
.
commentToDelete
.
id
])
this
.
comments
=
_
.
reject
(
this
.
comments
,
[
'id'
,
this
.
commentToDelete
.
id
])
}
else
{
}
else
{
throw
new
Error
(
_
.
get
(
resp
,
'data.comments.delete.responseResult.message'
,
'An unexpected error occured.'
))
}
}
catch
(
err
)
{
this
.
$store
.
commit
(
'showNotification'
,
{
this
.
$store
.
commit
(
'showNotification'
,
{
style
:
'red'
,
style
:
'red'
,
message
:
_
.
get
(
resp
,
'data.comments.delete.responseResult.message'
,
'An unexpected error occured.'
)
,
message
:
err
.
message
,
icon
:
'alert'
icon
:
'alert'
})
})
}
}
...
@@ -362,6 +381,7 @@ export default {
...
@@ -362,6 +381,7 @@ export default {
img
{
img
{
max-width
:
100%
;
max-width
:
100%
;
border-radius
:
5px
;
}
}
code
{
code
{
...
...
server/graph/schemas/comment.graphql
View file @
e7460550
...
@@ -42,7 +42,7 @@ type CommentMutation {
...
@@ -42,7 +42,7 @@ type CommentMutation {
content
:
String
!
content
:
String
!
guestName
:
String
guestName
:
String
guestEmail
:
String
guestEmail
:
String
):
CommentCreateResponse
@
auth
(
requires
:
[
"
write
:
comments
"
,
"
manage
:
system
"
])
):
CommentCreateResponse
@
auth
(
requires
:
[
"
write
:
comments
"
,
"
manage
:
system
"
])
@
rateLimit
(
limit
:
1
,
duration
:
15)
update
(
update
(
id
:
Int
!
id
:
Int
!
...
...
server/modules/comments/default/comment.js
View file @
e7460550
...
@@ -4,6 +4,7 @@ const { JSDOM } = require('jsdom')
...
@@ -4,6 +4,7 @@ const { JSDOM } = require('jsdom')
const
createDOMPurify
=
require
(
'dompurify'
)
const
createDOMPurify
=
require
(
'dompurify'
)
const
_
=
require
(
'lodash'
)
const
_
=
require
(
'lodash'
)
const
{
AkismetClient
}
=
require
(
'akismet-api'
)
const
{
AkismetClient
}
=
require
(
'akismet-api'
)
const
moment
=
require
(
'moment'
)
/* global WIKI */
/* global WIKI */
...
@@ -106,6 +107,14 @@ module.exports = {
...
@@ -106,6 +107,14 @@ module.exports = {
}
}
}
}
// -> Check for minimum delay between posts
if
(
WIKI
.
data
.
commentProvider
.
config
.
minDelay
>
0
)
{
const
lastComment
=
await
WIKI
.
models
.
comments
.
query
().
select
(
'updatedAt'
).
findOne
(
'authorId'
,
user
.
id
).
orderBy
(
'updatedAt'
,
'desc'
)
if
(
lastComment
&&
moment
().
subtract
(
WIKI
.
data
.
commentProvider
.
config
.
minDelay
,
'seconds'
).
isBefore
(
lastComment
.
updatedAt
))
{
throw
new
Error
(
'Your administrator has set a time limit before you can post another comment. Try again later.'
)
}
}
// -> Save Comment to DB
// -> Save Comment to DB
const
cm
=
await
WIKI
.
models
.
comments
.
query
().
insert
(
newComment
)
const
cm
=
await
WIKI
.
models
.
comments
.
query
().
insert
(
newComment
)
...
...
server/modules/comments/default/definition.yml
View file @
e7460550
...
@@ -12,11 +12,12 @@ props:
...
@@ -12,11 +12,12 @@ props:
title
:
Akismet API Key
title
:
Akismet API Key
default
:
'
'
default
:
'
'
hint
:
'
Prevent
spam
by
using
the
Akismet
service.
Enter
your
API
key
here
to
enable.
Leave
empty
to
disable.'
hint
:
'
Prevent
spam
by
using
the
Akismet
service.
Enter
your
API
key
here
to
enable.
Leave
empty
to
disable.'
maxWidth
:
650
order
:
1
order
:
1
minDelay
:
minDelay
:
type
:
Number
type
:
Number
title
:
Post delay
title
:
Post delay
default
:
30
default
:
30
hint
:
'
Minimum
delay
(in
seconds)
between
comments
per
IP
address
.'
hint
:
'
Minimum
delay
(in
seconds)
between
comments
per
account.
Note
that
all
guests
are
considered
as
a
single
account
.'
maxWidth
:
400
maxWidth
:
400
order
:
2
order
:
2
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a 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