Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

बिल्डिंग एनफ्लो:लारवेल और अपस्टैश रेडिस के साथ पर्यावरण चर को सुरक्षित रूप से साझा करना

<पी> मैं हाल ही में नूनो मादुरो के प्रोजेक्ट, पियरे से प्रेरित हुआ हूं। यह एक वेब ऐप है जो आपको किसी को भी, जिसे आप चाहते हैं, अल्पकालिक गुप्त संदेश भेजने की अनुमति देता है। ये संदेश एन्क्रिप्टेड हैं, और केवल आप या वह व्यक्ति जिसके साथ आप डिक्रिप्शन लिंक साझा करते हैं, उन्हें पढ़ सकते हैं।

<पी> मैं अपस्टैश रेडिस के साथ कुछ ऐसा ही बनाना चाहता था, इसलिए मैंने एक जगह चुनी:पर्यावरण चर साझा करना। मुझे यकीन है कि किसी बिंदु पर, आपको अपने साथियों के साथ रहस्य साझा करना होगा और सोचा होगा कि एक ऐसी प्रणाली कैसे बनाई जाए जो आपको इसे सुरक्षित रूप से करने की अनुमति दे।

<पी> पेश है Envflow, मेरे द्वारा बनाया गया एक लारवेल नमूना प्रोजेक्ट जो एन्क्रिप्टेड डेटा को संग्रहीत करने और साझा करने के लिए अपने प्राथमिक डेटाबेस के रूप में अपस्टैश रेडिस का उपयोग करता है।

<पी> मैं आपको इस परियोजना के निर्माण की प्रक्रिया के बारे में बताऊंगा, शुरू से लेकर अंत तक उबाऊ विवरणों को छोड़ कर।

ढेर

<पी> सबसे पहले, मैंने PHP को अपनाने और प्रसिद्ध TALL स्टैक का उपयोग करके प्रोजेक्ट बनाने का विकल्प चुना है:

  • टेलविंड सीएसएस
  • अल्पाइन जेएस
  • लारवेल
  • लाइववायर
  • अपस्टैश रेडिस

डेटाबेस

<पी> मुझे एन्क्रिप्टेड डेटा को संग्रहीत करने के लिए एक जगह की आवश्यकता थी जो तेज और लागत प्रभावी होने के साथ-साथ एक निश्चित समय के बाद समाप्त हो सके। जैसा कि आपने अनुमान लगाया होगा, मैंने अपस्टैश रेडिस को चुना।

<पी> अपस्टैश रेडिस एक सर्वर रहित, रेडिस-संगत डेटाबेस है इसलिए यह वास्तव में इस उपयोग-मामले के लिए बिल्कुल सही था।

<पी> Psst... हमारे पास अपस्टैश रेडिस और लारवेल के लिए आरंभ करने की मार्गदर्शिका है!

<पी> अधिक जानें

रूट/एंडपॉइंट

<पी> एनवफ्लो तीन मुख्य मार्गों पर चलता है, साथ ही एक सहायक मार्ग भी है जो बताता है कि परियोजना किस बारे में है। उन मार्गों को routes/web.php पर पाया जा सकता है। फ़ाइल.

मुखपृष्ठ

<पी> होमपेज रूट न केवल प्रोजेक्ट के लिए लैंडिंग पेज के रूप में कार्य करता है बल्कि इसमें एक लाइववायर फॉर्म भी शामिल है जो आपको अपने पर्यावरण चर को एन्क्रिप्ट करने की अनुमति देता है। इस पृष्ठ पर आप यह निर्धारित कर सकते हैं कि पर्यावरण चर को कितनी बार डिक्रिप्ट किया जा सकता है और वे कितने समय तक वैध रहेंगे।

<पी> बिल्डिंग एनफ्लो:लारवेल और अपस्टैश रेडिस के साथ पर्यावरण चर को सुरक्षित रूप से साझा करना

<पी> आप लाइववायर पेज कंपोनेंट को app/Livewire/EncryptEnvPage.php पर पा सकते हैं और resources/views/livewire/encrypt-env-page.blade.php पर तदनुसार टेम्पलेट .

सफलता पृष्ठ

<पी> सफलता पृष्ठ एक सरल पृष्ठ है जो डिक्रिप्शन लिंक साझा करने के दो तरीके प्रदर्शित करता है:एक में डिक्रिप्शन कुंजी शामिल है, जबकि दूसरा डिक्रिप्शन कुंजी को लिंक से अलग करता है।

