Skip to content

Instantly share code, notes, and snippets.

View timbaev's full-sized avatar
💭
📱

Timur Shafigullin timbaev

💭
📱
View GitHub Profile
@timbaev
timbaev / Numbers
Created June 5, 2018 20:44
Find two numbers consisting of 3 or 5 digits, and that these figures in the number are all odd or even
import java.util.ArrayList;
import java.util.List;
public class Numbers {
public static void main(String[] args) {
int[] numbers = { 95017, 12059, 594, 524, 867, 777, 192, 93707, 51489, 43046, 25, 66, 68240 };
List<Integer> answers = new ArrayList<>();
// Answer: 777, 68240
@timbaev
timbaev / JWTErrorExtensions.swift
Created January 25, 2019 14:48
JWTError extension with own errors
import JWT
extension JWTError {
static let payloadCreation = JWTError(identifier: "TokenHelpers.createPayload", reason: "User ID not found")
static let createJWT = JWTError(identifier: "TokenHelpers.createJWT", reason: "Error getting token string")
static let verificationFailed = JWTError(identifier: "TokenHelpers.verifyToken", reason: "JWT verification failed")
}
@timbaev
timbaev / JWTConfig.swift
Last active January 25, 2019 14:58
JWT Configuration file
import JWT
enum JWTConfig {
static let signerKey = "JWT_API_SIGNER_KEY" // Key for signing JWT Access Token
static let header = JWTHeader(alg: "HS256", typ: "JWT") // Algorithm and Type
static let signer = JWTSigner.hs256(key: JWTConfig.signerKey) // Signer for JWT
static let expirationTime: TimeInterval = 100 // In seconds
}
@timbaev
timbaev / AccessTokenPayload.swift
Created January 25, 2019 15:13
Publicly readable set of claims
import JWT
struct AccessTokenPayload: JWTPayload {
var issuer: IssuerClaim
var issuedAt: IssuedAtClaim
var expirationAt: ExpirationClaim
var userID: User.ID
init(issuer: String = "TokensTutorial",
@timbaev
timbaev / TokenHelpers.swift
Created January 25, 2019 17:45
Helper for JWT
import JWT
class TokenHelpers {
/// Create payload for Access Token
fileprivate class func createPayload(from user: User) throws -> AccessTokenPayload {
if let id = user.id {
let payload = AccessTokenPayload(userID: id)
return payload
@timbaev
timbaev / AccessDto.swift
Created January 25, 2019 18:02
Model for send new token
import Vapor
struct AccessDto: Content {
let accessToken: String
let expiredAt: Date
}
func signIn(request: Request, user: User) throws -> Future<AccessDto> {
return User
.query(on: request)
.filter(\.login == user.login)
.first()
.unwrap(or: Abort(.badRequest, reason: "User with login \(user.login) not found"))
.flatMap { persistedUser in
let digest = try request.make(BCryptDigest.self)
if try digest.verify(user.password, created: persistedUser.password) {
@timbaev
timbaev / JWTMiddleware.swift
Created January 26, 2019 13:49
JWT Middleware
import Vapor
import JWT
class JWTMiddleware: Middleware {
func respond(to request: Request, chainingTo next: Responder) throws -> EventLoopFuture<Response> {
if let token = request.http.headers[.authorization].first {
do {
try TokenHelpers.verifyToken(token)
return try next.respond(to: request)
import Vapor
struct TodoDto: Content {
let id: Int?
let title: String
}
import Vapor
protocol TodoService {
func create(request: Request, todoDto: TodoDto) throws -> Future<TodoDto>
func fetch(request: Request) throws -> Future<[TodoDto]>
func delete(request: Request, todoID: Int) throws -> Future<TodoDto>
}