a mini social media app for small communities

assorted fixes to input fields in /settings

Changed files
+37 -12
src
templates
webapp
+12
build.maple
··· 43 43 run = 'docker rm beep-database && docker volume rm beep-data' 44 44 } 45 45 46 + task:ngrok = { 47 + description = 'Open an ngrok tunnel for testing.' 48 + category = 'misc' 49 + run = 'ngrok http http://localhost:8008' 50 + } 51 + 52 + task:ngrok.url = { 53 + description = 'Open an ngrok tunnel for testing. Requires you to pass the ngrok URL as an argument.' 54 + category = 'misc' 55 + run = 'ngrok http --url=${args} http://localhost:8008' 56 + } 57 + 46 58 task:run.watch = { 47 59 description = 'Watch/run beep' 48 60 category = 'run'
+11 -7
src/main.v
··· 43 43 44 44 @[inline] 45 45 fn load_validators(mut app App) { 46 - app.validators.username = StringValidator.new(app.config.user.username_min_len,app.config.user.username_max_len,app.config.user.username_pattern) 47 - app.validators.password = StringValidator.new(app.config.user.password_min_len,app.config.user.password_max_len,app.config.user.password_pattern) 48 - app.validators.nickname = StringValidator.new(app.config.user.nickname_min_len,app.config.user.nickname_max_len,app.config.user.nickname_pattern) 49 - app.validators.user_bio = StringValidator.new(app.config.user.bio_min_len,app.config.user.bio_max_len,app.config.user.bio_pattern) 50 - app.validators.pronouns = StringValidator.new(app.config.user.pronouns_min_len,app.config.user.pronouns_max_len,app.config.user.pronouns_pattern) 51 - app.validators.post_title = StringValidator.new(app.config.post.title_min_len,app.config.post.title_max_len,app.config.post.title_pattern) 52 - app.validators.post_body = StringValidator.new(app.config.post.body_min_len,app.config.post.body_max_len,app.config.post.body_pattern) 46 + // vfmt off 47 + user := app.config.user 48 + app.validators.username = StringValidator.new(user.username_min_len, user.username_max_len, user.username_pattern) 49 + app.validators.password = StringValidator.new(user.password_min_len, user.password_max_len, user.password_pattern) 50 + app.validators.nickname = StringValidator.new(user.nickname_min_len, user.nickname_max_len, user.nickname_pattern) 51 + app.validators.user_bio = StringValidator.new(user.bio_min_len, user.bio_max_len, user.bio_pattern) 52 + app.validators.pronouns = StringValidator.new(user.pronouns_min_len, user.pronouns_max_len, user.pronouns_pattern) 53 + post := app.config.post 54 + app.validators.post_title = StringValidator.new(post.title_min_len, post.title_max_len, post.title_pattern) 55 + app.validators.post_body = StringValidator.new(post.body_min_len, post.body_max_len, post.body_pattern) 56 + // vfmt on 53 57 } 54 58 55 59 fn main() {
-3
src/templates/settings.html
··· 15 15 rows="10" 16 16 minlength="@app.config.user.bio_min_len" 17 17 maxlength="@app.config.user.bio_max_len" 18 - required aria-required 19 18 >@user.bio</textarea> 20 19 <br> 21 20 <input type="submit" value="save"> ··· 33 32 maxlength="@app.config.user.pronouns_max_len" 34 33 pattern="@app.config.user.pronouns_pattern" 35 34 value="@user.pronouns" 36 - required aria-required 37 35 > 38 36 <input type="submit" value="save"> 39 37 </form> ··· 50 48 minlength="@app.config.user.nickname_min_len" 51 49 maxlength="@app.config.user.nickname_max_len" 52 50 value="@{user.nickname or { '' }}" 53 - required aria-required 54 51 > 55 52 <input type="submit" value="save"> 56 53 </form>
+14 -2
src/webapp/validation.v
··· 13 13 // validate validates a given string and returns true if it succeeded and false 14 14 // otherwise. 15 15 @[inline] 16 - pub fn (validator StringValidator) validate(str string) bool { 17 - return str.len > validator.min_len && str.len < validator.max_len 16 + pub fn (validator StringValidator) validate(str_ string) bool { 17 + // for whatever reason form inputs can end up with \r\n. i have 18 + // absolutely no clue why this is a thing. anyway, this is here as a fix 19 + str := str_.replace('\r\n', '\n') 20 + 21 + // used for debugging validators. don't uncomment this in prod, please. 22 + // a) it will log a crap ton of unneeded info, and b) basically all user 23 + // inputs are validated. including passwords. 24 + // println('validator on: ${str}') 25 + // println(' >= min_len: ${str.len >= validator.min_len} (${str.len} >= ${validator.min_len})') 26 + // println(' <= max_len: ${str.len <= validator.max_len} (${str.len} <= ${validator.max_len})') 27 + // println(' regex: ${validator.pattern.matches_string(str)}') 28 + 29 + return str.len >= validator.min_len && str.len <= validator.max_len 18 30 && validator.pattern.matches_string(str) 19 31 } 20 32