<पी> बिल्डिंग एनफ्लो:लारवेल और अपस्टैश रेडिस के साथ पर्यावरण चर को सुरक्षित रूप से साझा करना

<पी> आप लाइववायर पेज कंपोनेंट को app/Livewire/SuccessPage.php पर पा सकते हैं और resources/views/livewire/success-page.blade.php पर तदनुसार टेम्पलेट .

डिक्रिप्शन पेज

<पी> यह पृष्ठ वह है जहां डिक्रिप्शन का सारा जादू होता है, याद रखें कि हम अपने अपस्टैश रेडिस डेटाबेस में एन्क्रिप्शन कुंजी को संग्रहीत नहीं करते हैं, हम केवल एन्क्रिप्टेड मान को संग्रहीत करते हैं जो कि अस्पष्टता का एक समूह है। डिक्रिप्शन पेज का मुख्य काम डिक्रिप्शन कुंजी लेना और पर्यावरण चर को डिक्रिप्ट करने का प्रयास करना है।

<पी> बिल्डिंग एनफ्लो:लारवेल और अपस्टैश रेडिस के साथ पर्यावरण चर को सुरक्षित रूप से साझा करना

<पी> आप लाइववायर पेज कंपोनेंट को app/Livewire/DecryptEnvPage.php पर पा सकते हैं और resources/views/livewire/decrypt-env-page.blade.php पर तदनुसार टेम्पलेट .

कार्रवाई

<पी> इस प्रोजेक्ट के लिए मैंने अपने एप्लिकेशन में व्यावसायिक तर्क के मुख्य घटकों को व्यवस्थित करने के लिए एक्शन/एग्जीक्यूटर पैटर्न का उपयोग किया है। यह मुझे कोड बढ़ने पर भविष्य में पुन:प्रयोज्यता, परीक्षणशीलता और रखरखाव की अनुमति देता है, यह मुझे अपने एप्लिकेशन के विभिन्न हिस्सों के बीच इस तरह के व्यवहार को साझा करने की भी अनुमति देता है, मान लीजिए, एक भविष्य एपीआई... कौन जानता है?...

<पी> आप कार्रवाइयां app/Actions पर पा सकते हैं लेकिन मैं आपको एन्क्रिप्ट और डिक्रिप्ट करना चाहूंगा क्योंकि वे मुख्य घटक हैं जो पर्यावरण चर के एन्क्रिप्शन और डिक्रिप्शन को संभालते हैं।

एन्क्रिप्शन

<पी> मैं बहुत भाग्यशाली था कि लारवेल के पास एक अंतर्निहित एन्क्रिप्शन सहायक है, लेकिन मुझे कुछ अलग की आवश्यकता थी क्योंकि मैं रनटाइम पर उत्पन्न एक कस्टम एन्क्रिप्शन कुंजी प्रदान करना चाहता था।

<पी> कुछ खोजबीन के बाद, मुझे एक रास्ता मिल गया! हम लारवेल की अंतर्निहित कक्षा Illuminate\Encryption\Encrypter का उपयोग कर सकते हैं .

use Illuminate\Encryption\Encrypter;
 
$encrypter = new Encrypter(
 'custom-encryption-key', // this is the one we would want to generate
 config('app.cipher'), // we'll use Laravel default cipher
);
 
// Hooray! We can now encrypt our value
$encryptedValue = $encrypter->encryptString($value);
<पी> ठीक है... तो हमें एन्क्रिप्शन काम कर रहा है, यदि आप मेरे द्वारा साझा की जा रही फ़ाइलों की जाँच कर रहे हैं, तो आपने देखा होगा कि यह कोड एन्क्रिप्ट और डिक्रिप्ट क्रियाओं पर पाया जा सकता है।

भंडारण

<पी> हमने कवर किया है कि हम Actions और Laravel के मूल Encrypter का उपयोग कैसे करते हैं हमारे मूल्यों को एन्क्रिप्ट और डिक्रिप्ट करने के लिए क्लास, लेकिन हमने अभी तक कवर नहीं किया है कि हम उन्हें अपस्टैश रेडिस में कैसे संग्रहीत करते हैं।

<पी> वह कोड StoreEnvFile पर रहता है कार्रवाई.

<पी> मैं उस फ़ाइल से कुछ चीज़ों को उजागर करना चाहता हूँ, निम्नलिखित कोड।

// ...
 
RedisFacade::pipeline(function (Redis $pipe) use (...) {
 $options = ['EX' => $ttl]; // here is where we set the expiration time
 $pipe->set("envfile:$id", $encrypted->value, $options);
 $pipe->set("envfile:$id:shareLimit", $shareLimit, $options);
});
 
