summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ansible/VERSION2
-rw-r--r--docker/prod/docker-compose.yml2
-rw-r--r--server/src/rate_limit/rate_limiter.rs17
-rw-r--r--server/src/version.rs2
-rw-r--r--ui/src/components/comment-form.tsx4
-rw-r--r--ui/src/components/login.tsx49
-rw-r--r--ui/src/version.ts2
-rw-r--r--ui/translations/en.json3
8 files changed, 69 insertions, 12 deletions
diff --git a/ansible/VERSION b/ansible/VERSION
index 378c127d..b977a66d 100644
--- a/ansible/VERSION
+++ b/ansible/VERSION
@@ -1 +1 @@
-v0.7.6
+v0.7.7
diff --git a/docker/prod/docker-compose.yml b/docker/prod/docker-compose.yml
index cd364a3c..b915b7f0 100644
--- a/docker/prod/docker-compose.yml
+++ b/docker/prod/docker-compose.yml
@@ -12,7 +12,7 @@ services:
restart: always
lemmy:
- image: dessalines/lemmy:v0.7.6
+ image: dessalines/lemmy:v0.7.7
ports:
- "127.0.0.1:8536:8536"
restart: always
diff --git a/server/src/rate_limit/rate_limiter.rs b/server/src/rate_limit/rate_limiter.rs
index 3e2ea787..20a617c2 100644
--- a/server/src/rate_limit/rate_limiter.rs
+++ b/server/src/rate_limit/rate_limiter.rs
@@ -10,7 +10,7 @@ pub struct RateLimitBucket {
allowance: f64,
}
-#[derive(Eq, PartialEq, Hash, Debug, EnumIter, Copy, Clone)]
+#[derive(Eq, PartialEq, Hash, Debug, EnumIter, Copy, Clone, AsRefStr)]
pub enum RateLimitType {
Message,
Register,
@@ -80,12 +80,21 @@ impl RateLimiter {
if rate_limit.allowance < 1.0 {
debug!(
- "Rate limited IP: {}, time_passed: {}, allowance: {}",
- ip, time_passed, rate_limit.allowance
+ "Rate limited type: {}, IP: {}, time_passed: {}, allowance: {}",
+ type_.as_ref(),
+ ip,
+ time_passed,
+ rate_limit.allowance
);
Err(
APIError {
- message: format!("Too many requests. {} per {} seconds", rate, per),
+ message: format!(
+ "Too many requests. type: {}, IP: {}, {} per {} seconds",
+ type_.as_ref(),
+ ip,
+ rate,
+ per
+ ),
}
.into(),
)
diff --git a/server/src/version.rs b/server/src/version.rs
index b72c8198..df68fe43 100644
--- a/server/src/version.rs
+++ b/server/src/version.rs
@@ -1 +1 @@
-pub const VERSION: &str = "v0.7.6";
+pub const VERSION: &str = "v0.7.7";
diff --git a/ui/src/components/comment-form.tsx b/ui/src/components/comment-form.tsx
index 72a604b9..61ee3d77 100644
--- a/ui/src/components/comment-form.tsx
+++ b/ui/src/components/comment-form.tsx
@@ -263,7 +263,9 @@ export class CommentForm extends Component<CommentFormProps, CommentFormState> {
// If its a comment edit, only check that its from your user, and that its a
// text edit only
- (op == UserOperation.EditComment && data.comment.content)
+ (data.comment.creator_id == UserService.Instance.user.id &&
+ op == UserOperation.EditComment &&
+ data.comment.content)
) {
this.state.previewMode = false;
this.state.loading = false;
diff --git a/ui/src/components/login.tsx b/ui/src/components/login.tsx
index ce04d0d4..97899345 100644
--- a/ui/src/components/login.tsx
+++ b/ui/src/components/login.tsx
@@ -20,6 +20,11 @@ interface State {
loginLoading: boolean;
registerLoading: boolean;
enable_nsfw: boolean;
+ mathQuestion: {
+ a: number;
+ b: number;
+ answer: number;
+ };
}
export class Login extends Component<any, State> {
@@ -40,6 +45,11 @@ export class Login extends Component<any, State> {
loginLoading: false,
registerLoading: false,
enable_nsfw: undefined,
+ mathQuestion: {
+ a: Math.floor(Math.random() * 10) + 1,
+ b: Math.floor(Math.random() * 10) + 1,
+ answer: undefined,
+ },
};
constructor(props: any, context: any) {
@@ -215,6 +225,23 @@ export class Login extends Component<any, State> {
/>
</div>
</div>
+ <div class="form-group row">
+ <label class="col-sm-10 col-form-label" htmlFor="register-math">
+ {i18n.t('what_is')}{' '}
+ {`${this.state.mathQuestion.a} + ${this.state.mathQuestion.b}?`}
+ </label>
+
+ <div class="col-sm-2">
+ <input
+ type="number"
+ id="register-math"
+ class="form-control"
+ value={this.state.mathQuestion.answer}
+ onInput={linkEvent(this, this.handleMathAnswerChange)}
+ required
+ />
+ </div>
+ </div>
{this.state.enable_nsfw && (
<div class="form-group row">
<div class="col-sm-10">
@@ -235,7 +262,11 @@ export class Login extends Component<any, State> {
)}
<div class="form-group row">
<div class="col-sm-10">
- <button type="submit" class="btn btn-secondary">
+ <button
+ type="submit"
+ class="btn btn-secondary"
+ disabled={this.mathCheck}
+ >
{this.state.registerLoading ? (
<svg class="icon icon-spinner spin">
<use xlinkHref="#icon-spinner"></use>
@@ -272,7 +303,9 @@ export class Login extends Component<any, State> {
i.state.registerLoading = true;
i.setState(i.state);
- WebSocketService.Instance.register(i.state.registerForm);
+ if (!i.mathCheck) {
+ WebSocketService.Instance.register(i.state.registerForm);
+ }
}
handleRegisterUsernameChange(i: Login, event: any) {
@@ -303,6 +336,11 @@ export class Login extends Component<any, State> {
i.setState(i.state);
}
+ handleMathAnswerChange(i: Login, event: any) {
+ i.state.mathQuestion.answer = event.target.value;
+ i.setState(i.state);
+ }
+
handlePasswordReset(i: Login) {
event.preventDefault();
let resetForm: PasswordResetForm = {
@@ -311,6 +349,13 @@ export class Login extends Component<any, State> {
WebSocketService.Instance.passwordReset(resetForm);
}
+ get mathCheck(): boolean {
+ return (
+ this.state.mathQuestion.answer !=
+ this.state.mathQuestion.a + this.state.mathQuestion.b
+ );
+ }
+
parseMessage(msg: WebSocketJsonResponse) {
let res = wsJsonToRes(msg);
if (msg.error) {
diff --git a/ui/src/version.ts b/ui/src/version.ts
index 8ad27e7c..5a734de9 100644
--- a/ui/src/version.ts
+++ b/ui/src/version.ts
@@ -1 +1 @@
-export const version: string = 'v0.7.6';
+export const version: string = 'v0.7.7';
diff --git a/ui/translations/en.json b/ui/translations/en.json
index 6d2d1c5d..62b11ce4 100644
--- a/ui/translations/en.json
+++ b/ui/translations/en.json
@@ -264,5 +264,6 @@
"time": "Time",
"action": "Action",
"emoji_picker": "Emoji Picker",
- "block_leaving": "Are you sure you want to leave?"
+ "block_leaving": "Are you sure you want to leave?",
+ "what_is": "What is"
}