3. AJAX Request Validator [JS Retake - 11 May 2016]
Здравейте, подхванах да решавам малко задачи от минали изпити и тази ме измъчва от вчера. Хващам 70/100 точки, а не са дадени тестовете. Ще съм благодарен ако някой може да помогне!
Ето го решението ми:
function ajaxRequestValidator(arr) {
let regexHashPattern = /(\d+)([a-zA-Z]{1})/g
let hashPattern = {
full: arr.pop(),
patterns: [],
matches: null
}
while((hashPattern.matches = regexHashPattern.exec(hashPattern.full)) !== null) {
hashPattern.patterns.push({
symbol: hashPattern.matches[2],
count: Number(hashPattern.matches[1])
})
}
let methodPattern = /Method: (GET|POST|PUT|DELETE)$/
let authPattern = /Credentials: (Bearer|Basic) ([a-zA-Z0-9]+)$/
let contentPattern = /Content: ([a-zA-Z0-9.]+)$/
let request = null
for (let i = 0; i < arr.length; i += 3) {
arr[i] = arr[i]
let methodMatches = methodPattern.exec(arr[i])
let authMatches = authPattern.exec(arr[i + 1])
let contentMatches = contentPattern.exec(arr[i + 2])
if(methodMatches === null || authMatches === null || contentMatches === null) {
console.log(`Response-Code:400`)
continue
}
request = {
method: methodMatches[1],
authType: authMatches[1],
authContent: authMatches[2]
}
if(request.method !== 'GET' && request.authType !== 'Bearer') {
console.log(`Response-Method:${request.method}&Code:401`)
continue
}
if(checkAuth(request)) {
console.log(`Response-Method:${request.method}&Code:200&Header:${request.authContent}`)
} else {
console.log(`Response-Method:${request.method}&Code:403`)
}
}
function checkAuth(request) {
for (let i = 0; i < hashPattern.patterns.length; i++) {
let patternSymbol = hashPattern.patterns[i].symbol.toLowerCase()
let patternCount = hashPattern.patterns[i].count
let symbolCount = 0
for (let j = 0; j < request.authContent.length; j++) {
if(patternSymbol === request.authContent[j].toLowerCase()) {
symbolCount++
}
}
if(symbolCount === patternCount) {
return true
}
}
return false
}
}
"Any input request that doesn’t follow the, specified above - format, is to be treated as invalid."
Valid Input:
Method: ...
Credentials: ...
Content: ...
Invalid input:
Method: ...
Credentials: ...
Content: ...
Надявам се да ти е достатъчен hint ... Извинявам се, че зверското ми творение (изпита по JavaScript) продължава да набира жертви :D Поздравления за ентусиазма и смелоста да се опиташ да го решиш :P.
Благодаря за hint-a, 100/100
Задачата не е много гадна ако си я пишеш на спокойствие... Този вариант с некоректните данни го бях предвидил, но не се сетих, че с моя pattern не хващам началото на стринга...