اول بیایید ببینم FileBin چیه! قبل از اون هم فکر میکنم همه بدونیم pastebin چیه. اگه نمیدونید خیلی ساده باید بگم یک سایتی که فقط روی اون متن به اشتراک میذارن مثلا ممکنه ارور ها یا حتی سورس یک برنامه باشه!
اما FileBin ها بجای تسکت فایل های شما رو نگهداری میکنند و به شما لینکی ارائه میکنند که فایل را برای دیگران اشتراک بگذارید، نمونه های زیادی هم وجود داره مثل https://wormhole.app
اما خب از اونجایی که من زندگیام رو توی ترمینال میگذرونم و ترمینال رو به باز کردن مرورگر برای اشتراک یک فایل ترجیح میدم، پس از FileBin هایی استفاده میکنم که بتونم تحت ترمینال به سادگی فایلم رو به اشتراک بذارم. برای مثال https://0x0.st
وقتی این رو سایت رو باز کنید هیچ گزینهای برای انتخاب فایل و آپلود نمیبینید! خب پس چطور باید یک فایل را برای سایت آپلود کنید؟ کافیه یک ریکوئست HTTP POST خیلی ساده به سایت بزنید که شامل فایتون باشه. این کار رو خیلی ساده میشه با curl انجام داد.
مثلا بیایین اشتراک یک فایل رو ببینیم
|
|
این سایت خیلی خوبه اما از زمانی به بعد دیگه این سایت کاری که من نیاز دارم رو کفاف نداد! برای مثال من نیاز دارم فایلم بعد از اولین دانلود از روی سرور حذف بشه و از این مهم تر نیاز داشتم که چندین فایل رو با یک یوزنیم مشخص اپلود کنم که خب شخصی که قرار باشه فایل ها رو دانلود کنه، کافیه از یوزنیم استفاده کنه که راحت تر قابل حفظ کردن و اشتراک گذاشتنه. اینطوری بود که گفتم FileBin خودم رو بنویسم :)
بیایید فیچر ها و روش استفاده ازش رو با هم ببینیم.
فرض کنید شما یک فایل دارید که میخواهید با من به اشتراک بگذارید، خیلی ساده ترمینال رو باز میکنید و با یک دستور فایل رو با یک URL تقریبا تصادفی منتشر میکنید.
|
|
دقت کنید من از سوییچ -L استفاده میکنم، دلیل اینکار این هست که خب ممکنه سایت شما رو ریدایرکت کنه. مثلا از http ریدایرکت بشین به https. برای همین این سوییچ رو استفاده میکنم. با این سوییچ دیگه نیازی نیست https:// رو هم بنویسیم!
حالا اگه نیاز دارین که فایلتون بعد از اولین دانلود از روی سرور حذف بشه و دیگه در دسترس نباشه
کافیه از کلمه
once
بجای
file
استفاده کنید.
|
|
تا اینجای کار همه
URL
های هر فایلی به صورت تصادفی هست و من نیاز دارم که
چندین فایل رو زیر یک یوزنیم مشخص مثل
arya
قرار بدم. اینطوری وقتی قراره یک فایل رو برای همکارم توی شرکت بفرستم
خیلی ساده ازش درخواست میکنم در سایت به ادرس
/arya
بره. حالا چطوری اینکارو بکنیم خیلی ساده بجای
once
یا
file
,
همون
username
رو مینویسیم(توی مثال من از نام arya استفاده میکنیم)
|
|
تا اینجای کار مثلا شما چند بار چند فایل مختلف رو زیر یک یوزنیم قرار دادین حالا چطور میشه همه اونها رو باهم دانلود کرد؟
|
|
حالا به این فکر کنید که یکنفر میاد و با یوزنیم های معقول ریکوئست میزنه به سایت و فایل های بقیه رو دانلود میکنه، اینجاست که پسورد به کار میاد. برای گذاشتن پسورد روی هر فایل کافیه توی خود URL سایت پسورد رو بعنوان http parametr بنویسد.
|
|
اینجا دقت کنید که باید از کوتیشن استفاده کنیم چون علامت مساوی و علامت سوال رو bash وایلد کارد میبینه.
برای دانلود هر فایلی هم که پسورد داره کافیه دقیقا مثل مثال قبلی عمل کنید و پسورد رو توی http parametr وارد کنید
|
|
براتون سواله که چرا پسورد روی توی URL گذاشتم؟ میشد که مثلا توی http header پسورد بگیریم و بدیم، پس چرا توی URL?
اینکار برای این هست که دسترسی به فایل ساده باشه. مثلا من وقتی میخام فایلی رو برای همکارم بفرستم و خب فرض کنم همکار من از header ها چیزی نمیدونه، و فقط با یک کلیک باید بتونه به فایل دسترسی پیدا کنه، اینجاست که من فقط یک URL به اون میگم :)
بعضی از ابزار ها hackable هستند! این به معنی ضعف امنیتی نیست، بلکه به این اشاره میکنه ابزار به روشی طراحی شده که کاربران میتونند خارج از هدف اصلی اون ابزار از اون استفاه کنند.
برای مثال ابزار که من درست کردم برای اشتراک فایل هست، اما بنظرتون میشه یک دایرکتوری و یا یک متن رو هم باهاش به اشتراک گذاشت؟
قطعا! اما چطوری؟
برای اینکه یک دایرکتوری با تمامی ساب دایرکتوری هاش رو بفرستین
کافیه از
tar
استفاده کنید.
|
|
با اینکار با استفاده از
tar
تمامی فایل ها و دایرکتوری های مثلا پوشه
~/Pictures
رو به آرشیو
tar
تبدیل میکنید و بعد خروجی رو بعنوان ورودی به
curl
میفرستین.
حالا به این فکر کنید که بخواهیم یک متن رو منتشر کنیم، راهکار دقیقا مشابه قبلیه.
به این شکل که یک متن رو با استفاده از
echo
به ورودی استاندارد
curl
میفرستیم.
|
|
اینطوری خیلی راحت میشه خروجی هر کامندی رو روی به اشتراک گذاشت
سایت من توی آدرس octocat.ir در دسترسه، خوشحال میشم ازش استفاده کنید :)
اینو بدونید که سایت به صورت دیفالت فایل ها رو برای 24 ساعت نگهمیداره
این سرویس رو منبع باز روی گیتهاب گذاشتم، اگه چیزی خواستید میتونید بهش اضافه کنید و یا مشکلاتش رو پچ کنید.
و اگه میخواهید برای خودتون این سرویس رو بیارید بالا از ایمیج داکر استفاده کنید
|
|
اگه نیاز دارین تا فایل ها برای تایم بالاتری نگهداری بشه، متغییر HOURS داخل فایل .env رو تغییر بدین.
ایده های دیگهای هم برای سایت دارم، برای مثال اینکه کاربر بتونه زمان انقضای هر فایل رو خودش مشخص کنه. مثلا به این شکل
|
|
اینطوری میشه یک زمان انقضا بر اساس ساعت برای هر فایل ایجاد کرد.
و خب همچنین میشه یک کوتاه کننده لینک هم بهش اضافه کنم، و لینک های کوتاه شده رو ریدایرکت کنم.
|
|
اگه اینها رو اضافه کنم، این پست رو اپدیت میکنم ولی خوشحال میشم شما توی این پروژه مشارکت کنید.