// ...
<पी> ऊपर दिए गए कोड पर आप रेडिस पाइपलाइन का उपयोग होते हुए देख सकते हैं, जो यह सुनिश्चित करेगा कि सभी कमांड एक ही लेनदेन में निष्पादित हों। यह महत्वपूर्ण है क्योंकि सेट कमांड विफल होने पर हम एन्क्रिप्टेड मान को संग्रहीत नहीं करना चाहते हैं।

तैनाती

<पी> तैनाती के लिए मैंने हाल ही में जारी लारवेल क्लाउड का उपयोग किया है।

<पी> लारवेल क्लाउड पर तैनात करना अविश्वसनीय रूप से आसान था, मुझे रिपॉजिटरी से संलग्न रेडिस इंस्टेंस और एक प्रावधानित डोमेन के साथ पूरी तरह से तैनात ऐप तक जाने में एक मिनट से भी कम समय लगा। अब भी, तैनाती में 30 सेकंड से कम समय लगता है। 🚀

<पी> बिल्डिंग एनफ्लो:लारवेल और अपस्टैश रेडिस के साथ पर्यावरण चर को सुरक्षित रूप से साझा करना

<पी> आप https://envflow.laravel.cloud पर तैनात उत्पादन परिवेश पर जा सकते हैं।

निष्कर्ष

<पी> मुझे आशा है कि आपको यह पोस्ट पसंद आई होगी और इससे आपको यह समझने में मदद मिली होगी कि मैंने Envflow कैसे बनाया।

<पी> मुझे लगता है कि बहुत सारे एप्लिकेशन हैं जो प्राथमिक डेटाबेस के रूप में अपस्टैश रेडिस का उपयोग कर सकते हैं, भले ही यहां रेडिस का उपयोग केवी स्टोर के रूप में किया गया था, यह उससे कहीं अधिक कर सकता है और मैं यह सुनिश्चित करूंगा कि मैं इसे भविष्य में किसी अन्य प्रोजेक्ट के साथ कवर करूंगा जिस पर मैं काम करूंगा।

<पी> इस प्रोजेक्ट का सोर्स कोड GitHub पर उपलब्ध है, बेझिझक इसे देखें और यदि आपके पास कोई विचार या सुझाव है (या कोई बग मिले) तो योगदान दें।


  1. डेटा संरचनाओं में परिशोधित समय जटिलता डेटा संरचनाओं में परिशोधित समय जटिलता

    परिशोधन विश्लेषण इस विश्लेषण का उपयोग तब किया जाता है जब कभी-कभी ऑपरेशन बहुत धीमा होता है, लेकिन अधिकांश ऑपरेशन जो बहुत बार निष्पादित होते हैं, वे तेज़ होते हैं। डेटा संरचनाओं में हमें हैश टेबल्स, डिसजॉइंट सेट्स आदि के लिए परिशोधित विश्लेषण की आवश्यकता होती है। हैश-टेबल में, अधिकांश समय खोज समय जट

  1. पावरलाइन:कस्टम स्टेटस लाइन्स और प्रॉम्प्ट्स के साथ विम और शेल को बेहतर बनाएं पावरलाइन:कस्टम स्टेटस लाइन्स और प्रॉम्प्ट्स के साथ विम और शेल को बेहतर बनाएं

    पावरलाइन विम एडिटर के लिए एक बेहतरीन स्टेटसलाइन प्लगइन है, जिसे पायथन में विकसित किया गया है और बैश जैसे कई अन्य अनुप्रयोगों के लिए स्थिति रेखाएं और संकेत प्रदान करता है , ज़श , tmux, और भी बहुत कुछ। यहविमकी उपस्थिति और कार्यक्षमता को बढ़ाता है संपादक विंडो के नीचे एक अनुकूलन योग्य और सूचनात्मक स्थ

  1. ओपनसीवी में एक छवि मास्किंग क्या है? ओपनसीवी में एक छवि मास्किंग क्या है?

    मास्क संचालन में किसी दिए गए मास्क मैट्रिक्स के आधार पर किसी छवि के प्रत्येक पिक्सेल का मान पुनर्गणना किया जाता है, इसे कर्नेल के रूप में जाना जाता है। मास्किंग को अन्यथा फ़िल्टरिंग के रूप में जाना जाता है। filter2D() Imgproc . की विधि वर्ग एक स्रोत, गंतव्य और कर्नेल मैट्रिक्स को स्वीकार करता है औ