8000 GitHub - huseyintazee/Oska-Case
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

huseyintazee/Oska-Case

Repository files navigation

Oska-Case

Merhabalar, Bu projede Oska Yazılım'ın bana göndermiş olduğu case'i yaptım.

Index

Case

Route

app.use("/", pageRoutes)

app.use('/download', downloadRoutes);


const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

"index" ve "download" olmak üzere 2 route bulunmaktadır.

index sayfasına istek atıldığında pageRoutes'a istek atılmaktadır.

pageRoutes.js

const express = require('express');
const router = express.Router();
const authMiddleware = require('../middlewares/authMiddleware.js');
router.get('/', authMiddleware.createToken)

module.exports = router;

pageRoutes API'ye get isteği atarak JSON Web Token(JWT) oluşturmaktadır. Bu JWT authMiddleware.createToken ile yapılmaktadır.

authMiddleware.js

const createToken =(req,res) =>{
    const user = { id: 123, username: 'user' };
    const token = jwt.sign(user, process.env.SECRET_TOKEN, { expiresIn: '1h' });
    res.cookie("token",token, {
      httpOnly: true
    })
    res.send("token created: " + token);
}

Burada token oluşturulduktan sonra cookie'ye token olarak set edilmektedir.

Token oluşturulduktan sonra localhost:PORT/download'a POST isteği atılarak. Body'de gönderilen link doğrulandıktan sonra axios ile indirme işlemi yapılır.

downloadRoutes.js

const express = require('express');
const router = express.Router();
const downloadController = require('../controllers/downloadController.js');
const authMiddleware = require('../middlewares/authMiddleware.js');

router.post('/verify', authMiddleware.verifyToken);
router.post('/', downloadController.downloadFile ,authMiddleware.verifyToken)

module.exports = router;

POST isteği dowloandController.downloadFile ve authMiddleware.verifyToken işlemlerini tetikler.

Authentication

authMiddleware.js

const verifyToken = (req, res, next) => {
  const token = req.cookies.token;
  console.log(token)

  if (!token) {
    return res.status(401).json({ message: 'Missing token' });
  }

  jwt.verify(token, 'Oska', (err, decoded) => {
    if (err) {
      return res.status(403).json({ message: 'Invalid token' });
    }

    req.user = decoded;
    next();
  });
};

Burada token cookieden alınarak doğrulama yapılır eğer doğrulama başarılı ise bir sonraki işleme next() sayesinde geçilir.

Ve indirme işlemi başlatılır.

Download

downloadController.js

const downloadFile = async (req, res) => {
  const downloadLink = req.body.downloadLink;
  console.log(downloadLink)

  if (!downloadLink) {
    return res.status(400).json({ message: 'Missing downloadLink' });
  }


  try {
    const fileUrl = downloadLink;
    if (!fileUrl) {
      return res.status(400).send('No URL provided');
    }
    
    axios({
      method: 'get',
      url: downloadLink,
      responseType: 'stream'
    })
      .then(function (response) {
        const fileName = path.basename(new URL(fileUrl).pathname);
        res.setHeader('Content-Type', response.headers['content-type']);
        res.setHeader('Content-Disposition', 'attachment; filename=' + fileName);
        response.data.pipe(fs.createWriteStream(fileName))
        res.status(200).send('File downloaded.')
      });

  } catch (error) {
    console.error('Error:', error);
    res.status(500).send('An error occurred');
  }

};

İndirme işlemi sırasında Body'den gelen link alınır. Öncelikle link olup olmadığı kontrol edilir. Eğer var ise axios ile indirme işlemi gerçekleşir.

TEST

Aşağıdaki resimlerde görüldüğü üzere ThunderClient'taki test aşamaları vardır.

TOKEN OLUŞTURMA:

DOĞRULAMA

Doğrulamak için istek atılırken Header'a Set-Cookie değişkenine oluşturulan token'ı değer olarak atadıktan sonra istek atmamız gerekir.

İNDİRME

İstek atarken Body'de JSON formatında indirme linki eklememiz gerekmektedir.

SONUÇ

Görüldüğü üzere indirme işlemimiz başarılı bir şekilde gerçekleşmiştir.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0