Skip to content
This repository was archived by the owner on Jan 10, 2021. It is now read-only.

Commit 704649a

Browse files
Merge pull request #51 from Slugbotics/agavgavi/maintenance
Tag and name validation to only alphanumeric characters and tags can …
2 parents 3f4d03b + 3c224e8 commit 704649a

File tree

7 files changed

+109
-3
lines changed

7 files changed

+109
-3
lines changed

static/js/admin.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ let init = (app) => {
1616
all_tags: [],
1717
add_tag_text: "",
1818
length_check: false,
19+
tag_wrong: false,
1920
user_email : user_email,
2021

2122
};
2223

23-
2424
app.reindex = (a) => {
2525
let idx = 0;
2626
for (p of a) {
@@ -120,6 +120,13 @@ let init = (app) => {
120120

121121
};
122122

123+
124+
app.sleep = (ms) => {
125+
return function (x) {
126+
return new Promise(resolve => setTimeout(() => resolve(x), ms));
127+
};
128+
};
129+
123130
app.saveTag = (tag_index) => {
124131

125132
let tag = app.data.all_tags[tag_index];
@@ -143,10 +150,20 @@ let init = (app) => {
143150
app.addTag = () => {
144151

145152
let val = app.data.add_tag_text;
153+
146154
if(val.trim().length === 0) {
147155
app.data.length_check = true;
148156
return;
149157
}
158+
159+
if(sluggo.checkTagsString(val) == false) {
160+
app.data.tag_wrong = true;
161+
app.sleep(3000)()
162+
.then(() => {
163+
app.data.tag_wrong = false;
164+
});
165+
return;
166+
}
150167
app.data.length_check = false;
151168

152169
app.data.text_check = false;

static/js/creation.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ let init = (app) => {
1616
options: tags,
1717
bio_empty: false,
1818
tag_empty: false,
19+
tag_wrong: false,
1920
admin: admin === "True" ? true : false,
2021

2122
// Complete.
@@ -29,6 +30,13 @@ let init = (app) => {
2930
}
3031

3132
if(app.data.bio_text.trim().length !== 0) {
33+
34+
35+
if(sluggo.checkTagsList(app.data.selected) == false) {
36+
app.data.tag_wrong = true;
37+
return;
38+
}
39+
3240
axios.post(add_user_url, {
3341
bio: app.data.bio_text,
3442
tags: app.data.selected

static/js/sluggo.js

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,71 @@ sluggo.capitalizeString = (str) => {
1616
sluggo.isOverdue = (dueDate) => {
1717
// get current date
1818
let currDateTime = new Date(new Date().toDateString());
19-
// round due date
19+
// round due date
2020
let fixedDueDate = new Date(new Date(dueDate).getTime() + (new Date()).getTimezoneOffset()*60*1000)
2121

2222
let difference = currDateTime.getTime() - fixedDueDate.getTime();
23-
23+
2424
console.log(difference);
2525

2626
return (difference > 0);
2727
}
28+
29+
30+
sluggo.checkTagsList = (tag_list) => {
31+
32+
if(tag_list.length === 0) {
33+
return true;
34+
}
35+
36+
let patt = /^[\w]+$/;
37+
38+
let matches = tag_list.filter((e) => e.match(patt));
39+
40+
41+
if(matches.length < tag_list.length) {
42+
return false;
43+
}
44+
45+
return true;
46+
};
47+
48+
49+
sluggo.checkTagsString = (tag) => {
50+
51+
if(tag.length === 0) {
52+
return true;
53+
}
54+
55+
let patt = /^[\w]+$/;
56+
57+
let matches = patt.test(tag);
58+
59+
60+
if(!matches) {
61+
return false;
62+
}
63+
64+
return true;
65+
};
66+
67+
68+
69+
70+
sluggo.checkNameString = (name) => {
71+
72+
if(name.length === 0) {
73+
return true;
74+
}
75+
76+
let patt = /^[\w ]+$/;
77+
78+
let matches = patt.test(name);
79+
80+
81+
if(!matches) {
82+
return false;
83+
}
84+
85+
return true;
86+
};

static/js/specific-user.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ let init = (app) => {
1919
is_pending: false,
2020
error: false,
2121
success: false,
22+
tag_wrong: false,
23+
name_wrong: false,
2224
id: id,
2325
selected: "",
2426
isAdmin: admin == "True",
@@ -52,6 +54,8 @@ let init = (app) => {
5254
};
5355

5456

57+
58+
5559
app.updateCurrent = () => {
5660
let user = app.data.current_user;
5761

@@ -63,6 +67,20 @@ let init = (app) => {
6367
return;
6468
}
6569

70+
if(sluggo.checkTagsList(user.tags_list) == false) {
71+
app.data.tag_wrong = true;
72+
app.show_value(0);
73+
return;
74+
}
75+
76+
if(sluggo.checkNameString(user.full_name) == false) {
77+
app.data.name_wrong = true;
78+
app.show_value(0);
79+
return;
80+
}
81+
82+
app.data.tag_wrong = false;
83+
app.data.name_wrong = false;
6684

6785
axios.post(edit_user_url, { bio : user.bio,
6886
role : app.data.selected,

templates/admin.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@
160160
</div>
161161
</div>
162162
<p v-if="length_check" class="has-text-danger">Tag cannot be blank </p>
163+
<p v-if="tag_wrong" class="has-text-danger">Tags must be one word and alphanumeric.</p>
163164
</div>
164165
</div>
165166

templates/create_profile.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
</template>
3333
</v-select>
3434
<p v-if="tag_empty" class="has-text-danger">Please create at least one tag</p>
35+
<p v-if="tag_wrong" class="has-text-danger">Tags must be one word and alphanumeric.</p>
3536
</div>
3637
<div class="field">
3738
<span class="subtitle">Bio</span>

templates/specific_user.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<div class="control">
2323
<input v-if="checkUser()" v-model="current_user.full_name" class="input is-hovered" type="text">
2424
<input v-else disabled v-model="current_user.full_name" class="input is-hovered" type="text">
25+
<p v-if="name_wrong" class="has-text-danger">No special characters allowed</p>
2526
</div>
2627
</div>
2728

@@ -32,6 +33,7 @@
3233
<v-select v-if="checkUnapproved()" multiple v-model="current_user.tags_list" :options="options"> </v-select>
3334
<v-select v-else-if="checkUser() || checkAdmin()" taggable multiple push-tags v-model="current_user.tags_list" :options="options"> </v-select>
3435
<v-select v-else disabled multiple v-model="current_user.tags_list"> </v-select>
36+
<p v-if="tag_wrong" class="has-text-danger">Tags must be one word and alphanumeric.</p>
3537
</div>
3638

3739
<!-- Role Field -->

0 commit comments

Comments
 (0)